建立一个Win32 Application工程xuzhiqiangwhut,体验windows平台编程的一些基础概念。
步骤:
1.新建工程。选择Win32 Application,填写工程名称,选好存储位置,点击确定,选择Empty Project选项,如下所示即可建立新工程。
2.新建文件。文件->新建,选择C++ Source File,如图所示即可。
3.编程。本例只是显示一个窗口,所以程序很简单,只编写两个函数:windows程序入口函数WinMain;窗口过程函数WinXuProc。源代码如下:
以下是代码片段: |
#include
//窗口过程函数声明
LRESULT CALLBACK WinXuProc
(
HWND hwnd,//handle to window
UINT uMsg,//message identifier
WPARAM wParam,//first message parameter
LPARAM lParam//second message parameter
);
//程序入口函数(主函数)
int WINAPI WinMain
(
HINSTANCE hInstance,//handle to current instance
HINSTANCE hPrevInstance,//handle to previous instance
LPSTR lpCmdLine,//command line
int nCmdShow//show state
)
{
//设计一个窗口类
WNDCLASS wndcls;
wndcls.cbClExtra =0;//类附加内存,一般设为0
wndcls.cbWndExtra =0;//窗口附加内存,一般设为0
wndcls.hbrBackground =(HBRUSH)GetStockObject(BLACK_BRUSH);//调用GetStockObject指定背景画刷
wndcls.hCursor =LoadCursor(NULL,IDC_CROSS);//调用LoadCursor函数加载一个光标资源
wndcls.hIcon =LoadIcon(NULL,IDI_ERROR);//调用LoadIcon函数加载一个图标资源
wndcls.hInstance =hInstance;//应用程序实例句柄由WinMain函数传进来
wndcls.lpfnWndProc =WinXuProc;//指向上面定义的窗口过程函数
wndcls.lpszClassName ="xuzhiqiangwhut";//指定窗口类的名字
wndcls.lpszMenuName =NULL;//指定菜单资源,此处NULL表明创建的窗口没有默认的菜单
wndcls.style =CS_HREDRAW|CS_VREDRAW;//指定窗口类型的样式
//注册窗口类
RegisterClass(&wndcls);
//创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄
HWND hwnd;
hwnd=CreateWindow("xuzhiqiangwhut","hello windows",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
//显示及刷新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//定义消息结构体,开始消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam ;
}
//窗口过程函数定义
LRESULT CALLBACK WinXuProc
(
HWND hwnd,//handle to window
UINT uMsg,//message identifier
WPARAM wParam,//first message parameter
LPARAM lParam//second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];//定义字符串
sprintf(szChar,"char code is %d",wParam);
MessageBox(hwnd,szChar,"char",0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
1.由本例可知创建一个完整的窗口,需要4个步骤:设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口。
2.主函数中编写了一个消息循环,不断地从消息队列中取出消息,并进行响应。本例的Windows消息处理机制如下图所示:
1在应用程序xuzhiqiangwhut中敲击键盘,操作系统接收到窗口消息,将消息投递到xuzhiqiangwhut的消息队列中。
2程序在消息循环中调用GetMessage函数从消息队列中取出消息进行预处理,3调用DispatchMessage函数将消息回传给操作系统。
4操作系统调用窗口过程函数对消息进行处理。
文章评论(0条评论)
登录后参与讨论