C++Windows编程问题,在一个窗口中怎么接收按钮被点击的消息?

2024-11-27 03:42:39
推荐回答(3个)
回答1:

首先要给按钮一个ID,然后在create的时候保存它的句柄(static HWND)。在WM_COMMAND消息里写响应函数,用switch进行选择。如下代码:

#define BUTTON_ID  10011            //按钮ID
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wp,LPARAM lp)
{
HDC hdc;
PAINTSTRUCT ps;
static HWND btnWnd;
static bool flag=false;
switch(message)
{
case WM_CREATE:btnWnd =CreateWindow("Button","按钮",WS_VISIBLE|WS_CHILD,
10,10,150,120,hwnd,(HMENU)BUTTON_ID,0,0);break; //倒数第3个为按钮子窗口ID
case WM_PAINT:break;
case WM_COMMAND: //按钮消息WM_COMMAND来处理
switch(LOWORD(wp)) //wParam的低字节为点击的按钮的ID
{ //下面随便写点什么啦!
case BUTTON_ID:
//SetWindowText(btnWnd,"再点我试试?");
if(flag==true)
{
SendMessage(btnWnd,WM_SETTEXT,0, LPARAM("干嘛点我?"));
}
else
{
SendMessage(btnWnd,WM_SETTEXT,0, LPARAM("再点试试?"));
//SetWindowText(btnWnd,(LPCSTR)"点点");
}
flag = !flag;
//MessageBox(hwnd,"你点我干什么?", "点我啦!",MB_OK);
break;
default:break;
}
break;
case WM_DESTROY:PostQuitMessage(0);return 0;
default:break;
}
return DefWindowProc(hwnd,message,wp,lp);
}

回答2:

用 MFC 写程序比较简单。
在 Doc-View 结构程序里,MESSAGE_MAP 部分 定义 响应表:
--------
BEGIN_MESSAGE_MAP(CXXXView, CScrollView)
// 写上 事件/消息 和 响应函数 表,例如:
ON_COMMAND(ID_COLOR_TEXT, OnColorText)
ON_COMMAND(ID_COLOR_BK, OnColorBk)
END_MESSAGE_MAP()
---------
ID_COLOR_TEXT 是你的资源里的 按钮 定义的消息
OnColorText 是 响应函数名。
---------
跑程序时,会自动检查窗口消息,并调响应函数处理。

回答3:

switch(message)
{
case WM_CREATE:CreateWindow("Button","按钮",WS_VISIBLE|WS_CHILD,10,10,100,120,hwnd,0,0,0);break;
case WM_PAINT:break;
case WM_DESTROY:PostQuitMessage(0);return 0;
default:break;
}
在这个switch里添加,按键消息也是数值,你可以查询一下就知道了。