初识windows编程之对话框高级操作

链接:http://www.rupeng.com/forum/thread-1794-1-2.html


1.从一个对话框打开另一个对话框

主要操作:添加对话框资源,仿照主对话框的程序,实现弹出对话框的功能;


2.从主对话框传递参数给弹出的对话框

主要代码:

MainDlg.cpp

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
TCHAR *buff = "abcd";
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_LOGINDIALOG),NULL,LoginDlg_Proc,(LPARAM)buff);
}
        break;
        default:
break;
    }
}

LoginDlg.cpp

BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
TCHAR *buff = (TCHAR*)lParam;
MessageBox(hwnd,buff,TEXT(""),MB_OK);
    return TRUE;
}

3.在子对话框中进行操作,并将值返回给主对话框

在子对话框中输入用户名和密码,并将用户名和密码在主对话框中可以显示;

这里要注意两点,一个是SetWindowLong()函数和GetWindowLong()函数的使用,具体的使用方法大家可以上网 查找,这里就不赘述了;

还有点很重要的就是下面代码中红色的部分,涉及到指针和动态空间的问题,这里必须先申请动态空间,再进行字符串的复制操作,否则会因为内存的问题导致字符串的复制不能正确进行。

核心代码:

BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
LoginData *ld = (LoginData*)lParam;
SetWindowLong(hwnd,GWL_USERDATA,(LPARAM)ld);
    return TRUE;
}


void LoginDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDOK:
{
TCHAR userName[255];
TCHAR passWord[255];
GetDlgItemText(hwnd,IDC_EDITUSERNAME,userName,sizeof(userName)/sizeof(TCHAR));
GetDlgItemText(hwnd,IDC_EDITUSERWORD,passWord,sizeof(passWord)/sizeof(TCHAR));
LoginData *ld = (LoginData*)GetWindowLong(hwnd,GWL_USERDATA);
//MessageBox(hwnd,userName,TEXT(""),MB_OK);
int lenum=strlen(userName);
ld->userName = new TCHAR[lenum+1];
lstrcpy(ld->userName,userName);
int lenpw=strlen(passWord);
ld->passWord = new TCHAR[lenpw+1];
lstrcpy(ld->passWord,passWord);

EndDialog(hwnd,1);
}
        break;
case IDCANCEL:
{
EndDialog(hwnd,0);
}
break;
        default:
break;
    }
}


4.总结

学完这一节,我们应该学会在主对话框下创建子对话框的简单操作了。视频中有些地方出了点问题(复制字符串),杨老师没有去解决,感觉是因为那不是本节课的重点,但是我们自己不能就这样放过问题,我们自己要学会自己主动的发现问题,并解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值