版权声明:本文为博主原创文章,转载请注明出处,谢谢 https://blog.csdn.net/rabbitbride/article/details/82428589
这是一个win32的学习文档,边理解边记录。
#include <Windows.h>//包含头文件,定义入口函数WinMain
// 必须要进行前导声明 消息处理函数(回调函数)
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
// 程序入口点
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
{
// 类名
WCHAR* cls_Name = L"My Class";
// 设计窗口类 创建窗口类别(注意里面的WndProc是我们后面定义的回调函数),并注册窗口类别
WNDCLASS wc = { };
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
wc.lpfnWndProc = WindowProc;
wc.lpszClassName = cls_Name;
wc.hInstance = hInstance;
// 注册窗口类
RegisterClass(&wc);
// 创建窗口 创建窗体,并显示与更新窗体
HWND hwnd = CreateWindow(
cls_Name, //类名,要和刚才注册的一致
L"我的应用程序", //窗口标题文字
WS_OVERLAPPEDWINDOW, //窗口外观样式
38, //窗口相对于父级的X坐标
20, //窗口相对于父级的Y坐标
480, //窗口的宽度
250, //窗口的高度
NULL, //没有父窗口,为NULL
NULL, //没有菜单,为NULL
hInstance, //当前应用程序的实例句柄
NULL); //没有附加数据,为NULL
if(hwnd == NULL) //检查窗口是否创建成功
return 0;
// 显示窗口
ShowWindow(hwnd, SW_SHOW);
// 更新窗口
UpdateWindow(hwnd);
// 消息循环
MSG msg; 启动事件循环
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 在WinMain后实现
LRESULT CALLBACK WindowProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
switch(uMsg)
{
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
win32创建窗口的过程:
- 程序入口WinMain
- 注册窗口类别
- 建立窗口,在屏幕上显示
- 进入事件循环,不断从事件队列中取出消息来处理
以上我们所讨论的都是必要的东西:注册窗口类别,建立窗口,在屏幕上显示窗口,进入事件循环,不断从事件队列中取出消息来处理。
实际的动作发生在消息处理函数中。该函数确定了在视窗的显示区域中显示些什么以及怎样响应用户的输入等。
Win32与Win32Console互转:
win32Console->Win32:
‘#pragma comment(linker, “/entry:WinMainCRTStartup /subsystem:windows”)
加上这句就是win32应用程序了 ,你的主函数必须是 int WINAPI WinMain()
当然如果用main函数的话 可以写这样写
‘#pragma comment(linker, “/entry:mainCRTStartup /subsystem:windows”)
Win32->win32Console:
editbin /subsystem:console (ProjectName).exe
生成事件–后期生成事件,
Win32项目就有了窗口。
参考文献:
http://blog.sina.com.cn/s/blog_6163bdeb0100oidg.html
http://blog.csdn.net/column/details/win32-dev.html?&page=2
https://blog.csdn.net/lichen18848950451/article/details/68062479