VC编程中遇到的窗口大小和窗口客户区大小的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VC编程中遇到的窗口大小和窗口客户区大小的问题相关的知识,希望对你有一定的参考价值。

我用CreateWindow创建了一个1024*720大小的窗口,有菜单。
然后我又用GetClientRect去获取客户区大小,它的值是1008*662
但是我自己在响应LBUTTONDOWN消息的时候,点击窗口内部,用TextOut输出坐标,最大可以达到1015*900左右啊,这是什么情况。。
难道客户区是另外的意思?那我怎么获取我窗口中间空白可用的大小啊。。。

用 GetWindowRect 得到的是包括非客户区的矩形(非客户区含上边条,下边条,左边条,右边条,非客户区左边的左顶点,非客户区右边的右顶点,左下角的左下角顶点,右下角的右下角顶点,和客户区)。GetClientRect得到的仅是客户区的矩形。桌面上可供应用程序使用的区域是,除出系统占用区之外的应用程序可用区,系统占用的包括任务栏所占用的部分,应用程序要用WS_EX_TPMOST属性才可以扩展到这部分区域,应用程序可用区,可以用getsystemmetrics函数来查询,具体可以参考:《WIN32程序员参考大全》全书共五册,最好是下载有目录的那个PDF版。CSDN中去下载,注意下有目录的。关于窗口的一般内容其中都有,要操作和绘制非客户区,就要搜索百度,关键字一般可以是:VC 自绘 非客户区 标题栏等。 参考技术A 有两个概念:
1.客户区,是指WINDOWS去掉工具栏、菜单栏、状态栏、边框等之后,窗口中间的一块区域
2.逻辑坐标和屏幕坐标,逻辑坐标是指窗口客户区左上角为(0,0),向右X增大,向下Y增大的坐标系,如果有滚动条,可能会出现坐标超出客户区范围的可能追问

那如果我想要获取一个没有菜单,工具,状态栏的窗口的区域怎么获取呢?GetClientRect不行嘛。。

参考技术B GetClientRect得到的就是客户区 可以粗略理解为中间空白可用的大小
其他的是边框菜单什么的
你窗口才1024*720,鼠标消息能达到900 ?
建议用窗口的MOUSEMOVE消息来监视看看
参考技术C TEXTOUT最在可以到1015*900?、
TEXTOUT的坐标可以是任意的值,只不过超出范围后不会在显示。。
TEXOUT x=1015,y=0,那么你或许就能看一两个字吧.
参考技术D 第一个非客户区的大小加上你想要的大小客户,然后SetWindowPos不是什么?追问

这跟movewindow差不多嘛,我只是想要得到窗口中间那部分的大小。。

以上是关于VC编程中遇到的窗口大小和窗口客户区大小的问题的主要内容,如果未能解决你的问题,请参考以下文章

VC++6.0 如何获取窗口客户区域在屏幕中的位置

AdjustWindowRectExForDpi 似乎没有调整客户区大小

c ++ mfc非客户区包含其他窗口吗

Windows客户区窗口大小设置

VC:如何实现窗口和窗口内容在鼠标拖动下改变大小

如何将图形保持在主窗口的中心