SDK创建一个非模态,无资源窗口

8 篇文章 0 订阅
2 篇文章 0 订阅

使用SDK来创建一个非模态的窗口,不涉及资源,只用注册一个窗口类,创建窗口,显示窗口,然后建立一个消息循环就够了。

首先我们使用SDK创建窗口或者是控件都需要用到类,其他的控件都有系统注册好的类,直接拿来用就可以,窗口的类我们可以自己定义然后注册就可以用了。

第一步:注册一个窗口类

这里写图片描述

我们看到,窗口程序用的是WinMain而不是控制台程序的main,把代码贴出来看一下

//1.注册窗口类
WNDCLASS wcs = {};
wcs.lpszClassName = L"窗口类名";            //创建的窗口的类名
wcs.style = CS_HREDRAW | CS_VREDRAW;       //窗口的风格
wcs.lpfnWndProc = WindowProc;              //窗口的回调函数
wcs.hbrBackground = HBRUSH(COLOR_BACKGROUND + 1);    //窗口的背景颜色,每次刷新之后填充的颜色就是这个

RegisterClass(&wcs);                       //注册我们定义好的窗口类

第二步:创建窗口
这里写图片描述

//2.创建窗口
    HWND hWnd = CreateWindow(L"窗口类名",//要用哪个类来创建窗口
        L"My fiast Window",//创建的窗口的窗口名
        WS_OVERLAPPEDWINDOW,//窗口的风格,WS_OVERLAPPEDWINDOW风格是创建一个顶层窗口
        100,
        100,
        500,
        500,//这四个参数表示窗口的坐标和宽高
        NULL,//父窗口的句柄
        NULL,//菜单
        hInstance,//实例句柄
        NULL//WM_CREATE消息的附加消息
        );

第三步:显示窗口

这里写图片描述

第四步:创建消息循环机制
这里写图片描述

//4.创建消息循环机制
    MSG msg = {};

    while (GetMessage(&msg,//一个MSG结构体,包含许多消息信息
        NULL,//获取那个窗口的消息,如果写NULL则表示获取当前线程的所有消息
        NULL,//设置获取消息范围的最小值
        NULL//设置获取消息范围的最小值
        ))
    {
        DispatchMessage(&msg); //消息分发函数,把消息分发给对应的处理函数
    }

GetMessage()可以从消息队列中获取一个消息,DispatchMessage()就会把消息分发给对应的窗口回调

然后我们还需要一个窗口回调函数

这里写图片描述

在窗口回调函数中可以响应各种消息,然后做出消息处理,不能处理的消息全都通过DefWindowProc()函数再返还给系统去处理,窗口回调函数的原型可以通过MSDN去查找

LRESULT CALLBACK WindowProc(
    _In_  HWND hwnd,
    _In_  UINT uMsg,
    _In_  WPARAM wParam,
    _In_  LPARAM lParam
    )
{
    switch (uMsg)
    {
    case WM_CREATE:
    {
        MessageBox(hwnd, L"hahahah", L"创建了一个对话框", MB_OK);
    }
        break;
    case WM_CLOSE:
    {
        PostQuitMessage(WM_QUIT);
    }
        break;
    default:

        break;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值