之前写过一个用很简单的代码创建一个win32窗口应用程序的博文
这是一篇补丁,来说明怎么增加一个按钮并且响应点击消息
由于是补丁,所以之前说过的话就不写了,看下面的代码里被注释围起来的部分
#include LRESULT CALLBACK xiaoxichuli (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HWND hwndButton; //按钮的句柄 switch (message) { case WM_CREATE: /****************************创建按钮的部分**************************************/ //创建窗口的时候要做的事情 hwndButton=CreateWindow(TEXT("BUTTON"), TEXT("喵"), WS_VISIBLE|WS_CHILD|WS_BORDER,10, 10,100, 30,hwnd,(HMENU)1/*给按钮一个ID为1*/,(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE), NULL); break; /****************************处理事件消息部分*************************************/ case WM_COMMAND: if(LOWORD(wParam)==1) //响应ID为1的消息 { MessageBox(hwnd,TEXT("来戳我吖!"),TEXT("喵吖喵"),MB_OK);//跳一个卖萌的消息框出来 } break; /********************************************************************************/ case WM_DESTROY: // 在消息队列中插入一个[退出程序]消息 PostQuitMessage (0) ; break; default:return DefWindowProc (hwnd, message, wParam, lParam) ; } // 执行内定的消息处理 return 0; } int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) { static char szAppName[] = TEXT("喵"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = xiaoxichuli; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);// 加载 图标供程序使用 IDI-图示ID wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);// 加载 鼠标光标供程序使用 IDC-游标ID wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //GetStockObject 取得一个图形对象(此例中是取得窗口背景的画刷对象) wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; // 注册窗口 if (!RegisterClass(&wndclass)) //如果程序类没法注册的话 { MessageBox(NULL,TEXT("程序无法运行"),szAppName,MB_ICONERROR); return 0; } //根据窗口类别 WndClass 建立一个窗口 hwnd = CreateWindow(szAppName,TEXT("喵~"),WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,200,100,NULL,NULL,hInstance,NULL); // 在屏幕上显示窗口 ShowWindow(hwnd,iCmdShow); // 指示窗口自我更新 UpdateWindow(hwnd); // 从消息队列中取得消息 while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }
以上是一个可以编译运行的代码,除了围起来的部分其它地方都没变【只是改了下消息处理函数的名字
在win32程序里,创建按钮也是用CreateWindow函数,只是参数有点不同:
·窗口样式要有WS_CHILD,否则不会显示出来【另外两个样式可有可无】
·要有父窗口句柄
·第一个参数为TEXT(“BUTTON”),似乎不可以是其他的
·第二个参数的作用变成定义按钮上的文字
·原本的菜单句柄那里变成了ID号
而且按钮不用窗口注册和显示函数…
关于消息处理这一块我还没搞太明白,就不详解了。
本文发布于 https://luojia.me
本站文章未经文下加注授权不得拷贝发布。