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

来源:互联网 发布:云计算培训班 编辑:程序博客网 时间:2024/05/16 14:07

使用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);}
原创粉丝点击