![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Windows编程
y果子
愿你成为自己的太阳,无需借助谁的光
展开
-
1. Windows API
我们学习的都是跟黑乎乎的屏幕打交道,像QQ、360、VC6.0这样的软件都是带界面的,怎么做到的呢?前面我们讲的”黑屏“叫控制台应用程序(Win32 Console Application),也称DOS程序(或MS-DOS程序)。DOS是早期的命令式操作系统,很难做出漂亮的界面,除了开发人员,”黑屏“对普通用户很不友好。带界面的程序叫Windows应用程序(Win32 Application)...原创 2019-07-29 22:23:10 · 189 阅读 · 0 评论 -
9. Windows GDI 绘图基础 与 轻量进阶
GDI 是 Graphics Device Interface 的缩写,称为图形设备接口,主要用来绘图,由动态链接库 GDI32.DLL 提供支持。GDI 就是一个函数库,提供了很多绘图函数(也就是GDI32.DLL 中的导出函数),上节使用的 TextOut 就是其中之一。GDI 非常重要,不但应用程序使用它来绘图,Windows 本身也使用GDI来显示用户界面,比如菜单、滚动条、图标和鼠标指...原创 2019-07-31 13:00:04 · 580 阅读 · 0 评论 -
10. Windows static 控件(静态文本框控件)
使用 TextOut 和 DrawText 函数有时候会不方便,例如:文本不能自动换行,超出窗口范围会被隐藏;每次更改文本都要先擦除背景再重新输出,比较麻烦。实际开发中一般使用静态文本框控件来输出文本。静态文本框是Windows 的一种标准控件,可以用来在窗口上显示一段文本,并且文本容易受到控制。除了静态文本框,Windows的标准控件还有很多种,例如按钮、下拉菜单、单选按钮、复选框等。...原创 2019-07-31 13:36:01 · 1705 阅读 · 0 评论 -
11. Windows CreateFont: 创建自己的字体
前面无论是使用文本输出函数还是 static 控件,字体都是默认的,比较丑陋,我们完全可以自己创建更加炫酷的字体。创建字体使用 CreateFont 函数,它的原型是:HFONT CreateFont( int cHeight, //字体的逻辑高度 int cWidth, //字体的逻辑宽度 int cEscapement, //指定移位向量相对X轴的偏转角度 ...原创 2019-07-31 15:58:43 · 2692 阅读 · 1 评论 -
12. Windows button控件(控件按钮)
按钮既是标准控件,也是子窗口,窗口类名是button。Button 控件样式以BS开头,常用的有:按钮控件示例:#include <Windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);HINSTANCE hInst;int WINAPI WinMain( HINSTANCE hInstanc...原创 2019-07-31 16:30:48 · 3218 阅读 · 0 评论 -
13. MSG 结构体WndProc 窗口过程
MSG结构体和WndProc窗口过程对于Windows编程非常重要,如果不了解它们,可以说就没有学会Windows编程。MSG结构体MSG 结构体用来表示一条消息,各个字段的含义如下:typedef struct tagMSG{ HWND hwnd; //窗口句柄 UINT message; //消息类型 WPARAM wParam; //附加消息1 L...原创 2019-07-31 16:40:18 · 287 阅读 · 0 评论 -
14. Windows edit 控件(编辑框控件)
在C语言控制台程序(Console Application)中,可以使用 scanf 函数获取用户的输入,而在Windows程序中使用编辑框控件。创建编辑框控件编辑框控件的窗口类名是edit。除了子窗口常用的风格 WS_CHILD、WS_VISIBLE、WS_BORDER 外,edit 控件也有自己的风格,都是以ES开头。edit 控件常用风格登录框演示:#include <Wi...原创 2019-07-31 17:01:03 · 4613 阅读 · 0 评论 -
15. 修改 static 控件背景颜色 和 文字颜色
当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息。如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄,Windows 会使用该画刷来绘制控件背景(子窗口背景)。也就是说,改变 static 控件的背景颜色只有这一种方式,就是处理 WM_CTLCOLORSTATIC 消息。WM_CTLCOLORSTA...原创 2019-07-31 19:42:46 · 1076 阅读 · 0 评论 -
16. Windows 单选按钮,复选框,分组框控件
单选按钮(Radio Button)和复选框(Check Box)是常见的Windows控件,用于从给出的选项中选择一项或多项,如下图所示:单选按钮是互斥的,只能选择其中一项;而复选框没有限制,可以选择一项或多项。单选按钮和复选框都是一种特殊的按钮,窗口类名称都是button,只不过增加了一些特殊的窗口样式罢了。单选按钮的样式为BS_AUTORADIOBUTTON,复选框的样式为BS_AUT...原创 2019-07-31 20:04:19 · 2079 阅读 · 0 评论 -
8.向窗口输出文字 : TextOut 和 DrawText 函数
使用 DrawText() 向客户区的中间位置输出了一段文本,说一下文字的输出。设备环境(DC)在Windows中,一切能在显示器上看到的都是图形,不但包括点、线、矩形、圆等,也包括文字、字体。对用户来说文字和图片是不同的,但它们在本质上都是图形,都需要在显示器上画出来。这也是Windows被称作图形操作系统的原因。Windows不允许我们直接访问硬件,如键盘、显示器、打印机等,在与这些硬件...原创 2019-07-31 12:06:54 · 3856 阅读 · 1 评论 -
7. 绘制 和 重绘,有效矩形 和 无效矩形
当用户在屏幕移动其他程序的窗口时,可能会遮住当前程序的部分窗口。Windows 不会保存被遮住的那部分窗口,当其他程序的窗口被移开时,Windows 会要求你的程序重新绘制刚才被遮住的部分区域。如果你自己不重绘,Windows 是不会管的。Windows 是一个消息驱动的系统,它使用两种方式把各种事件通知给应用程序: - 把消息放到应用程序的消息队列中,让程序自己通过 GetMessage 函...原创 2019-07-31 11:35:43 · 274 阅读 · 0 评论 -
6. 一个完整的 Windows 程序框架
前面演示了带界面的Windows程序,但那仅仅是一个弹窗,调用MessageBox函数就可以实现,不是一个真正意义上的窗口。通常所说的窗口包含最大化、最小化、关闭按钮,也包含菜单、单选框、图像等各种控件。一个完整的Windows程序框架:#include <Windows.h>LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM...原创 2019-07-30 23:31:44 · 415 阅读 · 0 评论 -
VS2017创建Windows程序过程及错误 error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invok
1>MSVCRTD.lib(exe_main.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中被引用1>D:\Vistual-Studio\Example\Demo1\Debug\Demo1.exe : fatal error LNK...原创 2019-07-30 14:10:53 · 11897 阅读 · 1 评论 -
__stdcall,__cdecl,__pascal,__fastcall的区别
__cdecl__cdecl 是 C Declaration 的缩写,表示 C 语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。__stdcall__stdcall 是 Standard Call 的缩写,是 C++ 的标准调用方式:...原创 2019-07-30 14:23:54 · 158 阅读 · 0 评论 -
2. Windows 程序
编写Windows程序,首先要包含 windows.h 头文件。windows.h 还包含了其他一些Windows头文件,例如: - windef.h:基本类型定义 - winbase.h:内核函数 - wingdi.h:用户接口函数 - winuser.h: 图形设备接口函数这些头文件定义了Windows的所有数据类型、函数原型、数据结构和符号常量,也就是说,所有的Windows...原创 2019-07-30 14:37:16 · 494 阅读 · 0 评论 -
3. Windows 数据类型
Windows使用typedef或#define定了很多新的数据类型,前面几节中我们已经领略到了。它们虽然多,但是都有规律可循,很多都是对C/C++中数据类型的简单加工,而且很容易“见名知意”。要想学习Windows编程,必须要了解常用的数据类型。如果你对C语言或者C++的数据类型比较熟悉的话,那么对于一些基础的内容这个过程就是慢慢熟悉的过程。这些数据类型在windows.h头文件中定义:t...原创 2019-07-30 15:35:12 · 199 阅读 · 0 评论 -
4. 宽字符与Unicode
在C语言中,我们使用char来定义字符,占用一个字节,最多只能表示128个字符,也就是ASCII码中的字符。计算机起源于美国,char 可以表示所有的英文字符,在以英语为母语的国家完全没有问题。但是世界上存在很多不同的语言,例如汉语、汉语、日语等有成千上万个字符,需要用多个字节来表示,称之为宽字符(Wide Character)。Unicode 是宽字符编码的一种,已经被现代计算机指定为默认的编...原创 2019-07-30 17:44:22 · 580 阅读 · 0 评论 -
5. 与 Windows 编程有关的重要概念
窗口窗口的概念很容易理解,就是我们使用软件时看到的界面。Windows 的核心就是窗口,它是Windows一统PC操作系统市场的杀手锏,如下图所示: 图1:记事本程序我们使用的软件都有自己的窗口,比如 QQ、计算器、记事本等。这些窗口可以包含输入框、下拉菜单、单选按钮、多选按钮、文本区域等各种各样的控件(Controls),有的甚至还有动画!窗口、控件、图像、音频视频等都称为资源(Res...原创 2019-07-30 17:57:23 · 203 阅读 · 0 评论 -
CreateWindow窗口风格取值(dwStyle参数的取值)
CreateWindow 函数用来创建一个窗口,第三个参数 dwStyle 用来指定窗口风格,它的取值如下表所示(也可以是多个值的组合):对于一般的窗口,常用的取值有 WS_BORDER、WS_CHILD(常用于控件)、WS_VISIBLE 等。观察上表可以发现,dwStyle 参数的取值都是以WS开头的,WS 是Window Style的缩写,意思是窗口风格。窗口样式需要在两个地方指定,...原创 2019-07-30 23:18:22 · 1752 阅读 · 0 评论 -
WNDCLASS中style字段的取值(wndclass.style的取值)
WNDCLASS 结构体的 style 字段用来指定所创建的窗口的风格,它的取值如下表(也可以是多个值的组合):记住这么多取值简直是一个噩梦,一般窗口常用的取值为CS_HREDRAW | CS_VREDRAW,表示窗口位置或大小改变时发生重绘,产生WM_PAINT消息。观察上表可以发现,WNDCLASS 结构体中的 style 字段的取值都是以CS开头的,CS 是Class Style的缩写...原创 2019-07-30 23:19:23 · 1180 阅读 · 0 评论 -
17. 判断 单选按钮 和 复选框 是否被选中
在实际开发中,我们往往需要知道哪个按钮被选中了,才能进行下一步的操作。例如对于一组单选按钮,只有一个选项能被选中,最好的办法是将这组按钮作为参数传入一个函数,通过函数返回值判断哪个按钮被选中了。但遗憾的是,在Windows中不能一次性获得一组按钮的选中状态,只能一个一个地遍历。复选框也是如此。可以通过SendMessage函数发送BM_GETCHECK消息来获取按钮的选中状态,返回 BST_C...原创 2019-07-31 20:16:13 · 2681 阅读 · 0 评论