Windows之窗口原理

简介: 这篇文章主要介绍了Windows窗口原理和如何使用Windows API创建和管理窗口。

Windows窗口原理

消息提示框
参数一: HWND(显示在哪一个窗口之上)
参数二: 所要提示的文本内容(注意使用UniCode编码 例: L"123")
参数三: 消息提示框标题
参数四: 消息提示框中按钮组件(MB_OK)  |   图标组件(MB_ICONEXCLAMATION)
MessageBox(NULL, L"First Window!", L"Window", MB_OK);
MessageBox有返回值
例如: IDYES = MessageBox(......);   //点击了是按钮

WINAPI : 实质是一个__stdcall(函数调用约定) 的宏
__cdecl   调用方清理栈
__stdcall  被调用方清理栈

MAKEINTRESOURCE(int);   //将宏转换为LPSTR类型
#define MAKEINTRESOURCEA(i) ((LPSTR)((ULONG_PTR)((WORD)(i))))
#include<Windows.h>
#include"resource.h"

LRESULT CALLBACK WindowProcfn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
    //设计窗口类
    WNDCLASS wc = { 0 };
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;  //水平重绘 竖直重绘 双击窗口
    wc.lpfnWndProc = WindowProcfn;                    //窗口处理函数
    wc.cbClsExtra = 0;                                //窗口类结构体额外申请字节
    wc.cbWndExtra = 0;                                //窗口实例额外申请字节
    wc.hInstance = hInstance;                         //当前应用程序实例句柄
    wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));   //窗口图标句柄
    wc.hCursor = LoadCursor(NULL,IDC_HAND);                   //窗口光标句柄
    wc.hbrBackground = CreateSolidBrush(RGB(255, 0, 255));   //窗口画刷(背景)句柄
    wc.lpszMenuName = NULL;                                  //窗口菜单
    wc.lpszClassName = L"byteDance";                         //窗口类型名;

    //注册窗口类
    ATOM at = RegisterClass(&wc);         //ATOM返回值为 unsigned short  返回0注册窗口失败
    if (at == 0)
    {
        MessageBox(NULL, L"注册窗口失败!", L"温馨提示", MB_YESNO);
    }
    else
    {
        MessageBox(NULL, L"注册窗口成功!", L"温馨提示", MB_YESNO);
    }
    //创建窗口
    HWND hWnd = CreateWindow(
        L"byteDance",                    //窗口类型名
        L"窗口一",                       //窗口标题
        WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_MAXIMIZE | WS_MINIMIZE, //窗口的风格
        100,100,                         //窗口左上角坐标
        400,400,                         //窗口宽高
        NULL,                            //父窗口句柄
        NULL,                            //菜单句柄
        hInstance,                       //当前应用程序实例句柄类型
        NULL                             //创建窗口添加的附加参数
        );
    //显示窗口
    ShowWindow(hWnd, SW_SHOW);           //显示的窗口  显示方式
    //更新窗口
    UpdateWindow(hWnd);
    //消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        //1.将虚拟键消息转换为字符消息
        TranslateMessage(&msg);
        //2.将消息分发给窗口处理函数
        DispatchMessage(&msg);
    }

    return 0;
}
//定义窗口处理函数
LRESULT CALLBACK WindowProcfn(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    //消息处理
    switch (uMsg)
    {
    case WM_CLOSE:  //窗口关闭消息
        DestroyWindow(hWnd);  //发送一个WM_DESTROY消息
        break;
    case WM_DESTROY:
        PostQuitMessage(0);   //发送一个WM_QUIT消息
        break;
    }

    return DefWindowProc(hWnd, uMsg, wParam, lParam);  //默认窗口处理函数
}
相关文章
|
6月前
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
存储 域名解析 网络协议
windows server安装域控及原理(小白向)
windows server安装域控及原理(小白向)
407 0
|
7天前
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
18 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
2月前
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
5月前
|
Windows
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
windows系统vbs脚本 恶搞关不掉的窗口 以及解决办法
124 2
|
6月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
513 1
|
5月前
|
C++ UED 开发者
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
76 0
|
11月前
|
Linux 编译器 C语言
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
98 0
C++ | 探究函数重载的原理:函数名修饰【基于Windows + Linux双系统】
|
6月前
|
Windows
(查看,和保存)windows下通过cmd命令符窗口查看、保存文件目录结构
(查看,和保存)windows下通过cmd命令符窗口查看、保存文件目录结构
202 0
|
网络协议 安全 网络安全
windows搭建ftp及原理(小白向)
windows搭建ftp及原理(小白向)
137 0