Windows 编程基础:窗口坐标系

专栏导航

上一篇:MM_TEXT 映射模式下的客户区坐标系

回到目录

下一篇:无

本节前言

对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。

我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。

之前,我们讲解过屏幕坐标系与 MM_TEXT 映射模式之下的客户区坐标系的知识。学习本节,需要你首先已具备这两种坐标系的知识基础。

关于屏幕坐标系与 MM_TEXT 映射模式之下的客户区坐标系的知识,请参考下述两个文章链接。

参考课节:第3章,标签 Win32 :Windows 坐标系,屏幕坐标系

参考课节:MM_TEXT 映射模式下的客户区坐标系

在你确保已掌握了上述两个参考文章的内容的基础上,你可以往下学习本节内容。

我们开始。

一. 窗口坐标系

屏幕坐标系,是以整个计算机显示屏作为显示区域的。在屏幕坐标系中,原点在显示器的左上角的像素点的位置。屏幕坐标系的原点是(0,0)。

至于窗口坐标系,实话说,我也并不是很熟悉这一坐标系。因为,在学习 Windows API 编程与 MFC 编程基础的时候,几乎不咋用这一坐标系。常用的,还是客户区坐标系。

在这里,我说一说我所认识的窗口坐标系。

在使用 GDI 函数的时候,我们程序员在代码中给出的(x,y)坐标对,叫做逻辑坐标。在窗口坐标系里面,我们程序员给出的逻辑坐标,它与窗口坐标系的物理坐标是一致的。

在窗口坐标系里面,x 坐标值与 y 坐标值的 1 个单位,为 1 个物理像素。

在窗口坐标系里面,坐标系的原点,位于整个窗口的左上角的像素点,此原点的坐标为(0,0)。对于某一个坐标对(x,y),x 值代表此像素点相对于坐标原点,向右边偏移 x 个像素的位置;y 值代表此像素点相对于坐标原点,向下偏移 y 个像素的位置。

注意哦,这里所说的整个窗口,它包括的是整个的窗口,包括客户区、状态栏、工具栏、滚动条、标题栏、菜单栏等等的全部的区域。

当使用客户区坐标系绘制文本与图形的时候,我们只可以将图形与文本绘制在客户区之中。而当我们使用窗口坐标系的时候,我们就可以将绘图范围扩大一些了,我们可以在整个窗口中,除标题栏之外的任意位置绘图。也就是说,通过使用窗口坐标系,我们可以在工具栏、菜单栏等等的位置绘制一条直线,我们也可以依然将这条直线绘制在窗口的客户区之中。当然了,你也可以用窗口坐标系,来绘制一个跨越客户区、工具栏、标题栏等等区域的一个图形。

窗口坐标系的特点是,使用它,你可以在整个窗口的除标题栏之外的任意位置绘图。

我们试着使用窗口坐标系来绘制一条直线。
图1

如图1 所示,我们已经绘制了一条直线。这条竖线,跨越了菜单栏、工具栏、客户区、状态栏。

图1 所示的程序,是我用 MFC 编写的。以后,我们学习到 MFC 的相关章节的时候,我若是没忘记的话,那么,我会领大家画图1 所示的直线的。

有一点需要注意,窗口坐标系的原点(0,0),它是整个窗口的左上角的像素点。也就是,它其实应该是位于标题栏的左上角的。不过呢,在使用窗口坐标系的时候,画图涉及标题栏区域的时候,不会显示出来,但是文本或图形可以在除标题栏之外的其余位置正常显示。

也就是说,使用窗口坐标系的时候,相当于有一个裁剪区域,这个裁剪区域是除标题栏之外的窗口区域。你在绘制图形与文本的时候,可以让绘图对象的一部分位于标题栏之中,但是,位于标题栏的部分不属于裁剪区域,因此,标题栏部分的图形与文本是不显示的,而标题栏之外的部分的图形与文本,是可以正常显示的。

二. 窗口坐标系与屏幕坐标系的区别

其实区别不大。窗口坐标系与屏幕坐标系,最主要的区别是,坐标原点不同。屏幕坐标系的坐标原点,是在整个显示器的显示区域的左上角的像素点的位置。而窗口坐标系的坐标原点,是在程序窗口的左上角的位置,其实也就是位于标题栏里面。

总 结

本节内容,应该是不难。

好好学吧。

专栏导航

上一篇:MM_TEXT 映射模式下的客户区坐标系

回到目录

下一篇:无

相关推荐
xskukuku5 小时前
使用VSCode配置C语言运行环境
c语言·ide·vscode
youngerwang9 小时前
【Windows tcpip协议栈完整静态反汇编分析】
windows·tcpip协议栈·静态反汇编分析
小欣加油9 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
2301_764441339 小时前
主流手机pc品牌的端侧模型部署梳理
人工智能·windows·机器学习·智能手机·产品运营
Java面试题总结10 小时前
C#12 中的 Using Alias
开发语言·windows·c#
星恒随风10 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式
zh路西法11 小时前
【SSH 免密登录全流程】Windows Linux 通用方案
linux·windows·ssh
浪客灿心11 小时前
项目篇:模块设计与实现
数据库·c++
牛油果子哥q11 小时前
【C++ STL vector】C++ STL vector 终极精讲:动态数组底层原理、两倍扩容机制、迭代器失效、增删查改、性能剖析与工程避坑指南
开发语言·c++
为何创造硅基生物13 小时前
独占指针的创建std::make_unique 本身自带堆出现
c++