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