有一个对话框应用程序,有自己的标题栏与菜单,现在想在获得其客户区的坐标(top,left,bottom,right),要求是相对于屏幕的坐标,即屏幕的左上角为(0,0),请问该如何解决此问题?

解决方案 »

  1.   

    简单,接分了。
    CRect rect;
    GetClientRect(&rect);
    rect.TopLeft().y      对应 top
    rect.TopLeft().x      对应 left
    rect.BottomRight().y  对应 bottom
    rect.BottomRight().x  对应 right
      

  2.   

    CRect rect;
    GetRectClient(&rect);
    rect的top, left, bottom ,right就是相对于屏幕的
    用ScreenToClient(rect)就转换为相对于父窗口的了
      

  3.   

    真的假的啊,用GetClientRect获得rect的left和top值都是0吧
      

  4.   

    wpmsoft (红旗下的蛋) 好象很长时间没来了!
    忙什么去了?
    俺来晚了,就不说了!上面已经说的很清楚了!
      

  5.   

    没有这样子简单吧,各位老大。GetClientRect得到的客户区的坐标,这个不假。可是它的左上顶点始终为(0,0),而这不是我所要求的。如果把(0,0)转换为屏幕坐标,则肯定在屏幕的最左上角!!!!这显示是错误的呀。如果用ClientToScreen()进行转换,得到了大小,但是没有得到位置。可能还需要做一个偏移。可是,我无法得到偏移量。这就是本问题的关键所在。还望高手们指教。
      

  6.   

    GetClientClient(&rect);
    //得到了吧,保存起来
    kk = rect;ClientToScreen(rect);
    //相对于屏幕的
    rect.left-kk.left;
    rect.right-kk.right;
    rect.bottom-kk.bottom;
    rect.top-kk.rect.top;
      

  7.   

    好像GetWindowRect获得的尺寸是相对于屏幕左上角的
      

  8.   

    GetWindowRect获得的尺寸是相对于屏幕左上角的,这个没错!!但是它的尺寸及位置是应用程序的窗口的,而不是它的客户区的!!!请注意,这个是不一样的。应用程序的窗口永远都要比客户区大。问题的关键是要得到客户区相对于屏幕左上角的尺寸及大小。
      

  9.   

    ClientToScreen(rect);这个也不行吗??
      

  10.   

    呵呵,这么简单的问题。CRect rect;
    //得到客户区区域,相对于应用程序
    GetClientRect(rect);
    //从客户区坐标转为屏幕坐标
    ClientToScreen(rect);
    //rect的left,top,right,bottom就是对话框相对于屏幕左上角的坐标了。千万不能用GetWindowRect,他获得的是应用程序窗口的坐标,其中包含了client、boder等
    建议你好好看看msdn.
      

  11.   

    CRect rect;
    GetClientRect(&rect);//top=0,bottom=666,left=0;right=1016
    ClientToScreen(rect);//top=64,bottom=730,left=4;right=1020
      

  12.   

    没错,GetClientRect得到的是客户端的rect,ClientToScreen得到的是相对屏幕的坐标
      

  13.   

    都不对呀!!!!!!!无论我的窗口显示在屏幕的什么位置,GetClientRect()得到的left与top都是0。换言之,经转换后,它们相对于屏幕的坐标也是相同的。 请问, 屏幕是不同位置的一个区域,其相对于屏幕的位置可能一样吗????烦劳各位大哥仔细研究一下再做回答。
      

  14.   

    首先单单GetClientRect(&rc)是不够的
    之后还需要ClientToScreen(&rc)
    得到的rc的值才是窗口相对屏幕的相对位置我想可能你将此段代码放在了初始化中
    在还没有显示的时候是得不到正确的相对位置的
    你可以在试图中加一个Button,再看看rc的值如再不行,可将代码一并发给我
    我帮你看看,好吗?
    [email protected]
                    May you succeed!
                        ------------------------
      

  15.   

    GetClientRect  rectrect.botton,rect.right不就是你客户区的大小ClientToScreen转换就可得到你的位置。