初识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.总结
学完这一节,我们应该学会在主对话框下创建子对话框的简单操作了。视频中有些地方出了点问题(复制字符串),杨老师没有去解决,感觉是因为那不是本节课的重点,但是我们自己不能就这样放过问题,我们自己要学会自己主动的发现问题,并解决问题。
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.总结
学完这一节,我们应该学会在主对话框下创建子对话框的简单操作了。视频中有些地方出了点问题(复制字符串),杨老师没有去解决,感觉是因为那不是本节课的重点,但是我们自己不能就这样放过问题,我们自己要学会自己主动的发现问题,并解决问题。
相关文章推荐
- C# - Delegate Simple Demo
- windows下安装requests模块 到python,eclipse可以使用
- C++静态成员函数小结
- C#:Func的同步、异步调用
- C++静态成员函数小结
- C语言中volatile关键字的作用
- 一站式编程笔记(17,18,19)
- Java多态中的一个小问题
- python读取pop3服务器邮件并且下载
- 翻译学python---《Learn Python the hard Way》---第一章 绪论
- c#常见书写错误集锦
- java中String的比较符
- Documentation/java.txt
- C++ 指针和引用的区别
- (字符串的处理4.7.22)POJ 3337 Expression Evaluator(解析C风格的字符串)
- C语言学习笔记
- 疯狂C++巡讲(上)
- eclipse groovy 插件
- Struts2——(8)struts2中文件的上传
- Struts2——(8)struts2中文件的上传