标准控件_按钮学习笔记

在这里插入图片描述
在这里插入图片描述
所有按钮都是子窗口。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <windows.h>
#include <windowsx.h>   //使用Button_GetCheck这个宏必须包含这个头文件
#include <stdio.h>
#define null    NULL


//窗口过程
LRESULT CALLBACK MyWindowProc
(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch (Msg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_CREATE:
    {
        LPCREATESTRUCT pcs = (LPCREATESTRUCT)lParam;
        //普通按钮
        HWND hBtn = CreateWindow(L"button",L"普通按钮",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                    30,30,80,30,hWnd,(HMENU)1000,
                    pcs->hInstance,NULL);
        //单选按钮
        HWND hBtn2 = CreateWindow(L"button", L"单选按钮", WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON,
            30, 70, 80, 50, hWnd, (HMENU)1001,
            pcs->hInstance, NULL);
        //多选按钮
        HWND hBtn3 = CreateWindow(L"button", L"多选按钮", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
            30, 100, 80, 50, hWnd, (HMENU)1002,
            pcs->hInstance, NULL);
        return 0;
    }
    case WM_COMMAND:
    {
        WORD id = LOWORD(wParam);
        WORD  code = HIWORD(wParam);
        HWND hCtrl = (HWND)lParam;

        if ( id == 1000 && code == BN_CLICKED )
        {
            MessageBox(hWnd,L"普通按钮被单击了!",L"提示",MB_OK);
        }
        else if (id == 1001 && code == BN_CLICKED )
        {
            MessageBox(hWnd, L"单选按钮被单击了!", L"提示", MB_OK);
            if ( SendMessage(hCtrl,BM_GETCHECK,0,0) == BST_CHECKED )
            {
                MessageBox(hWnd, L"单选按钮被选中了!", L"提示", MB_OK);
            }
            else if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == BST_UNCHECKED)
            {
                MessageBox(hWnd, L"单选按钮没有被选中了!", L"提示", MB_OK);
            }
        }
        else if (id == 1002 && code == BN_CLICKED )
        {
            MessageBox(hWnd, L"多选按钮被单击了!", L"提示", MB_OK);
            //if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == BST_CHECKED)
            //{
            //    MessageBox(hWnd, L"多选按钮被选中了!", L"提示", MB_OK);
            //}
            //else if (SendMessage(hCtrl, BM_GETCHECK, 0, 0) == BST_UNCHECKED)
            //{
            //    MessageBox(hWnd, L"多选按钮没有被选中了!", L"提示", MB_OK);
            //}
            if ( Button_GetCheck(hCtrl) == BST_CHECKED )
                MessageBox(hWnd, L"多选按钮被选中了!", L"提示", MB_OK);
            else if (Button_GetCheck(hCtrl) == BST_UNCHECKED)
                MessageBox(hWnd, L"多选按钮没有被选中了!", L"提示", MB_OK);
        }

        break;
    }

    case WM_LBUTTONDOWN:
    {
        char str[64];
        sprintf(str, "鼠标左键按下:%d   %d\n", LOWORD(lParam), HIWORD(lParam));
        OutputDebugStringA(str);
        break;
    }
    case WM_LBUTTONUP:
    {
        char str[64];
        sprintf(str, "鼠标左键弹起:%d   %d\n", LOWORD(lParam), HIWORD(lParam));
        OutputDebugStringA(str);
        break;
    }
    case WM_MOUSEMOVE:
    {
        char str[64];
        sprintf(str, "鼠标移动:%d   %d\n", LOWORD(lParam), HIWORD(lParam));
        OutputDebugStringA(str);
        break;
    }
    case WM_LBUTTONDBLCLK:
    {
        char str[64];
        sprintf(str, "鼠标双击:%d   %d\n", LOWORD(lParam), HIWORD(lParam));
        OutputDebugStringA(str);
        break;
    }
        //键盘消息
    case WM_KEYDOWN:
    {
        char str[64];
        sprintf(str, "键盘按下:%x   %c\n", wParam, wParam);
        OutputDebugStringA(str);
        break;
    }
    case WM_CHAR:
    {
        char str[64];
        sprintf(str, "字符消息:%x   %c\n", wParam, wParam);
        OutputDebugStringA(str);
        break;
    }
    case WM_KEYUP:
    {
        char str[64];
        sprintf(str, "键盘弹起:%x   %c\n", wParam, wParam);
        OutputDebugStringA(str);
        break;
    }
    case WM_ERASEBKGND:
    {
        static int j = 0;
        char str1[64];
        sprintf(str1, "第%d次产生WM_ERASEBKGND!\n", j++);
        OutputDebugStringA(str1);            //在输出窗口打印信息
        return 1;
    }

    case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hWnd, &ps);
        static int i = 0;
        char str[64];
        sprintf(str, "第%d次产生WM_PAINT!\n", i++);
        OutputDebugStringA(str);            //在输出窗口打印信息

        EndPaint(hWnd, &ps);
        return 0;
        break;
    }

    }
    return DefWindowProc(hWnd, Msg, wParam, lParam);
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nShowCmd)
{
    //注册窗口类
    WNDCLASS wnd;
    wnd.cbClsExtra = 0;
    wnd.cbWndExtra = 0;
    wnd.hbrBackground = (HBRUSH)(GetStockObject(GRAY_BRUSH));//背景色
    wnd.hCursor = LoadCursor(NULL, IDC_ARROW);//光标
    wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标
    //wnd.lpfnWndProc = DefWindowProc;//窗口过程函数,用于处理消息
    wnd.lpfnWndProc = MyWindowProc;
    wnd.lpszClassName = L"MrVurtual";
    wnd.lpszMenuName = NULL;//菜单资源名称
    wnd.style = CS_HREDRAW | CS_DBLCLKS;//窗口类样式    如果不加CS_DBLCLKS,不会显示双击
    wnd.hInstance = hInstance;

    RegisterClass(&wnd);

    //创建窗口  WM_CREATE
    HWND hWnd = CreateWindow(L"MrVurtual", L"第一个窗口程序", WS_OVERLAPPEDWINDOW,
        100, 100, 300, 300, NULL, NULL, hInstance, NULL);
    //显示窗口
    ShowWindow(hWnd, nShowCmd);

    //更新窗口  WM_PAINT
    UpdateWindow(hWnd);

    //消息循环  收到WM_QUIT消息退出
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);//翻译消息
        DispatchMessage(&msg);//分发消息到窗口过程
    }

    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vurtual

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值