您的位置:首页 > 编程语言

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

2013-10-29 22:37 363 查看
链接: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.总结

学完这一节,我们应该学会在主对话框下创建子对话框的简单操作了。视频中有些地方出了点问题(复制字符串),杨老师没有去解决,感觉是因为那不是本节课的重点,但是我们自己不能就这样放过问题,我们自己要学会自己主动的发现问题,并解决问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: