Windows图形界面(GUI)-DLG-C/C++ - 图形界面程序结构

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​​​​链接点击跳转博客主页

目录

Windows图形界面程序结构

Windows 程序结构

窗口类和窗口过程函数

创建和显示窗口

消息循环和消息处理机制


Windows图形界面程序结构

Windows 程序结构

  • WinMain 函数
  • WinMain 函数是 Windows 应用程序的入口点。它的原型如下:
  • int WINAPI WinMain(HINSTANCE hInstance,      // 当前应用程序实例的句柄HINSTANCE hPrevInstance,  // 以前的应用程序实例的句柄 (总是为 NULL)LPSTR lpCmdLine,          // 命令行参数int nCmdShow              // 显示窗口的方式
    );
    
  • hInstance:当前应用程序实例的句柄。Windows 使用句柄来标识应用程序。
  • hPrevInstance:以前的应用程序实例的句柄。在 32 位 Windows 程序中,总是为 NULL。
  • lpCmdLine:传递给程序的命令行参数。
  • nCmdShow:指示窗口如何显示的标志。
窗口类和窗口过程函数

  • 窗口类定义了窗口的属性,例如背景颜色、窗口过程函数等。窗口过程函数处理窗口的消息。
  • 注册窗口类
  • WNDCLASSEX wc;
    ZeroMemory(&wc, sizeof(WNDCLASSEX));wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = "WindowClass";RegisterClassEx(&wc);
    
  • 窗口过程函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg){case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
创建和显示窗口

  • 创建窗口需要调用 CreateWindowEx 函数,并显示和更新窗口。
HWND hwnd = CreateWindowEx(0,"WindowClass","Window Title",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,500, 500,NULL,NULL,hInstance,NULL
);ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
消息循环和消息处理机制
  • 消息循环(Message Loop)
    • 消息循环用于捕获和分发消息。
    • MSG msg;
      while (GetMessage(&msg, NULL, 0, 0))
      {TranslateMessage(&msg);DispatchMessage(&msg);
      }
  • 消息处理机制(Message Handling)
    • ​​​​​​​​​​​​​​窗口过程函数处理窗口的各种消息,例如绘制、键盘输入、鼠标点击等。
    • LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
      {switch (uMsg){case WM_DESTROY:PostQuitMessage(0);return 0;default:return DefWindowProc(hwnd, uMsg, wParam, lParam);}
      }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新】C++读写优化超详细解析(cin优化+普通快读+fread)_输入输出优化_快读快写_算法竞赛

在算法竞赛中,读入速度和输出速度一直是卡常的重要手段。也有不少人经历过被题目卡 cin 的情况。今天我给大家介绍一下算法竞赛中常用的读写方法及其优化。 声明:大部分情况下,只用读入优化就行。对于输出量大的题目再考虑使用输出优化。 一…

Base64实现传输图片

1. Base64简介 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。通常用于在URL、Cookie和邮件等场景中,将二进制数据转换为字符串形式进行传输。 代码实现 public class ImageUtils {/*** 得到图片的Base64编码* param imagePath 图片路径* return …

手机删除的文件能恢复吗?删除不等于永别,3个技巧助你找回

安卓手机中的文件,就像是数字世界里的繁星,记录着我们的点点滴滴。然而,有时我们可能会不小心删除了某些重要的文件,让我们感到惋惜和困惑。删除的文件能恢复吗?别担心,删除并不等于永别,我们也…

Maven报错 NullPointerException as JavaCompiler.readSourceFile

1. 报错详情 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project xxx-web: Fatal error compiling: CompilerException: NullPointerException -> [Help 1] org.apache.maven.lifecycle.Lifecycl…

CentOS 停服后,服务器 OS 路在何方?

2024 年 6 月 30 日,CentOS Linux 7 终止其生命周期(EOL),至此 CentOS 全系列版本也已停止维护,属于 CentOS 的时代彻底终结。CentOS 停止维护后,用户将无法获得包括问题修复和功能更新在内的任何软件维护和…

小程序里面使用vant ui中的vant-field组件,如何使得输入框自动获取焦点

//.wxml <van-fieldmodel:value"{{ userName }}"placeholder"请输入学号"focus"{{focusUserName}}"/>// .js this.setData({focusUserName: true});vant-field

LLMs之RAG:GraphRAG(本质是名词Knowledge Graph/Microsoft微软发布)的简介、安装和使用方法、案例应用之详细攻略

LLMs之RAG&#xff1a;GraphRAG(本质是名词Knowledge Graph/Microsoft微软发布)的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;2024年7月3日&#xff0c;微软正式开源发布GraphRAG。GraphRAG可以提高大型语言模型在私有数据集上的推理能力。 背景痛点&#xff1…

MSVC2017+Qt 打包

在环境变量下配置好 QT 和 MSVC 的路径 相关搜索&#xff1a; 找不到msvcp140.dll 1.搜索 Qt 选择在编译器路径下打开 2. Windeployqt 生成打包&#xff0c;正常情况下生成 VC 相关package&#xff0c; 即 msvcp140.dll 等MSVC 相关 但是lz尝试没有生成 解决办法 先将生成…

数据库作业d8

要求&#xff1a; 一备份 1 mysqldump -u root -p booksDB > booksDB_all_tables.sql 2 mysqldump -u root -p booksDB books > booksDB_books_table.sql 3 mysqldump -u root -p --databases booksDB test > booksDB_and_test_databases.sql 4 mysql -u roo…

MySQL 中的几种锁

MySQL 中的锁 #按锁粒度如何划分? 按锁粒度划分的话&#xff0c;MySQL 的锁有&#xff1a; 表锁&#xff1a;开销小&#xff0c;加锁快&#xff1b;锁定力度大&#xff0c;发生锁冲突概率高&#xff0c;并发度最低;不会出现死锁。行锁&#xff1a;开销大&#xff0c;加锁慢…

电脑压缩软件哪个好?WinRAR、7-Zip、Bandizip 还是360压缩

文件压缩软件已成为我们日常工作中不可或缺的一部分&#xff0c;它不仅能够帮助我们节省存储空间&#xff0c;还能提高文件传输效率。本文简鹿办公小编将对四款主流的电脑压缩软件进行对比&#xff0c;它们分别是 WinRAR、7-Zip、Bandizip 和 360 压缩。 一、WinRAR WinRAR 是…

Qt中文个数奇数时出现问号解决

Qt中文个数奇数时出现问号解决 目录 Qt中文个数奇数时出现问号解决问题背景问题场景解决方案 问题背景 最近在开发一个小工具&#xff0c;涉及到一些中文注释自动打印&#xff0c;于是摸索如何把代码里面的中文输出到csv文件中&#xff0c;出现了乱码&#xff0c;按照网上的攻…

vue2-Django3-iframe解决方案,处理安全策略,事件拦截,处理iframe重载等

目录 简介 实现iframe 后端安全策略 通过Ngnix代理实现SAMEORIGIN iframe的事件拦截&#xff0c;自定义处理 iframe的状态保持&#xff08;解决vue中iframe重载&#xff09; 解决方法 简介 Iframe&#xff08;内联框架&#xff09;是一种HTML元素&#xff0c;用于在网页…

Nginx配置缺少导致CSS不起作用

引言 在Web开发中&#xff0c;确保样式表正确加载是前端显示正常工作的关键。然而&#xff0c;有时候即使CSS文件的路径和代码本身没有问题&#xff0c;CSS样式也可能无法正确应用。本文将分享一个常见的问题——Nginx配置缺少导致的CSS不起作用&#xff0c;以及如何解决这个问…

周鸿祎为什么建议Java、前端、大数据、PHP开发都要学一下大模型?_ai大模型全栈工程师跟java有关吗

ChatGPT的出现在全球掀起了AI大模型的浪潮&#xff0c;2023年可以被称为AI元年&#xff0c;AI大模型以一种野蛮的方式&#xff0c;闯入你我的生活之中。 从问答对话到辅助编程&#xff0c;从图画解析到自主创作&#xff0c;AI所展现出来的能力&#xff0c;超出了多数人的预料&…

智慧公厕系统实现人性化与节能化的完美结合

在当今社会&#xff0c;科技的飞速发展正不断改变着我们的生活方式&#xff0c;公厕也不例外。智慧公厕系统的出现&#xff0c;不仅提升了人们的使用体验&#xff0c;更实现了人性化与节能化的完美结合&#xff0c;为城市公共服务带来了全新的变革。 一、人性化&#xff0c;是智…

echarts 实现水利计算模型-雨量,流量,时间分割线

需求背景解决效果ISQQW代码地址index.vue 需求背景 实现水利计算模型-雨量&#xff0c;流量&#xff0c;时间分割线 解决效果 ISQQW代码地址 链接 index.vue <!--/** * author: liuk * date: 2024/06/13 * describe: 洪水预报结果图表 */--> <template><di…

算法篇 滑动窗口 leetcode 长度最小的子数组

长度最小的子数组 1. 题目描述2. 算法图分析2.1 暴力图解2.2 滑动窗口图解 3. 代码演示 1. 题目描述 2. 算法图分析 2.1 暴力图解 2.2 滑动窗口图解 3. 代码演示

Flask `preprocess_request` 方法教程

Flask preprocess_request 方法教程 在 Flask 应用中&#xff0c;preprocess_request 方法在请求被分派到相应的视图函数之前被调用。它允许您在请求处理的早期阶段执行一些自定义逻辑。本文将详细讲解 preprocess_request 方法的工作原理及其使用方法。 方法概述 preproces…

数据结构进阶——使用数组实现栈和队列详解与示例(C,C#,C++)

文章目录 1、数组实现栈栈的基本操作C语言实现C#语言实现 2、 数组实现队列队列的基本操作C语言实现C# 语言实现C语言实现 总结 在编程世界中&#xff0c;数据结构是构建高效算法的基石。栈和队列作为两种基本的数据结构&#xff0c;它们的应用非常广泛。本文将带领大家使用C&a…