新建工程,对话框的属性border设置成none,让后在onsize中使用如下代码 CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
ScreenToClient(rect);ClientToScreen竟然没有转换,这是为啥呀,窗体不断最大化,然后恢复几次又可以了。费解
各位老大帮帮忙
GetClientRect(rect);
ClientToScreen(rect);
ScreenToClient(rect);ClientToScreen竟然没有转换,这是为啥呀,窗体不断最大化,然后恢复几次又可以了。费解
各位老大帮帮忙
ScreenToClient(rect);
你这样做有什么意义吗?
还不如直接 GetWindowRect
如果你的程序到了屏幕坐标原点 (0, 0) 的话,
ClientRect 和 WindowRect 就是一样的了。
否则的话,肯定是不一样的。
至于为什么不一样,得有完整代码或者仔细 debug 程序
CRect rect; GetClientRect(rect); ClientToScreen(rect); ScreenToClient(rect);并且把对话框的属性中 border设置为none,执行结果就是
CRect rect;
GetClientRect(rect); left=0,top=0
ClientToScreen(rect); left=0,top=0
ScreenToClient(rect);left=0,top=0
我说的肯定不是在最大化的值,也就是说他不应该等于0难道没有人遇到过,还是我的编译器出问题了
和这个老兄的问题一样,哎,太菜了
因为你的对话框没有border,所以ClientToScreen转换后,left和top仍然是0
ClientToScreen(rect); 这个难道是转化为相对于客户区的坐标?不是相对于屏幕的吗
这样写 为什么第一次执行的不正确呢void CtestDlg::OnSize( UINT nType, int cx, int cy )
{
CDialog::OnSize(nType, cx, cy); CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
ScreenToClient(rect);
}
第一次调用onsize的时候你窗口的位置(相对于屏幕)是在
(0,0,width, height)这时候你调用GetClientRect(rect);
得到的是CRect( 0, 0, width, height )
调用ClientToScreen(rect);
仍然是 CRect( 0, 0, width, height )
这很正常啊,有什么问题?第2次调用onsize的时候你窗口可能已经跑屏幕中央去了,因为mfc会对domodal的对话框默认调用一次centerwindow
所以你感觉正常了,改变了事实上第一次也进行了改变,只不过改变和不改变的结果一样0+0 = 0
0-0 = 0