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);  //默认窗口处理函数
}
相关文章
|
26天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
3天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
358 14
|
19天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
6天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
23天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2591 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
5天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
181 2
|
3天前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
105 65
|
6天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
330 2
|
23天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1580 17
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码