如何得到应用程序的客户区位置与大小? 有一个对话框应用程序,有自己的标题栏与菜单,现在想在获得其客户区的坐标(top,left,bottom,right),要求是相对于屏幕的坐标,即屏幕的左上角为(0,0),请问该如何解决此问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 简单,接分了。CRect rect;GetClientRect(&rect);rect.TopLeft().y 对应 toprect.TopLeft().x 对应 leftrect.BottomRight().y 对应 bottomrect.BottomRight().x 对应 right CRect rect;GetRectClient(&rect);rect的top, left, bottom ,right就是相对于屏幕的用ScreenToClient(rect)就转换为相对于父窗口的了 真的假的啊,用GetClientRect获得rect的left和top值都是0吧 wpmsoft (红旗下的蛋) 好象很长时间没来了!忙什么去了?俺来晚了,就不说了!上面已经说的很清楚了! 没有这样子简单吧,各位老大。GetClientRect得到的客户区的坐标,这个不假。可是它的左上顶点始终为(0,0),而这不是我所要求的。如果把(0,0)转换为屏幕坐标,则肯定在屏幕的最左上角!!!!这显示是错误的呀。如果用ClientToScreen()进行转换,得到了大小,但是没有得到位置。可能还需要做一个偏移。可是,我无法得到偏移量。这就是本问题的关键所在。还望高手们指教。 GetClientClient(&rect);//得到了吧,保存起来kk = rect;ClientToScreen(rect);//相对于屏幕的rect.left-kk.left;rect.right-kk.right;rect.bottom-kk.bottom;rect.top-kk.rect.top; 好像GetWindowRect获得的尺寸是相对于屏幕左上角的 GetWindowRect获得的尺寸是相对于屏幕左上角的,这个没错!!但是它的尺寸及位置是应用程序的窗口的,而不是它的客户区的!!!请注意,这个是不一样的。应用程序的窗口永远都要比客户区大。问题的关键是要得到客户区相对于屏幕左上角的尺寸及大小。 ClientToScreen(rect);这个也不行吗?? 呵呵,这么简单的问题。CRect rect;//得到客户区区域,相对于应用程序GetClientRect(rect);//从客户区坐标转为屏幕坐标ClientToScreen(rect);//rect的left,top,right,bottom就是对话框相对于屏幕左上角的坐标了。千万不能用GetWindowRect,他获得的是应用程序窗口的坐标,其中包含了client、boder等建议你好好看看msdn. CRect rect; GetClientRect(&rect);//top=0,bottom=666,left=0;right=1016 ClientToScreen(rect);//top=64,bottom=730,left=4;right=1020 没错,GetClientRect得到的是客户端的rect,ClientToScreen得到的是相对屏幕的坐标 都不对呀!!!!!!!无论我的窗口显示在屏幕的什么位置,GetClientRect()得到的left与top都是0。换言之,经转换后,它们相对于屏幕的坐标也是相同的。 请问, 屏幕是不同位置的一个区域,其相对于屏幕的位置可能一样吗????烦劳各位大哥仔细研究一下再做回答。 首先单单GetClientRect(&rc)是不够的之后还需要ClientToScreen(&rc)得到的rc的值才是窗口相对屏幕的相对位置我想可能你将此段代码放在了初始化中在还没有显示的时候是得不到正确的相对位置的你可以在试图中加一个Button,再看看rc的值如再不行,可将代码一并发给我我帮你看看,好吗?[email protected] May you succeed! ------------------------ GetClientRect rectrect.botton,rect.right不就是你客户区的大小ClientToScreen转换就可得到你的位置。 点击任务栏里的最小窗口后 能弹出一个提示 再还原 不是托盘 CheaderCtrl绘制的项目有区域限制吗? office打开时有个微软的商标的画面是怎么实现的 photoshop的浮动工具条和其他的浮动框是怎么做的? 求 《MFC windows程序设计(第二版)》的源码 如何编写服务程序? 各位大侠,我是一个菜鸟想学网络编程 为什么我的BITMAP显示不出来? 求系统IO C++源码 句柄,同步,线程,进程,信号量怎么用,天啊,我快疯了 请教Msflexgrid最基本的问题。 BSTR问题
CRect rect;
GetClientRect(&rect);
rect.TopLeft().y 对应 top
rect.TopLeft().x 对应 left
rect.BottomRight().y 对应 bottom
rect.BottomRight().x 对应 right
GetRectClient(&rect);
rect的top, left, bottom ,right就是相对于屏幕的
用ScreenToClient(rect)就转换为相对于父窗口的了
忙什么去了?
俺来晚了,就不说了!上面已经说的很清楚了!
//得到了吧,保存起来
kk = rect;ClientToScreen(rect);
//相对于屏幕的
rect.left-kk.left;
rect.right-kk.right;
rect.bottom-kk.bottom;
rect.top-kk.rect.top;
//得到客户区区域,相对于应用程序
GetClientRect(rect);
//从客户区坐标转为屏幕坐标
ClientToScreen(rect);
//rect的left,top,right,bottom就是对话框相对于屏幕左上角的坐标了。千万不能用GetWindowRect,他获得的是应用程序窗口的坐标,其中包含了client、boder等
建议你好好看看msdn.
GetClientRect(&rect);//top=0,bottom=666,left=0;right=1016
ClientToScreen(rect);//top=64,bottom=730,left=4;right=1020
之后还需要ClientToScreen(&rc)
得到的rc的值才是窗口相对屏幕的相对位置我想可能你将此段代码放在了初始化中
在还没有显示的时候是得不到正确的相对位置的
你可以在试图中加一个Button,再看看rc的值如再不行,可将代码一并发给我
我帮你看看,好吗?
[email protected]
May you succeed!
------------------------