win32相关记录

这是一个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创建窗口的过程:
  1. 程序入口WinMain
  2. 注册窗口类别
  3. 建立窗口,在屏幕上显示
  4. 进入事件循环,不断从事件队列中取出消息来处理

以上我们所讨论的都是必要的东西:注册窗口类别,建立窗口,在屏幕上显示窗口,进入事件循环,不断从事件队列中取出消息来处理。
实际的动作发生在消息处理函数中。该函数确定了在视窗的显示区域中显示些什么以及怎样响应用户的输入等。

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 (OutDir) ( O u t D i r ) (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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值