
Windows程序设计
文章平均质量分 82
csdn_cjc
这个作者很懒,什么都没留下…
展开
-
映射模式详解
1、视口、窗口GDI绘图中设计两个坐标系:逻辑坐标系和设备坐标系。逻辑坐标系对应窗口,设备坐标系对应视口。GDI绘图函数中坐标参数和尺寸参数都是基于逻辑坐标系的。所以,从程序员角度看是以逻辑坐标系绘图,windows负责根据映射模式、窗口原点、窗口范围、视口原点、视口范围,把逻辑坐标系中的图像映射到设备坐标系中显示。2、映射模式windows提供了8种映射模式:映射模式逻辑单位x轴方向y轴方向MM_TEXT像素右下MM_LOMETRIC...原创 2021-06-03 15:40:09 · 1589 阅读 · 2 评论 -
14、位图
1、位图位图是点阵图形,由像素组成。位图的大小由图像尺寸和颜色深度决定。图像尺寸决定了像素的数量,颜色深度决定了每个像素的位数(bits)。2、位块传输位块传输是指,把源设备环境中的一个区域复制到目标设备环境中。实际不是简单的复制,是源位图、目标位图和目标设备环境的背景画刷三者进行一种三元光栅操作的结果。windows定义了10多种三元光栅操作:/* Ternary raster operations */#define SRCCOPY (DWO...原创 2021-05-30 21:19:02 · 436 阅读 · 0 评论 -
12、剪贴板
1、内存分配使用剪贴板时,程序必须申请一个内存块用于存储数据,并把内存块交给剪贴板。申请内存块可以使用GlobalAlloc函数,GlobalAlloc的返回值是一个HGLOBAL类型的句柄。如果GlobalAlloc调用时指定了GMEM_FIXED标志位,内存块地址是固定不变的,句柄值实际是一个内存块指针;如果指定了GMEM_MOVEABLE标志位,那么windows会在需要情况下移动该内存块(虚拟内存),以防止内存碎片化。由于内存块可以移动,返回值自然不是固定的内存块指针,而就是一个句...原创 2021-05-25 15:27:55 · 416 阅读 · 0 评论 -
11、对话框
1、对话框对话框是一种特殊的窗口,通常包含各种子窗口控件。特殊的地方在于,它的窗口过程属于windows,程序员拥有的被称作"对话框过程",windows窗口过程内部会调用对话框过程,把一些消息交给程序员处理。2、设计对话框可以在资源管理界面中设计对话框,把各种子窗口控件布局在对话框中。需要注意的是,对话框设计中使用的坐标值和尺寸并不是以像素为单位,它们的大小基于对话框当前使用的字体大小:x坐标和宽度以字符平均宽度的1/4为单位y坐标和高度以字符高度的1/8为单位...原创 2021-05-18 15:33:13 · 695 阅读 · 0 评论 -
10、菜单和其他资源
1、资源编译程序时,所有资源都会被保存到exe文件或者dll文件中,所以加载资源的API函数第一传参都是程序实例句柄hInstance。在进程启动时,资源并不会被加载到内存中,只有在需要使用时才调用函数,显式把资源加载到内存中。每个资源都拥有一个标识符,标识符可以是数字,也可以是字符串。加载资源的函数需要的标识符传参都是字符串类型,可以使用MAKEINTRESOURCE宏把数字标识符转换为字符串类型。2、图标图标最开始是在注册窗口类时使用,如果窗口带有标题栏,那么注册窗口...原创 2021-05-13 15:54:07 · 228 阅读 · 0 评论 -
9、子窗口控件
1、基础windows提供了多种预定义控件,这些控件是已经注册的窗口类,只需要调用CreateWindow函数直接创建即可。CreateWindow的传参和创建普通窗口时稍有不同:CreateWindow( _In_opt_ LPCWSTR lpClassName, // 窗口类名称 _In_opt_ LPCWSTR lpWindowName, // 窗口文本 _In_ DWORD dwStyle, // 窗口样式,需包含WS_CHILD以及...原创 2021-05-10 11:11:29 · 420 阅读 · 0 评论 -
8、定时器
1、定时器实现windows定时器通过一个称为“时间滴答”的硬件中断实现。windows为每一个定时器维护一个计数值,时间滴答中断出现时,计数值减1。当计数值为0时,windows把WM_TIMER消息插入到窗口消息队列中,同时计数值复位。前面提到,windows是以同步的方式处理消息的,定时器实现依赖于消息,所以定时器也是同步的,定时器不会中断当前程序的运行。另外,windows不会在消息队列中插入多条WM_TIMER消息。2、定时器使用当需要一个定时器时,使用Set...原创 2021-05-07 15:40:43 · 169 阅读 · 0 评论 -
7、鼠标
鼠标消息1、鼠标客户区消息当鼠标经过客户区或在客户区内点击时,windows就会向窗口过程发送鼠标客户区消息。windows定义了10种客户区鼠标消息:WM_MOUSEMOVE消息队列中只能存放一条WM_MOUSEMOVE消息。所以,消息队列中有未处理的WM_MOUSEMOVE消息时,windows不会再把WM_MOUSEMOVE加入消息队列,即使鼠标在移动。WM_LBUTTONDBLCLK、WM_MBUTTONDBLCLK、WM_RBUTTONDBLCLKDBLCLK双击原创 2021-05-06 15:18:22 · 265 阅读 · 1 评论 -
6、键盘
键盘基础1、焦点键盘被正在运行的所有程序共享,键盘消息会被当前拥有焦点的窗口接收,窗口获取焦点时窗口过程会收到WM_SETFOCUS消息,而失去焦点时会接收到WM_KILLFOCUS消息。2、同步键盘消息产生后,首先被暂时存储在系统消息队列中,只有当窗口过程处理完上一条键盘消息后,才会从系统消息队列取出下一条键盘消息放入程序消息队列中。这一机制是为了避免键盘消息被发送到错误的窗口过程。假如没有系统消息队列:一个特殊的键盘消息可能导致焦点的转移,则其后面的键盘消息应该发送原创 2021-04-29 15:59:07 · 116 阅读 · 0 评论 -
5、绘图基础
设备环境1、CreateIC《4、文本输出》中介绍了设备环境句柄的获取方法。但有时并不需要绘图,只是获取一些设备环境句柄相关的信息,可以使用CreateIC。CreateIC也是返回一个HDC,但是不能对其进行绘制。2、GetDeviceCapsGetDeviceCaps用于获取设备环境的一些显示能力,比如: - HORZSIZE:以毫米为单位的物理屏幕宽度 - VERTSIZE:以毫米为单位的物理屏幕高度 - HORZRES:水平方向像素数 - VERTRES:垂直方向像素数 - LOG原创 2021-04-28 14:02:11 · 312 阅读 · 0 评论 -
4、文本输出
无效矩形需要重绘的区域被称为“无效区域”,windows会计算出一个包含无效区域的最小矩形,这个最小矩形被称为“无效矩形”,调用windows函数可以获取到这个无效矩形。当窗口中出现无效区域时,windows把WM_PAINT消息发送到窗口消息队列。消息队列中不会出现多条WM_PAINT消息,windows会根据新出现的无效区域,计算一个新的无效矩形。设备环境句柄1、BeginPaint和EndPaint调用GDI函数基本都需要一个设备环境句柄参数。获取设备环境句柄的一个方法是调用BeginPai原创 2021-04-25 16:59:16 · 442 阅读 · 0 评论 -
3、窗口的创建
窗口应用程序是消息驱动的。用户对窗口的输入最终以消息的形式传递给窗口,窗口间的通信也依赖于消息。所谓“传递给窗口”是指系统调用了我们提供的、被称为窗口过程的函数,窗口过程负责对消息作出响应。窗口过程和窗口类绑定,创建窗口前必须注册窗口类。1、注册窗口类调用RegisterClass注册窗口。该函数只需要一个WNDCLASS指针传参。typedef struct tagWNDCLASSA { UINT style; // 窗口类样式 WNDPROC lpfnW原创 2021-04-23 17:00:59 · 540 阅读 · 0 评论