2020-12-02--15--win32窗口控件的创建和响应-

2020-12-05  本文已影响0人  heiqimingren

学习总结:
01,老师视频中的代码我复制了下来,有一个直观的认识,有一个直观的感受。
02,但是对于消息的传递,感觉还是有点晕忽忽的。

============================


image.png
image.png
image.png
image.png
image.png
image.png
image.png

运行结果图片:


image.png

源代码:

#include <tchar.h>
#include <windows.h>
#include <CommCtrl.h>

static TCHAR szWindowClass[] = _T("WindowCLass");
static TCHAR szTitle[] = _T("我在VC驿站的第一个窗口程序");


//第五步,窗口函数中处理窗口消息
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("VC驿站的各位网友们,大家好哦!");

    UINT IDC_BUTTON_1 = 200; //控件id,定义了一个
    UINT IDC_BUTTON_2 = 201; //控件id,定义了一个
    switch (message)
    {
        //这是我新增的东西,第二个时间创建控件
    case WM_CREATE:    //当主窗口创建完事之后,在执行这里,这里执行完毕之后,才往下走。21:53s视频中有效关系解释。
    {

                           HWND hButtonWnd1 = CreateWindow(WC_BUTTON, _T("我是按钮1"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 100, 100, 100, 100, hWnd, (HMENU)IDC_BUTTON_1, NULL, NULL);
                           HWND hButtonWnd2 = CreateWindow(WC_BUTTON, _T("我是按钮2"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 200, 200, 100, 100, hWnd, (HMENU)IDC_BUTTON_2, NULL, NULL);

    }
        break;
    case WM_COMMAND: //按钮消息
    {
                         UINT nCtrID = LOWORD(wParam);   //控件id知道了
                         UINT nCode = HIWORD(wParam); //BN_CLICKED

                         if (nCode == BN_CLICKED)
                         {
                             if (nCtrID == IDC_BUTTON_1)
                             {
                                 MessageBox(hWnd, _T("按钮1被点击了!"), _T("tip"), MB_OK);
                             }
                             else if (nCtrID == IDC_BUTTON_2)
                             {
                                 MessageBox(hWnd, _T("按钮2被点击了!"), _T("tip"), MB_OK);
                             }

                         }
    }


    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO:  在此添加任意绘图代码...
        TextOut(hdc, 5, 5, greeting, _tcslen(greeting));
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}







int WINAPI _tWinMain(_In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPTSTR    lpCmdLine,
    _In_ int       nCmdShow)
{
    //第一步,注册窗口类,指定窗口类的名称与窗口回调函数
    WNDCLASSEX wcex = { 0 };
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.lpfnWndProc = WndProc;
    wcex.lpszClassName = szWindowClass;

    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL, _T("注册窗口类失败"), _T("tip"), NULL);
        return 1;
    }

    //第二步,创建窗口,指定注册窗口类,窗口标题和窗口的大小
    HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 300, NULL, NULL, hInstance, NULL);

    //---------时机1,这里创建子窗口或者控件

    if (!hWnd)
    {
        MessageBox(NULL, _T("创建窗口失败"), _T("tip"), NULL);
        return 1;
    }




    //第三步,显示窗口
    ShowWindow(hWnd, nCmdShow);

    //第四步,开始消息循环
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return (int)msg.wParam;

}

上一篇 下一篇

猜你喜欢

热点阅读