C++创建窗口程序

实现一个基本的 Windows 应用程序,使用 C++ 和 WinAPI(Windows API)编写。运行这段代码时,它将显示一个标题为“Hello World”的窗口,并且可以通过关闭窗口来结束程序。

#include <windows.h> // 包含Windows头文件
 
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // 定义消息处理函数
 
int main() {
    HINSTANCE hInstance = GetModuleHandle(NULL); // 获取当前模块的实例句柄
    WNDCLASS wnd = {}; // 初始化窗口类结构体
    wnd.lpfnWndProc = WindowProc; // 设置消息处理函数指针
    wnd.hInstance = hInstance; // 设置实例句柄
    wnd.lpszClassName = TEXT("blackcat"); // 设置窗口类名称
    RegisterClass(&wnd); // 注册窗口类
    HWND hwnd = CreateWindowA(
        TEXT("blackcat"), 
        TEXT("Hello World"), 
        WS_OVERLAPPEDWINDOW,  
        100, 100, 600, 600, NULL, NULL, hInstance, NULL); // 创建窗口

    ShowWindow(hwnd, SW_SHOWNORMAL); // 显示窗口
    
    MSG msg = {}; // 定义消息变量
    
    while (GetMessage(&msg, NULL, 0, 0)) { // 进入消息循环
        TranslateMessage(&msg); // 转换消息
        
        DispatchMessage(&msg); // 分发消息
    }
    
    return static_cast<int>(msg.wParam); // 返回程序退出值
}
 
// 消息处理函数
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        case WM_DESTROY:
            PostQuitMessage(0); // 接收到WM_DESTROY消息时关闭应用程序
            
            break;
        
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam); // 默认情况下交由系统处理
    }
    
    return 0;
}

下面是这段代码的详细解释:

  1. #include <windows.h>:引入 Windows 头文件,它包含了创建和管理 Windows 应用程序所需的函数和宏。
  2. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);:定义一个消息处理函数 WindowProc。这个函数用于处理发送给窗口的各种消息。
  3. int main():主函数,程序的入口点。
  4. HINSTANCE hInstance = GetModuleHandle(NULL);:获取当前模块(通常是可执行文件)的实例句柄。
  5. WNDCLASS wnd = {};:初始化一个 WNDCLASS 结构体。这个结构体用于定义窗口类。
  6. wnd.lpfnWndProc = WindowProc;:设置消息处理函数为前面定义的 WindowProc
  7. wnd.hInstance = hInstance;:设置窗口类的实例句柄。
  8. wnd.lpszClassName = TEXT("blackcat");:设置窗口类的名称。
  9. RegisterClass(&wnd);:注册窗口类。
  10. HWND hwnd = CreateWindowA(...);:使用前面注册的窗口类创建一个窗口。
  11. ShowWindow(hwnd, SW_SHOWNORMAL);:显示窗口。
  12. MSG msg = {};:定义一个 MSG 结构体变量,用于接收从消息队列中取出的消息。
  13. while (GetMessage(&msg, NULL, 0, 0)):进入消息循环,直到接收到退出消息为止。
  14. TranslateMessage(&msg); 和 DispatchMessage(&msg);:这两行代码负责转换和分发消息。简单来说,它们将消息传递给适当的窗口过程函数进行处理。
  15. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam):这是消息处理函数。它检查收到的消息,如果消息是 WM_DESTROY,则退出应用程序。否则,将消息传递给默认的处理函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python3】【力扣题】389. 找不同

【力扣题】题目描述&#xff1a; 【Python3】代码&#xff1a; 1、解题思路&#xff1a;使用计数器分别统计字符串中的元素和出现次数&#xff0c;两个计数器相减&#xff0c;结果就是新添加的元素。 知识点&#xff1a;collections.Counter(...)&#xff1a;字典子类&#x…

ONLYOFFICE:开源、免费、安全,打造定制化办公平台的最佳选择

文章目录 写在前面ONLYOFFICE是什么&#xff1f;ONLYOFFICE的惊艳之处齐全的插件&#xff0c;助你锦上添花部署一款自己的安全可靠的办公平台写在最后 写在前面 说起 Office 办公软件&#xff0c;我想大家最常用的应该就是微软的 Microsoft Office 以及国产的 WPS Office。两款…

C语言:进制转换以及原码、反码、补码

一、二进制 其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法&#xff0c;那是什么意思呢&#xff1f;其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已。 比如&#xff1a; 数值15的各种进制的表⽰形式&#xff1a; 15的2进制&#xff1a;1111 15的8进…

HBuilder X中uView UI框架的安装及使用

开发工具: HBuilder X 在最上方的工具中点击 插件安装 ——> 安装新插件 ——> 前往插件市场安装 在作者排行榜中找到 uView UI 选择该版本 然后点击下载并导入HBuilder X 然后选择你想导入的项目 在项目根目录中的main.js中&#xff0c;引入并使用uView的JS库&#xff…

Java基础面试题(五)

