前面几篇文章绘图都是采用EasyX提供的TC的graphics.h的图形库,但是明显汇出的图形是在黑屏下面,难免让人感觉不爽,同时我们想编写按钮类的软件即对话框软件,又不知道从何入手,翻开教材都是直接进行switch(message)操作,比如我们想在对话框中画图,翻开API参考书,很多都是直接在WndProc()函数下面直接操作,但是这个前期的对话框工程怎样构建呢?同时怎样在上面画图呢?下面一步一步的进行操作,并且画一个椭圆。
1、打开VC->新建->工程,选择Win32 Application.如下图
2、工程名称根据个人爱好填写吧,单击确定
3、选择“一个简单的win32程序”。可以选择“一个空工程”,选择空工程的话,主函数要自己写,省事我们就用简单的win32程序选项吧。单击完成。
4、我们发现只有类选项卡和文件选项卡,没有资源选项卡。如下图(在第三步选择一个hello world 的话发现这里会有资源选项卡)
因此资源选项卡要自己添加。
5、选择文件选项卡,选择Source File,右键选择添加文件到目录。在文件名随便填写,类型选择.rc即资源选项卡。点确定,你会发现资源选项卡出来了
但是感觉不爽,因为上面显示载入失败,右键的话显示已经打开,所以我们可以在邮编那个文件夹右键插入资源,也可以将右边的文件关掉,然后在点source resources 前面的-,再点就显示没有资源,下来插入对话框。
6、右键source resources 选择插入,在弹出的对话框选择dialog,(以后添加其他资源都是这样)如下图
点新建,对话框就出来啦。是不是很爽。如下图
7、但是明显现在这个对话框还没发用。因为它上面的资源比如确定、取消按钮、对话框本身并没有与程序关联。怎样关联呢?我们都知道程度对这类对话框资源的操作是采用ID号进行操作的,因此必然有一个文件是存储所有资源号的,这个文件就是resouce.h文件,因此我们应该将这个文件包含下来,其实在我们创建资源的时候这个文件已经生成了但是还没有包含进来。包含的过程跟田间cpp文件一眼,在Header Files右键将这个文件添加进来。打开这个文件,我们发下已经有一些ID了,这些就是那个对话框里面的资源号,以后我们在对话框界面添加删除控件,这个文件都会改变,不用我们关心,只要我们在使用时候引用这个头文件就行。、
8、到目前为止平台我们已经搭建好了,怎样使用呢?首先打开我们编程序的文件,我这里是示范.cpp,我们发现里面只有一个主函数,这个就是我们的主函数。首先添加头文件
#include "stdafx.h"
#include "resource.h"
#include <windowsx.h>
9、在主函数中调用对话框采用DialogBox API(),这个函数定义参考MSDN。
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, WndProc);其中第二个参数宏定义里面的参数就是我们对话框的ID,修改对话框的ID,在对话框上右键,这里就不多说了。第三个参数别关,NULL,第四个参数是我们对话框对应的函数,我们知道每个对话框都有自己对应的一个主函数,进行各种操作。
10、编写WndProc函数
BOOL WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)大家应该有一定的Windows 编程经验吧,这里就不多说了。在这个函数里面就可以对message进行判断,然后进行各种操作了。现在就可以运行一下试试
11、明显运行这个程序我们不能进行各宗操作,比如关闭对话框,因此,当我们建立一个对话框的时候应该有对话框的初始话、对话框的按钮消息函数、对话框的退出,如下
BOOL Wnd_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
void Wnd_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
void Wnd_OnClose(HWND hwnd)
对消息的判断采用
HANDLE_MSG(hWnd, WM_INITDIALOG, Wnd_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Wnd_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Wnd_OnClose);
进行控制。
12、在上面画椭圆就不说了,很简单,随便找伴API函数的书都有介绍,这里就不说了
完整代码如下
/*
jianxiawzx 制作 应用请指明出处!!!
联系方式 [email protected]
*/
#include "stdafx.h"
#include "resource.h"
#include <windowsx.h>
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, WndProc);
return 0;
}
BOOL WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int cxClient,cyClient;
int i;
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Wnd_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Wnd_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Wnd_OnClose);
case WM_PAINT:
{
hdc = BeginPaint(hWnd,&ps);
Ellipse(hdc,100,100,500,400);
}
break;
}
return 0;
}
BOOL Wnd_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}
void Wnd_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDOK:
{
MessageBox(hwnd,TEXT("成功啦"),TEXT("吼吼"),MB_OK);
}
break;
}
}
void Wnd_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}
怎么样很爽吧!!!