Windows SDK编程 初学笔记

news2024/9/25 7:20:29
#include "windows.h"

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {
	MessageBox(NULL, TEXT("来见见世面"), TEXT("Say Hi"), MB_OK);
	return 0;
}

MessageBox第一个参数为句柄,第二个参数为内容,第三个参数为标题

第四个为现实的按钮,MB_OK代表只显示确定按钮。 

MB_OKCANCEL则代表多一个取消按钮

MB_ABORTRETRYIGNORE代表有以上三个按钮

剩下的也是根据英文意思来进行一个按钮的显示

加上异或可以进行图标的不同显示

#define MB_ICONHAND                 0x00000010L
#define MB_ICONQUESTION             0x00000020L
#define MB_ICONEXCLAMATION          0x00000030L
#define MB_ICONASTERISK             0x00000040L

#if(WINVER >= 0x0400)
#define MB_USERICON                 0x00000080L
#define MB_ICONWARNING              MB_ICONEXCLAMATION
#define MB_ICONERROR                MB_ICONHAND
#endif /* WINVER >= 0x0400 */

#define MB_ICONINFORMATION          MB_ICONASTERISK
#define MB_ICONSTOP                 MB_ICONHAND

MB_DEFBUTTON2代表运行后默认选择在第二项,也就是重试按钮,可以看前面的都是默认选择在第一项,当然MB_DEFBUTTON3的话就会默认选择在第三项,也就是忽略按钮

MessageBox同样也存在返回值

#define IDOK                1
#define IDCANCEL            2
#define IDABORT             3
#define IDRETRY             4
#define IDIGNORE            5
#define IDYES               6
#define IDNO                7
#if(WINVER >= 0x0400)
#define IDCLOSE         8
#define IDHELP          9
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0500)
#define IDTRYAGAIN      10
#define IDCONTINUE      11
#endif /* WINVER >= 0x0500 */
#if(WINVER >= 0x0501)
#ifndef IDTIMEOUT
#define IDTIMEOUT 32000

#define TEXT(quote) __TEXT(quote)   // r_winnt
#define __TEXT(quote) L##quote      // r_winnt

往TEXT宏内部看,发现可以用L来代替TEXT() 

UE4中同样也是:

FString a = L"111";
GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Yellow, a);

 

MessageBox(NULL, TEXT("123"), TEXT("312"), MB_OK);

但是UE4如何需要使用Windows编程的话必须添加以下头文件:

#include "Windows/AllowWindowsPlatformTypes.h"
#include "Windows/PreWindowsApi.h"
#include <windows.h>
#include "Windows/PostWindowsApi.h"
#include "Windows/HideWindowsPlatformTypes.h"

 

 

 

ASCILL码存在中文乱码问题,Unicode解决了这一问题


 

窗口编程和控制台编程有所不一样,要把进行一些设置,右键点击,选择属性

将子系统选择为窗口,方能编译成功 


