美文网首页
2020-12-02--15--win32窗口控件的创建和响应-

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

作者: heiqimingren | 来源:发表于2020-12-05 14:11 被阅读0次

    学习总结:
    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;
    
    }
    
    

    相关文章

      网友评论

          本文标题:2020-12-02--15--win32窗口控件的创建和响应-

          本文链接:https://www.haomeiwen.com/subject/bacpwktx.html