获取窗体的屏幕坐标:开始在CtestDlg::OnInitDialog()函数中折腾半天没获取到,后面才知道应该到CtestDlg::OnPaint()中才能正确获取.
但是问题,我的获取只需要执行一次,但OnPaint做下动作就刷新(如切换下窗体),有没有其他的事件,让我即可获取到屏幕坐标,又不会多次执行啊.

解决方案 »

  1.   

    GetWindowRect()      得到的是在屏幕坐标系下的RECT(即以屏幕左上角为原点)
      
    GetClientRect()      得到的是在客户区坐标系下的RECT(即以所在窗口左上角为原点,去掉了标题栏计算,仅仅是个大小,返回值的左上角永远为0,0)
     
    ScreenToClient()      就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。如果需要获得窗体在屏幕上的位置,使用GetWindowRect如果需要获得窗体的大小,使用GetClientRect
      

  2.   

    CRect rect;
    GetClientRect(&rect);ScreenToClient(rect);
      

  3.   

    判断下rect是否有效啊,
    初始化rect各元素为0
    if(rect.left==0 && rect.right == 0) //没获取就获取,否则不获取
    {
    GetClientRect(&rect);       
    ScreenToClient(rect);
    }
    很简单