导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于movewindow的疑问

lwx_worker 2009-08-07 11:18:39
在一个基于对话框的程序中

在初始化函数中

CRect rcDlg;
1 GetWindowRect(rcDlg);//这个值是(0,0,200,300)单步观察的
2 然后moveWindow(rcDlg);
看了MSDN上的说明,我的理解是GetWindowRect获得的是相对于显示器屏幕左上点的矩形坐标,然后显示出来后却显示到了中间。
而修改rcDlg的各个属性,使左上都设为1,那窗口确实会显示在屏幕的左上点去。

现在我对这两个函数都有些疑惑,请大家告诉 我哪里理解的不对 !谢谢
...全文
226 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xy_dream 2009-08-08
GetWindowRect()获得的就是以屏幕左上角为尺寸的矩形框的
你看下窗口属性Center是不是为true了
回复
Conry 2009-08-07
[Quote=引用楼主 lwx_worker 的回复:]
在一个基于对话框的程序中

在初始化函数中

CRect rcDlg;
1 GetWindowRect(rcDlg);//这个值是(0,0,200,300)单步观察的
2        然后moveWindow(rcDlg);
看了MSDN上的说明,我的理解是GetWindowRect获得的是相对于显示器屏幕左上点的矩形坐标,然后显示出来后却显示到了中间。
而修改rcDlg的各个属性,使左上都设为1,那窗口确实会显示在屏幕的左上点去。

现在我对这两个函数都有些疑惑,请大家告诉 我哪里理解的不对 !谢谢
[/Quote]
因为基类里面自动调用了
CenterWindow()函数
回复
healer_kx 2009-08-07
我好久不弄了。。。
回复
healer_kx 2009-08-07
[Quote=引用 7 楼 lwx_worker 的回复:]
引用 1 楼 healer_kx 的回复:
GetWindowRect不是你所认为的。它不反应位置信息,只是反应 尺寸大小。
MoveWindow要是采用这个量,作为参数,很奇怪了。


不对啊 MSDN明明说 getWindowRect是获得相对屏幕左上点的矩形对象的左上、右下坐标吗,怎么不反应位置,
[/Quote]
哦?那就是我搞错了。。。
回复
lwx_worker 2009-08-07
[Quote=引用 1 楼 healer_kx 的回复:]
GetWindowRect不是你所认为的。它不反应位置信息,只是反应 尺寸大小。
MoveWindow要是采用这个量,作为参数,很奇怪了。

[/Quote]
不对啊 MSDN明明说 getWindowRect是获得相对屏幕左上点的矩形对象的左上、右下坐标吗,怎么不反应位置,
回复
lwx_worker 2009-08-07
[Quote=引用 4 楼 flyoxs 的回复:]
楼主可能是在某些地方调用错了。留意一下 xx.GetWindowRect和yy.MoveWindow的xx、yy分别是哪个窗口。
[/Quote]
没弄做啊,我就只有一个窗口啊,不信你试一下,moveWindow()矩形参数是(0,0,100,100)和(1,1,100,100)的巨大区别。
回复
dengxuxing 2009-08-07
[Quote=引用 2 楼 danxuezx 的回复:]
GetWindowRect()      得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)
 
    GetClientRect()      得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
 
    ScreenToClient()      就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。

[/Quote]
同意!!!!!!!!!!
回复
flyoxs 2009-08-07
楼主可能是在某些地方调用错了。留意一下 xx.GetWindowRect和yy.MoveWindow的xx、yy分别是哪个窗口。
回复
岁月小龙 2009-08-07
昨天刚碰到这方面的问题,学习了,谢谢
回复
danxuezx 2009-08-07
GetWindowRect() 得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)

GetClientRect() 得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)

ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。
回复
healer_kx 2009-08-07
GetWindowRect不是你所认为的。它不反应位置信息,只是反应 尺寸大小。
MoveWindow要是采用这个量,作为参数,很奇怪了。
回复
MoXiaoRab 2009-08-07
[Quote=引用 18 楼 rendao0563 的回复:]
楼上的是邪恶八进制的那个吗? 很眼熟。
[/Quote]
囧了
回复
rendao0563 2009-08-07
楼上的是邪恶八进制的那个吗? 很眼熟。
回复
MoXiaoRab 2009-08-07
[Quote=引用 7 楼 lwx_worker 的回复:]
引用 1 楼 healer_kx 的回复:
GetWindowRect不是你所认为的。它不反应位置信息,只是反应 尺寸大小。
MoveWindow要是采用这个量,作为参数,很奇怪了。


不对啊 MSDN明明说 getWindowRect是获得相对屏幕左上点的矩形对象的左上、右下坐标吗,怎么不反应位置,
[/Quote]
需要位置吗?左上角和右下角的坐标不能确定窗口位置吗?
回复
gyang_pinner 2009-08-07
肯定错拉
GetWindowRect 是以窗口左上角做为原点
MOVEWINDOWS 是以屏幕左上角的那个点做为原点

我也是正准备说的来呢,呵呵
回复
sanguomi 2009-08-07
肯定错拉
GetWindowRect 是以窗口左上角做为原点
MOVEWINDOWS 是以屏幕左上角的那个点做为原点
回复
fishion 2009-08-07
应该是窗口在OnInitDialog初始化的过程所致的,因为这时窗口还没完全创建出来,可能是系统在这里调用MoveWindow把坐标左上角0,0看作是缺省的吧,因为你用一个BUTTON,在里面调用MoveWindow就不会有这种问题出现
回复
lwx_worker 2009-08-07
[Quote=引用 12 楼 fishion 的回复:]
CenterWindow()??在窗口属性里就有设置了
[/Quote]
晕,你看看我的提问的两种情况啊,为什么有时候不会CenterWindow(),而只是当左上坐标为0,0时候才会
回复
fishion 2009-08-07
CenterWindow()??在窗口属性里就有设置了
回复
lwx_worker 2009-08-07
[Quote=引用 10 楼 conry 的回复:]
引用楼主 lwx_worker 的回复:
在一个基于对话框的程序中

在初始化函数中

CRect rcDlg;
1 GetWindowRect(rcDlg);//这个值是(0,0,200,300)单步观察的
2        然后moveWindow(rcDlg);
看了MSDN上的说明,我的理解是GetWindowRect获得的是相对于显示器屏幕左上点的矩形坐标,然后显示出来后却显示到了中间。
而修改rcDlg的各个属性,使左上都设为1,那窗口确实会显示在屏幕的左上点去。

现在我对这两个函数都有些疑惑,请大家告诉 我哪里理解的不对 !谢谢

因为基类里面自动调用了
CenterWindow()函数

[/Quote]
在什么时候下会调用CenterWindow()?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……