之前写过一个用很简单的代码创建一个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
本站文章未经文下加注授权不得拷贝发布。