[2]窗口程序的创建
一,创建一个新的Win32项目,将自带的代码去除,只留下一个入口函数 ? 1 #include "stdafx.h" 2 #include "Win32Project1.h" ? 1 WNDCLASS MyMnd = { 0 }; 2 MyMnd.lpszClassName = TEXT("MyMnd"); 3 MyMnd.hbrBackground = (HBRUSH)COLOR_BACKGROUND; 4 MyMnd.lpfnWndProc = WindowProc; 5 MyMnd.hInstance = hInstance; // calsswnd 分三类 系统类、全局窗口类、局部窗口类,区别每块相同名字的DLL 就是看他的实例句柄 6 7 RegisterClass(&MyMnd); //注册窗口信息到系统 8 9 HWND hwindow = CreateWindow(TEXT("MyMnd"),TEXT("Han"),WS_OVERLAPPEDWINDOW,0,500,100,NULL,hInstance,NULL); 10 ShowWindow(hwindow,nCmdShow); 11 UpdateWindow(hwindow);//立刻更新窗口 12 13 MSG msg = { 0 }; 14 while (GetMessage(&msg,0)) 15 { 16 TranslateMessage(&msg); 17 DispatchMessage(&msg); 18 } 19 20 return (int) 0; WindowProc()函数 ?????????????WindowProc()函数 LRESULT CALLBACK WindowProc ( HWND hWnd,UINT message, 返回类型是LRESULT,是由Windows所定义的数据类型,通常相当于 long 型。 当用户按下一个键时。那是什么键,由这最后两个变量来说明。 注意 窗口基本完成后需要用到注册项将窗口信息进行注册。 RegisterClass(&MyMnd); 如果发生退出子程序,获取窗口队列不退出程序的情况: while (GetMessage(&msg,hwnd,0)) 在获取窗口消息的时候,退出调用了PostQuitMessage(0);//退出子程序窗口 就会出现获取消息循环结束不了,返回不了为0 的情况。 这样我们可以把GetMessage(&msg,0)第二个参数置为0; GetMessage(&msg,0) 如果需要创建全局窗口类,那么只需要在局部窗口类中加一个风格定义即可: MyMnd.style = CS_GLOBALCLASS; 创建窗口先查找局部窗口类,如果没找到则找全局窗口类,如果还没找到则找系统表,如果三个都没找到则返回创建失败! 加入UpdateWindow(hwindow);//立刻更新窗口 主要目的是提高消息处理的优先级; ? 下面是本课的全部代码 // Win32Project1.cpp : 定义应用程序的入口点。 // #include "stdafx.h" #include "Win32Project1.h" LRESULT CALLBACK WindowProc( _In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam ); int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR lpCmdLine,_In_ int nCmdShow) { WNDCLASS MyMnd = { 0 }; MyMnd.lpszClassName = TEXT("MyMnd"); MyMnd.hbrBackground = (HBRUSH)COLOR_BACKGROUND; MyMnd.lpfnWndProc = WindowProc; MyMnd.hInstance = hInstance; // calsswnd 分三类 系统类、全局窗口类、局部窗口类,区别每块相同名字的DLL 就是看他的实例句柄 RegisterClass(&MyMnd); //注册窗口信息到系统 HWND hwindow = CreateWindow(TEXT("MyMnd"),NULL); ShowWindow(hwindow,nCmdShow); UpdateWindow(hwindow);//立刻更新窗口 MSG msg = { 0 }; while (GetMessage(&msg,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) 0; } LRESULT CALLBACK WindowProc( _In_ HWND hwnd,_In_ LPARAM lParam ) { switch (uMsg) { case WM_CLOSE: PostQuitMessage(0);//退出子程序窗口 break; case WM_CREATE: break; } return DefWindowProc(hwnd,uMsg,wParam,lParam); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |