新建工程,对话框的属性border设置成none,让后在onsize中使用如下代码 CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
ScreenToClient(rect);ClientToScreen竟然没有转换,这是为啥呀,窗体不断最大化,然后恢复几次又可以了。费解
各位老大帮帮忙

解决方案 »

  1.   

    ClientToScreen(rect);
    ScreenToClient(rect);
    你这样做有什么意义吗?
      

  2.   

    闲着没事转着玩呗,反正 CPU 资源多的是,是吧 LZ ?哈哈如果你要 GetClientRect 再 ClientToScreen,
    还不如直接 GetWindowRect
      

  3.   

    我这只是个测试,看看rect的值有什么变化GetClientRect得到的是已经转换过的rect,我想转换一个已知的rect,所以用ClientToScreen了
      

  4.   

    你说 窗体不断最大化过?
    如果你的程序到了屏幕坐标原点 (0, 0) 的话,
    ClientRect 和 WindowRect 就是一样的了。
    否则的话,肯定是不一样的。
    至于为什么不一样,得有完整代码或者仔细 debug 程序
      

  5.   

    就没有什么代码,工程是MFC对话框,默认的设置,就在onsize中添加了
     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难道没有人遇到过,还是我的编译器出问题了
      

  6.   

    http://topic.csdn.net/u/20080215/14/b7b8958e-5e41-4c52-955a-ec4011e46805.html
    和这个老兄的问题一样,哎,太菜了
      

  7.   

    在对话框的OnSize里,窗口是大小是对的,但窗口的位置还是(0, 0)
    因为你的对话框没有border,所以ClientToScreen转换后,left和top仍然是0
      

  8.   

    有border 转换正常,这个我知道,但是为什么,我的对话框是没有border的,有什么办法解决吗
      

  9.   

    有border的时候有标题栏,也就是非客户区,所以正常,你可以看一下left=3,top=30一个是边框的宽度,一个是标题栏高度没有border的时候都是客户区,你怎么转化都一样,因为一开始创建的时候都是0,0位置创建的但是你用 SetWindowPos(NULL, 10, 20, 500, 500, SWP_NOMOVE | SWP_NOZORDER);改变一下位置,大小,你看看还一样吗
      

  10.   

    GetClientRect(rect); 获得客户区大小
    ClientToScreen(rect); 这个难道是转化为相对于客户区的坐标?不是相对于屏幕的吗
      

  11.   

    谢谢 Conry
    这样写 为什么第一次执行的不正确呢void CtestDlg::OnSize( UINT nType, int cx, int cy )
    {
    CDialog::OnSize(nType, cx, cy); CRect rect;
    GetClientRect(rect);
    ClientToScreen(rect);
    ScreenToClient(rect);
    }
      

  12.   

    唉 物语
    第一次调用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