win32 控件按钮创建

本文介绍了如何在Win32应用程序中创建按钮控件,并响应WM_CREATE和WM_COMMAND消息。通过定义全局变量和宏来标识按钮ID,详细讲解了控件的创建过程和消息处理,旨在帮助读者理解Windows系统的消息机制。

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;

        }

改编自源于网络笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值