vs2022窗口创建、简单按钮

/* 头文件 */
#include <windows.h>

/* 全局变量 */
WCHAR g_lpszClassName[] = L"CLASSNAME";
WCHAR g_lpszWindowName[] = L"哈喽,新的征程";
HINSTANCE g_hInstance;        // 窗口实例句柄  全局存储变量
// 标识符
#define HDC_EDIT 101        // 编辑框
#define HDC_BOTTON1 102        // 按钮一
#define HDC_BOTTON2 103        // 按钮二
/* 函数声明 */
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

/* 应用程序主函数 */
INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, INT nCmdShow)
{
    g_hInstance = hInstance;
    /* 1.设计一个窗口类 */
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);                        // 结构体的大小
    wcex.style = CS_HREDRAW | CS_VREDRAW;                    // 指定大小改变就水平|垂直重画
    wcex.cbClsExtra = 0;                                     // 类的额外内存
    wcex.cbWndExtra = 0;                                     // 窗口的额外内存
    wcex.hInstance = hInstance;                              // 实例句柄
    wcex.lpfnWndProc = WndProc;                              // 窗口回调函数指针
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);            // 使用预定义图标(大图标)
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);              // 使用预定义光标
    wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);// 使用系统颜色
    wcex.lpszMenuName = NULL;                                // 的指定菜单
    wcex.lpszClassName = g_lpszClassName;                    // 窗口类的名称
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);          // 类的小图标

    /* 2.注册这个窗口类 */
    if (RegisterClassEx(&wcex) == ((ATOM)0))
    {
        MessageBox(NULL, L"注册窗口类失败!", L"错误", MB_YESNO | MB_ICONERROR);
        exit(-1);
    }

    /* 3.创建窗口 */
    HWND hWnd = CreateWindowExW(NULL, g_lpszClassName, g_lpszWindowName, \
        WS_OVERLAPPEDWINDOW, 0, 0, 600, 600, NULL, NULL, hInstance, NULL);
    if (hWnd == NULL)
    {
        MessageBox(NULL, L"创建窗口失败!", L"错误", MB_YESNO | MB_ICONERROR);
        exit(-1);
    }
    // HWND hwndButton = CreateWindowEx(
    //     0, 
    //     L"BUTTON",                                             // Predefined class; Unicode assumed
    //     L"1",                                                 // Button text
    //     WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, // Styles
    //     10,                                                    // x position
    //     10,                                                    // y position
    //     100,                                                   // Button width
    //     100,                                                   // Button height
    //     hWnd,                                                  // Parent window
    //     NULL,                                                  // No menu.
    //     (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
    //     NULL); // Pointer not needed.
    // CreateWindowEx(0, L"BUTTON", L"天天", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
    //     20, 20, 30, 30, hwndButton, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
    // hwndButton = CreateWindowEx(0, L"BUTTON", L"2", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
    //     110, 10, 100, 100, hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
    // CreateWindowEx(0, L"BUTTON", L"弟弟", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
    //     20, 20, 30, 30, hwndButton, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
    /* 4.更新显示窗口 */
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    /* 5.应用程序消息循环 */
    MSG msg = { 0 };
    BOOL bRet;
    /* GetMessage 发生错误会返回-1 */
    while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
    {
        if (bRet != -1)
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return msg.wParam;
}

// /* 应用程序消息处理回调函数 */
// 窗口回调函数           1.窗口句柄  2.消息     3、4.随着不同的消息而改变用法
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)    // 分支不同的消息处理
    {
        case WM_DESTROY:        // 当我们点击×后,结束这个进程
            PostQuitMessage(0);
            break;  
        case WM_COMMAND:        // 鼠标点击一个按钮
                switch(LOWORD(wParam))    // 标识符保存在wParam 的低位中  前16位
                {
                    case HDC_BOTTON1:    // 第一个按钮
                        SetDlgItemText(hWnd, HDC_EDIT, TEXT("浪子花梦"));    // 设置编程框中的内容
                        break;
                    case HDC_BOTTON2:
                        TCHAR TsTr[128];        
                        GetDlgItemText(hWnd, HDC_EDIT, TsTr, 128);    // 获取编程框中的内容
                        MessageBox(hWnd, TsTr, TsTr, MB_OK);    // 使用消息盒子弹出内容
                        break;
                }
            break;
        case WM_CREATE:        // 窗口刚创建发出来的消息    我们来创建子窗口(控件)
            // 各种参数可以查阅资料
            // 编辑框控件 一些功能设置  风格  大小  
            CreateWindow(L"EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE,
                0, 500, 600, 100, hWnd, (HMENU)HDC_EDIT, g_hInstance, NULL);
            // 第一个按钮
            CreateWindow(L"BUTTON", TEXT("设置"), WS_CHILD | WS_VISIBLE,
                0, 0, 90, 40, hWnd, (HMENU)HDC_BOTTON1, g_hInstance, NULL);
            // 第二个按钮
            CreateWindow(L"BUTTON", TEXT("获取"), WS_CHILD | WS_VISIBLE,
                0, 40, 90, 40, hWnd, (HMENU)HDC_BOTTON2, g_hInstance, NULL);
        default:   
            break;
    }  

    return DefWindowProc(hWnd, uMsg, wParam, lParam);        // 默认返回
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值