栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

MFC之win32底层窗口实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MFC之win32底层窗口实现

一、系哔哩哔哩学习笔记,测试成功

#include // 底层窗口的头文件

// 6、处理窗口过程
WNDPROC Wndproc;

LRESULT
CALLBACK // 宏 __stdcall __stdcall 参数的传递顺序:从右往左,依次入栈,并且在函数返回前 清空堆栈
WindowProc(
    HWND hwnd, // 消息所属的窗口句柄
    UINT uMsg, // 具体消息名称 WM_XXXX消息名
    WPARAM wParam, // 键盘 附加消息
    LPARAM lParam // 鼠标附加消息
)
{
    switch (uMsg) {
    case WM_CLOSE:
        // 所有xxxx_WINDOW为结尾的方法,都不会进入到消息队列中而是直接执行
        DestroyWindow( // 发送另一个消息 WM_DESTROY
            hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_LBUTTONDOWN:// 鼠标左键按下
    {
        int xPos = LOWORd(lParam)
            , yPos = HIWORd(lParam);

        TCHAR buf[1024];
        wsprintf( // win32 的拼接函数,和linux,sprintf类似 
            buf, TEXT("x = %d, y = %d"), xPos, yPos);

        MessageBox(
            hwnd
            , buf // 提示内容
            , TEXT("鼠标按下") // 标题名 
            , MB_OK);// 按钮ok
    }
    break;
    case WM_KEYDOWN:// 键盘
    {
        MessageBox(
            hwnd
            , TEXT("键盘按下")
            , TEXT("键盘按下")
            , MB_OK);
    }
    break;
            case WM_PAINT: // 绘图

                PAINTSTRUCT ps; // 绘图结构体
                HDC hdc = BeginPaint(hwnd, &ps);
                TextOut(hdc
                    , 100 // 坐标
                    , 100
                    , TEXT("HELLO")
                    , strlen("HELLO"));
                EndPaint(hwnd, &ps);
                break;
}


// 返回值默认处理
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

// 程序入口函数
// WINAPI 代表__stdcall 参数的传递顺序:从右往左,依次入栈,并且在函数返回前 清空堆栈
int WINAPI WinMain(
    HINSTANCE hInstance // 应用程序实列句柄
    , HINSTANCE hPrevInstance // 上一个应用程序句柄,在win32环境下,参数一般为NULL,不起作用了
    , LPSTR lpCmdLine // char *argv[]
    , int nShowCmd) {// 显示命令,最大化,最小化 正常

                     // 1、设计窗口 2、注册窗口 3、创建窗口 4、显示和更新 5、通过循环取消息 6、处理消息 (窗口过程)

                     // 1、设计窗口
    WNDCLASS wc;
    wc.cbClsExtra = 0;// 类的额外的内存
    wc.cbWndExtra = 0;// 窗口额外的内存
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);// 设置背景
        wc.hCursor = LoadCursor(// 设置光标
            NULL// NULL:代表使用系统光标
            , IDC_HAND);
    wc.hIcon = LoadIcon(// 设置图标
        NULL// NULL:代表使用系统图标
        , IDI_ERROR);
    wc.hInstance = hInstance;// 应用程序实例句柄 传入WinMain 中的形参即可
    wc.lpfnWndProc = WindowProc;// 回调函数  窗口过程
    wc.lpszClassName = TEXT("WIN");// 指定窗口类名称
    wc.lpszMenuName = NULL;// 菜单名称
    wc.style = // 显示风格
        0; // 0:代表默认

           // 2、注册窗口
    RegisterClass(&wc);

    // 3、创建窗口
    
    HWND hwnd = CreateWindow(
        wc.lpszClassName
        , TEXT("WINDOWS")
        , WS_OVERLAPPEDWINDOW
        , CW_USEDEFAULT
        , CW_USEDEFAULT
        , CW_USEDEFAULT
        , CW_USEDEFAULT  
        , NULL
        , NULL
        ,hInstance
        , NULL);

        // 4、显示和更新
        ShowWindow(
            hwnd
            , SW_SHOWNORMAL);
        UpdateWindow(hwnd);

        // 5、通过循环消息
        
        MSG msg;
        while (1) {
            
            if (FALSE == GetMessage(&msg, NULL, 0, 0))
            {
                break;
            }

            //翻译消息
            TranslateMessage(&msg);

            // 分发消息
            DispatchMessage(&msg);
        }

        return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935583.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号