#include "windows.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;

	switch (message) {
	case WM_PAINT://如果消息是绘制
		hdc = BeginPaint(hwnd, &ps);//dc全称为device context = 设备上下文 设备描述表中记录和此设备相关的各种信息,比如对于显示器来说,记录了显示器的尺寸、分辨率,还有当前选择的画笔、画刷、字体等GDI对象的信息。
		GetClientRect(hwnd, &rect);
		DrawText(hdc, TEXT("学习日记!!!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
		EndPaint(hwnd, &ps);
		return 0;

	case WM_LBUTTONDOWN:
		MessageBox(NULL, L"Clicked Window!", L"Hint", MB_OK);
		return 0;

	case WM_DESTROY://如果消息是结束绘制
		PostQuitMessage(0);
		return 0;
	}

	return DefWindowProc(hwnd, message, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {
	
	static TCHAR szAppName[] = TEXT("MyWindows");//定义窗口类的名字
	HWND hwnd;//定义窗口句柄
	MSG msg;//定义消息
	WNDCLASS wndclass;//定义窗口类结构

	wndclass.style = CS_HREDRAW | CS_VREDRAW;//让窗口每帧刷新高度和宽度
	wndclass.lpfnWndProc = WndProc;//指定回调函数
	wndclass.cbClsExtra = 0;//多余空间
	wndclass.cbWndExtra = 0;//多余空间
	wndclass.hInstance = hinstance;//赋值实例句柄
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//设置图标
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);//设置光标为箭头
	wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景颜色
	wndclass.lpszMenuName = NULL;//设置菜单
	wndclass.lpszClassName = szAppName;//设置窗口名字

	if (!RegisterClass(&wndclass)) {//注册窗口
		MessageBox(NULL, TEXT("注册失败"), L"FAILED", MB_ABORTRETRYIGNORE | MB_ICONQUESTION | MB_DEFBUTTON2);
		return 0;
	}

	hwnd = CreateWindow(//调用WndProc函数
		szAppName, 
		TEXT("学习日记"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		NULL,
		NULL,
		hinstance,
		NULL
	);

	ShowWindow(hwnd, iCmdShow); //调用WndProc函数
	UpdateWindow(hwnd);//调用WndProc函数

	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);//调用WndProc函数
	}

	return	msg.wParam;
}

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

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

相关文章

Socket通信

什么是Socket?

Java基础——运算符与表达式

目录 Eclipse下载 安装 使用 运算符 键盘录入 Eclipse下载 安装 使用 Eclipse的概述(磨刀不误砍柴工)——是一个IDE(集成开发环境)Eclipse的特点描述&#xff08;1&#xff09;免费 &#xff08;2&#xff09;纯Java语言编写 &#xff08;3&#xff09;免安装 &#xff08…

【手把手教你学51单片机】

注&#xff1a;本文章转载自《手把手教你学习51单片机》&#xff01;因转载需要原文链接&#xff0c;故无法选择转载&#xff01; 如若侵权&#xff0c;请联系我进行删除&#xff01;上传至网络博客目的为了记录自己学习的过程的同时&#xff0c;同时能够帮助其他一同学习的小伙…

AJAX Axios 总结

AJAX & Axios1. AJAX1.1 作用①与服务器进行数据交换②异步交互异步和同步1.2 基本使用1.3 案例SelectUserServlet&#xff1a;register.html&#xff1a;register.html中的<script2. Axios异步框架2.1 基本使用2.2 案例axiosServlet&#xff1a;axios-demo.html&#x…

Elasticsearch7.8.0版本高级查询—— 聚合查询文档

目录一、初始化文档数据二、聚合查询文档2.1、概述2.2、对某个字段取最大值 max 示例2.3、对某个字段取最小值 min 示例2.4、对某个字段求和sum 示例2.5、对某个字段取平均值 avg 示例2.6、对某个字段的值进行去重之后再取总数 示例三、State 聚合查询文档3.1、概述3.2、示例一…

目标检测论文解读复现【NO.24】改进 YOLOv5s 的轨道障碍物检测模型轻量化研究

前言此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c;…

Cadence PCB仿真使用Allegro PCB SI生成反射仿真报告及报告导读图文教程

🏡《Cadence 开发合集目录》   🏡《Cadence PCB 仿真宝典目录》 目录 1,概述2,生成报告3,报告导读4,总结1,概述 本文简单介绍使用Allegro PCB SI生成网络的反射性能评估的报告的方法,及反射报告要点导读。 2,生成报告 第1步,选择需要生成报告的网络,然后单击右…

(侯捷C++)1.2面向对象高级编程(上)

1.整体结构 2.三大函数&#xff1a;拷贝构造&#xff0c;拷贝赋值&#xff0c;析构 拷贝构造&#xff1a;第一次出现对象&#xff0c;使用拷贝构造进行创建&#xff0c;例如&#xff1a;String s3(s1)。拷贝赋值&#xff1a;对象已经构造&#xff0c;重新赋值&#xff0c;例如…

人工智能辅助药物发现(4)药物重定位

目录药物重定位概述药物重定位数据库表示学习基于序列的表示学习基于图的表示学习药物重定位深度学习以靶点为中心以疾病为中心药物重定位的应用药物重定位概述 新药物的研发投资巨大&#xff0c;周期漫长。从获批准的临床药物中有效识别新的适应药物在药物发现中起到重要作用…

cc123 靶场测试笔记

1.cc123 靶场介绍本靶场存在四个 flag 把下载到的虚拟机环境导入到虚拟机&#xff0c;本靶场需要把网络环境配置好。1.1.网络示意图2. 信息收集2.1.主机发现sudo netdiscover -i eth0 -r 192.168.0.0/242.2.masscan 端口扫描sudo masscan -p 1-65535 192.168.1.102 --rate10002…

Elasticsearch7.8.0版本高级查询—— 高亮查询文档

目录一、初始化文档数据二、高亮查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; { "name":"zhangsan", "ag…

<Python的文件>——《Python》

目录 1.文件 1.1 文件是什么 1.2 文件路径 1.3 文件操作 1.3.1 打开文件 1.3.2 关闭文件 1.3.3 写文件 1.3.4 读文件 1.3.5 关于中文的处理 1.4 使用上下文管理器 1.文件 1.1 文件是什么 变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失.…

23种设计模式(十八)——组合模式【数据结构】

文章目录 意图什么时候使用组合真实世界类比组合模式的实现组合模式的优缺点亦称: 对象树、Object Tree、Composite 意图 有时又叫作整体-部分(Part-Whole)模式,是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致…

【并发编程】Executor线程池

一、线程 1.线程 线程是调度CPU资源的最小单位。java线程与OS线程保持1:1映射关系&#xff0c;也就是说&#xff0c;一个Java线程也会在操作系统里有一个对应线程。 2.线程的生命周期 NEW,新建 RUNNABLE,运行 BLOCKED,阻塞 WAITING,等待 TIMED_WAITING,超时等待 TERMINATED…

超级完整的 Git 下载、安装与配置

Git的下载、安装与配置 一、git下载安装 1、访问git官方下载网址&#xff0c;点击这里&#xff0c;然后根据自己的电脑系统&#xff0c;下载对应的安装包&#xff1a; 2、在淘宝镜像网站 下载对应的安装包&#xff1a; 注&#xff1a; 如果由于官网下载速度过于缓慢&#xff…

String 有趣简单的编程题

String 有趣简单的编程题 每博一文案 师父说: 世上没有真正的感同身受&#xff0c;也没有谁能完全做到将心比心&#xff0c;我们一路走来。 慢慢的学会了收敛情绪&#xff0c;越成熟越沉默&#xff0c;有些人&#xff0c;背负沉重的压力&#xff0c;却从来不敢说累&#xff0c…

[python刷题模板] 树的直径/换根DP

[python刷题模板] 树的直径/换根DP 一、 算法&数据结构1. 描述2. 复杂度分析3. 常见应用4. 常用优化二、 模板代码1. 单纯询问树的直径值2. 求出树的直径两端搞事情3. 换根DP求树的直径(大炮打蚊子&#xff0c;别这么做&#xff0c;只是用来帮助理解换根DP)4. 换根dp求特定…

UDS诊断系列介绍14-2F服务

本文框架1. 系列介绍1.1 2F服务概述2. 2F服务请求与应答2.1 2F服务请求2.2 2F服务正响应2.3 2F服务否定响应3. 2F诊断使用示例4. Autosar系列文章快速链接1. 系列介绍 UDS&#xff08;Unified Diagnostic Services&#xff09;协议&#xff0c;即统一的诊断服务&#xff0c;是…

学习记录667@项目管理之项目人力资源管理

什么是项目人力资源管理 项目人力资源管理包括编制人力资源管理计划、组建项目团队、建设项目团队与管理项目团队的各个过程&#xff0c;不但要求充分发挥参与项目的个人的作用&#xff0c;还包括充分发挥所有与项目有关的人员-----项目负责人、客户、为项目做出贡献的个人及其…

[QMT]04-在QMT之外调用xtquant直接编写策略

背景希望不用在QMT软件里面憋屈地写代码&#xff0c;想使用pychar、vscode、notepad等IDE编写python代码&#xff0c;因为有代码提示、补全。这完全没问题&#xff01;QMT简直是为个人量化交易者量身打造的神器&#xff0c;它支持以上想法。QMT这个东东基本是由两部分组成的&am…