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 映射模式下的客户区坐标系

回到目录

下一篇:无

相关推荐
wangjialelele13 小时前
Linux中的进程管理
java·linux·服务器·c语言·c++·个人开发
历程里程碑13 小时前
普通数组----轮转数组
java·数据结构·c++·算法·spring·leetcode·eclipse
李日灐13 小时前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树
汉克老师13 小时前
GESP2025年6月认证C++二级( 第一部分选择题(1-8))
c++·循环结构·表达式·分支结构·gesp二级·gesp2级
rainbow688913 小时前
C++高性能框架Drogon:后端开发新标杆
c++
Q741_14713 小时前
C++ 优先级队列 大小堆 模拟 力扣 703. 数据流中的第 K 大元素 每日一题
c++·算法·leetcode·优先级队列·
森焱森13 小时前
嵌入式硬件工程师应知 白银快速分析报告
linux·c语言·arm开发·嵌入式硬件·去中心化
rjc_lihui13 小时前
Windows 运程共享linux系统的方法
windows
czhaii13 小时前
单片机最佳入门多线程示例讲解
c语言·单片机
失忆爆表症13 小时前
01_项目搭建指南:从零开始的 Windows 开发环境配置
windows·postgresql·fastapi·milvus