您的位置:首页 > 其它

创建一个win32应用程序的步骤

2015-07-02 18:33 369 查看
1、编写WinMain函数,可以在MSDN中查找并复制
2、设计窗口类(WNDCLASS)
3、注册窗口类
4、创建窗口
5、显示并更新窗口
6、编写消息循环
7、编写窗口过程函数。窗口过程函数的语法,可以通过MSDN查看WNDCLASS的lpfnWndProc成员变量,在这个成员的解释中可以查到。
 程序代码如下:
#include <Windows.h>
#include <stdio.h>
//窗口过程函数声明
LRESULT CALLBACK WinEasyLiuProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
//Main函数,程序入口
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.cbClsExtra = 0;//类附加内存
wndcls.cbWndExtra = 0;//窗口附加内存
wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//背景画刷句柄
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);//指定窗口类的光标句柄,如果为NULL,那么无论何时鼠标进入到应用程序窗口中,应用程序都必须明确的设置光标的形状
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//指定窗口类的图标句柄,如果加载的是系统图标,第一个参数必须为NULL
wndcls.hInstance = hInstance;//应用程序句柄由WinMain函数传进来
wndcls.lpfnWndProc = WinEasyLiuProc;//函数指针,指向窗口过程函数,用来对消息进行处理
wndcls.lpszClassName = "EasyLiu2015";//窗口类的名字
wndcls.lpszMenuName = NULL;//菜单项
wndcls.style = CS_HREDRAW | CS_VREDRAW;//窗口样式
//注册窗口类
RegisterClass(&wndcls);
//创建窗口
HWND hWnd;
hWnd = CreateWindow("EasyLiu2015", "http://www.baidu.com", 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);//分派一个消息到窗口过程,由窗口过程函数进行处理,实际上是将消息回传给操作系统,由操作系统调用窗口过程函数对消息进行处理
}
}
LRESULT CALLBACK WinEasyLiuProc(
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;
case WM_LBUTTONDOWN://左键按下
MessageBox(hwnd, "mouse clicked", "message", 0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc, 0, 50, "哈尔滨工业大学", strlen("哈尔滨工业大学"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT://窗口重绘
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd, &ps);
TextOut(hDC, 0, 0, "Hello EasyLiu", strlen("Hello EasyLiu"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE://窗口关闭
if (IDYES == MessageBox(hwnd, "是否真的结束?", "message", MB_YESNO))
{
DestroyWindow(hwnd);//会发送 WM_DESTROY消息
}
break;
case WM_DESTROY://窗口摧毁
PostQuitMessage(0);//向应用程序的消息队列中投递一条WM_QUIT消息并返回,GetMessage(&msg,NULL,0,0)只有在收到WM_QUIT消息时才返回0,此时消息循环才结束,程序退出。
//要想让程序正常退出,必须响应WM_DESTROY消息,在消息响应代码中调用PostQuitMessage函数。
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);//默认的窗口过程,对应用程序没有处理的其他消息提供默认处理。
}
return 0;
}

运行结果如下:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Win32应用程序