程序中打开新对话框,其实有代码可参考,WinMain。
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);
只要复制一份MainDlg.cpp和MainDlg.h改一下就行了
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MYDLG), NULL, Dlg1_Proc);
怎么传递参数?使用DialogBoxParam函数,对比差别。
传入int;传入字符串;传入结构体。
传出。
怎样判断按下的按钮?通过返回值配合
怎么样在对话框关闭的时候把参数回传回去?SetWindowLong设置的东西是和窗口的实例绑在一起的。什么是窗口实例?一个窗口打开两个、一个窗口打开两次(隐藏/打开、销毁/打开)。
SetWindowLong(hwnd,GWL_USERDATA,(LPARAM)param);
1、在资源中插入新的对话框,并且调整控件
2、
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
DialogBox(hInstance, MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL, Main_Proc);
3、每个对话框都有自己的一套MainDlg.cpp类似的代码,Main_Proc、Main_OnInitDialog等等
修改Main_Proc、Main_OnInitDialog等的前缀为LoginDlg_****,函数名不能重复
复制一份LoginDlg.h
#ifndef _MAIN_H等也要修改
DialogBoxParam
parameter:参数
#include "LoginDlg.h"
在OnInitDialog中处理传入参数,lParam就是传入的参数
通过DialogBoxParam来传入参数,在对话框中的***_OnInitDialog的LPARAM lParam来取参数。
long类型,指针就是long了。
传递字符串
TCHAR* buff = "abcd";
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL, LoginDlg_Proc,(LPARAM)buff);//LoginDlg_Proc
在对话框之间传字符串(指针)
HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
LoginData ld;
ld.userName = "yzk";
ld.password = "123456";
//TCHAR* buff = "abcd";
DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_LOGINDIALOG), NULL, LoginDlg_Proc,(LPARAM)&ld);//LoginDlg_Proc
BOOL LoginDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
LoginData* ld = (LoginData*)lParam;
SetDlgItemText(hwnd,IDC_EDITUSERNAME,ld->userName);
SetDlgItemText(hwnd,IDC_EDITPASSWORD,ld->password);
return TRUE;
}
DialogBoxParam默认是阻塞运行的
可以设置与窗口句柄关联的数据,SetWindowLong可以看做是把一些数据与窗口管理起来,“让它代为保管”
SetWindowLong、GetWindowLong来在窗口中保存指针就可以了
只有一个文本框的对话框,有两个按钮【确定】、取消,允许对话框的使用者指定一个函数用来进行校验,能够校验值的正确性,如果不正确还会显示错误信息。提示:函数指针。
EndDialog(hwnd, 1);
在调用代码中通过DialogBoxParam的返回值就可以得到EndDialog设定的参数
不要重复同样的错误。不要忘了break。通过调试功能发现的问题。在怀疑的地方加断点调试
LBN_DBLCLK:DoubleClick
if(LBN_DBLCLK==codeNotify)
{
//MessageBox(hwnd,TEXT("双击"),TEXT(""),MB_OK);
//LB_GETCURSEL消息
int index = SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,TEXT(""),MB_OK);
}
课后作业:允许用户定制校验策略的InputDialog
2、
Codenotify=LBN_DBLCLK 用户双击列表框中的字符串。
if(LBN_DBLCLK==codeNotify)
{
int index = SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,TEXT(""),MB_OK);
}
3、
LBN_SELCHANGE
http://msdn.microsoft.com/en-us/library/bb773169(VS.85).aspx