WM_CREATE消息
先定义一个全局变量
HINSTANCE button = 0;
case WM_CREATE:
{
//创建按钮
HWND hButton = CreateWindow(L"Button", L"按钮1", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 45, 160, 65, hWnd, NULL, button, NULL);
}
return 0;
响应用户的单击
wParam的低字节位表示ID号,高字节位表示控件通知.
lParam中保存了控件的句柄。
先看一下createwindow介绍
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTR lpClassName,
_In_opt_ LPCTSTR lpWindowName,
_In_ DWORD dwStyle,
_In_ int x,
_In_ int y,
_In_ int nWidth,
_In_ int nHeight,
_In_opt_ HWND hWndParent,
_In_opt_ HMENU hMenu,
_In_opt_ HINSTANCE hInstance,
_In_opt_ LPVOID lpParam
);
简单地说,控件通常不需要菜单,所以,可以用这个参数来设置控件的ID,反正hMenu闲着也没事干,就给它个ID。ID号是一个整数,不过为了可读性,一般是声明一个宏,其实我们在资源编辑器中使用的资源ID就是在resource.h中定义的宏的.
我们也来模拟一下,在文件的前面(#include…后)也声明三个宏,分别标识三个按钮。
#define IDB_ONE 3333
#define IDB_TWO 3334
#define IDB_THREE 3335
接着创建三个按钮
case WM_CREATE:
{
CreateWindow(L"Button", L"按钮一", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 10, 120, 60, hWnd, (HMENU)IDB_ONE, button, NULL);
CreateWindow(L"Button", L"按钮二", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 80, 120, 60, hWnd, (HMENU)IDB_TWO, button, NULL);
CreateWindow(L"Button", L"按钮三", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
35, 150, 120, 60, hWnd, (HMENU)IDB_THREE, button, NULL);
}
然后响应WM_COMMAND消息。
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDB_ONE:
MessageBox(hWnd, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
break;
case IDB_TWO:
MessageBox(hWnd, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
break;
case IDB_THREE:
MessageBox(hWnd, L"您点击了第三个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
break;
default:
break;
}
}
return 0;
当我点击了按钮后,按钮上的文本变成“按钮X已点击”,该怎么做呢?Windows系统是基于消息机制的,所以,首先想到,向控件发送消息,要改变控件相关的文本,应当发送WM_SETTEXT消息。
switch (LOWORD(wParam))
{
case IDB_ONE:
//MessageBox(hwnd, L"您点击了第一个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"第一个按鈕已点击");
break;
case IDB_TWO:
//MessageBox(hwnd, L"您点击了第二个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"第二个按鈕已点击");
break;
case IDB_THREE:
//MessageBox(hwnd, L"您点击了第三个按钮。", L"提示", MB_OK | MB_ICONINFORMATION);
SendMessage((HWND)lParam, WM_SETTEXT, (WPARAM)NULL, (LPARAM)L"第三个按鈕已点击");
break;
default:
break;
}
改编自源于网络笔记
本文介绍了如何在Win32应用程序中创建按钮控件,并响应WM_CREATE和WM_COMMAND消息。通过定义全局变量和宏来标识按钮ID,详细讲解了控件的创建过程和消息处理,旨在帮助读者理解Windows系统的消息机制。
2万+

被折叠的 条评论
为什么被折叠?



