首先,我们需要有自己喜欢或者能够使用的IDE来进行!
其实对于WIN32的窗口程序来说,一般都不太使用对话框直接做程序主体,也只有个别的IDE会提供对话框程序的模板,这个当然跟MFC中的的对话框程序是有区别的;
使用DialogBox函数其实是以宏用CreateWindowEx的方式创建的,但它是有许多局限性的,例如不直接响应WM_CHAR和键盘消息等......
但是,利用对话框程序进行初步的学习更容易一些,而且学习基本控件的操作也最好先使用对话框程序,另外它可以快速的完成简单功能的程序。
这节的练习是完全用手工打造一个对话框程序的模板。一个对话框程序的工程一般需要3个文件建立:
1. 主程序 main.cpp
2. 资源文件 res.rc 对话框是一种资源,需要建立资源文件
3. 头文件 resource.h 将资源中的ID编号用#define的方式与容易理解和记忆的文本相结合;可以偷懒的就直接用数字来定义资源而不用这个文件了
步骤:
1. 建立一个资源文件res.rc:
#include <windows.h>
10086 DIALOG 122, 75, 213, 143//建立一个ID号为10086的,类型为DIALOG的资源
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU//窗口的风格WindowStyle
CAPTION "dialog"
BEGIN
DEFPUSHBUTTON "OK", 10087, 162, 101, 40, 14//建立一个ID号为10087的按钮
END
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPre, LPSTR lpCmdLine,int nShowCmd)
{
DialogBox(hInst, MAKEINTRESOURCE(10086), NULL, NULL);//只是从资源中获取ID为10086的资源,并显示窗口
return 0;
}
至此,我们build工程就可以弹出一个窗口了! 但问题也同时出现了:我们关不掉这个窗口(IDE如果有停止功能是没有关系的),这是由于缺少了消息处理函数。
3. 在main.cpp中创建一个消息处理函数,并处理关闭这个消息
BOOL CALLBACK DialogProc(HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
switch(nMsg)
{
case WM_CLOSE://处理关闭消息
EndDialog(hwnd, 0);
break;
default:
return DefWindowProc(hwnd, nMsg, wParam, lParam);
}
}
DialogBox(hInst, MAKEINTRESOURCE(10086), NULL, DialogProc);
至此,我们已经能够关闭这个程序了。
5. 然后我们再简单处理一下OK按钮的事件,在按下OK时,弹出窗口显示Hello World!
5.1 在switch(nMsg)中增加WM_COMMAND的消息
case WM_COMMAND:
OnCommand(hwnd, wParam, lParam);
break;
5.2 完成OnCommand函数
void OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
switch(LOWORD(wParam))
{
case 10087:
MessageBox(hwnd,"Hello World!","",0);
break;
}
}
最后,这个练习主要是加强对话框程序的理解,实际的开发过程中这样做是没有效率的;我们进行对话框程序的主要目的是后面几个基本控件的快速学习和理解。
目标 | 涉及知识点 | 参考时间 |
1:建立资源文件 2:根据.rc文件建立resource.h头文件 3:使用DialogBox宏,实现窗口显示 4:制作DialogProc消息处理函数,实现EndDialog功能 5:实现一个按钮的功能
| .rc文件格式 给控件ID定义其编号 DialogBox(1,2,3,4) 消息处理函数&EndDialog ON_COMMAND | 2 1 1 2 1 |