C语言也能干大事第十四节(如鹏基础)

来源:互联网 发布:农村淘宝家乡版下载 编辑:程序博客网 时间:2024/05/16 23:35

程序中打开新对话框,其实有代码可参考,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