Java基础面试题&#xff08;五&#xff09; 文章目录 Java基础面试题&#xff08;五&#xff09;标识符和关键字的区别是什么&#xff1f;Java 语言关键字有哪些&#xff1f;自增自减运算符移位运算符continue、break 和 return 的区别是什么&#xff1f; 单行注释&#xff1a;…

【软件设计】基于SSM的334考研图书电子商务平台

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

msvcr120.dll找不到要怎么处理?电脑文件msvcr120.dll修复攻略

在使用基于Windows操作系统的计算机的日常过程中&#xff0c;用户可能会遇到多种程序错误&#xff0c;其中之一就是“找不到msvcr120.dll”或者“msvcr120.dll丢失”的系统提示。这个问题往往在启动某些程序时发生&#xff0c;很让人无可奈何。为了解决这个问题&#xff0c;重要…

【Linux系统编程】环境变量的组织方式

environ和getenv函数 在Linux中&#xff0c;environ是一个全局的外部变量&#xff0c;其类型为char**&#xff0c;存储着系统的环境变量。除了使用主函数中的第三个参数外&#xff0c;我们也可使用environ函数直接访问系统的环境变量。 注意&#xff1a;这里在代码内部使用envi…

Spring Boot多环境配置

Spring Boot的针对不同的环境创建不同的配置文件&#xff0c; 语法结构&#xff1a;application-{profile}.properties profile:代表的就是一套环境 1.需求 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-pro…

如何给新华网投稿发稿?新华网的媒体发稿方法步骤

现如今&#xff0c;互联网已经成为了人们获取信息的主要途径&#xff0c;各大媒体网站也成为了发布自己作品的首选平台。其中&#xff0c;新华网作为中国最具影响力的新闻媒体之一&#xff0c;其内容覆盖面广、触及人群众多&#xff0c;因此&#xff0c;能够在新华网上发表文章…

Tuxera NTFS2024下载使用详细操作教程

你是否还在为Mac不能正常读写NTFS格式分区而感到苦恼呢&#xff1f;想要适合Mac系统使用来回转换磁盘格式又十分麻烦&#xff0c;这该怎么办呢&#xff0c;有了这款软件Tuxera ntfs就能马上帮你解决目前遇到的问题。 Tuxera NTFS2024最新免费版下载如下&#xff1a; https://…

htb monitored root方式其中的一种(仅作记录)

快下班时候审出来的&#xff0c;目前root的第5种方式 nagiosmonitored:~$ cat /usr/local/nagiosxi/scripts/backup_xi.sh #!/bin/bash # # Creates a Full Backup of Nagios XI # Copyright (c) 2011-2020 Nagios Enterprises, LLC. All rights reserved. #BASEDIR$(dirname …

CentOS使用docker本地部署StackEdit Markdown编辑器并实现公网访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

Linux:软硬链接的概念与应用

文章目录 软链接和硬链接软链接的应用场景硬链接的应用场景当前目录和上级目录总结 本篇要探讨的主题是关于软硬链接的概念 在Linux系统链接文件中有两种&#xff0c;一种是硬链接&#xff0c;一种是软链接&#xff0c;那么本篇就基于上述的两种链接方式来进行一定的总结和拓展…

IOS-UIAlertController简单使用-Swift

UIAlertControlle时IOS的对话框控制器&#xff08;警报控制器&#xff09;&#xff0c;简单使用方法如下&#xff1a; 步骤都一样&#xff0c;先是创建UIAlertController&#xff0c;然后创建UIAlertAction&#xff0c;再将UIAlertAction添加到UIAlertController中&#xff0c;…

Keil 的安装

Keil的安装&#xff0c;分3个主要步骤&#xff1a; ① 安装Keil软件 ② 注册 ③ 安装芯片支持包 一、安装 Keil 重点 1&#xff1a; 安装时&#xff0c;不能使用中文路径&#xff0c;否则无法正常使用!! 重点 2&#xff1a; 不要安装 V5.36 及以上的版本&#xff0c…

Qt SDL2播放Wav音频

这里介绍两种方法来实现Qt播放Wav音频数据。 方法一&#xff1a;使用QAudioOutput pro文件中加入multimedia模块。 #include <QApplication> #include <QFile> #include <QAudioFormat> #include <QAudioOutput>int main(int argc, char *argv[]) {…

游卡:OceanBase在游戏核心业务的规模化降本实践

从 2023 年 9 月测试 OceanBase&#xff0c;到如今 3 个核心业务应用 OceanBase&#xff0c;国内最早卡牌游戏研发者之一的游卡仅用了两个月。是什么原因让游卡放弃游戏行业通用的 MySQL方案&#xff0c;选择升级至 OceanBase&#xff1f;杭州游卡网络技术有限公司&#xff08;…

精品IDEA插件推荐:Apipost-Helper

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…

Linux的权限(2)

目录 Linux的&#xff08;事物属性&#xff09;文件权限 文件权限值得表示方法 字符表示方法 8进制表示方法 文件访问权限得相关设置方法 chmod修改权限法1 chmod修改权限法2 文件的角色&#xff08;拥有者/所属者&#xff09;修改 chown拥有者 chgrp所属者 &…