我要在一个窗口中得到一个静态矩形框客户区坐标,
接着在静态矩形框中画条平分线,怎么弄?
getwindowrect(&rect);//得到是屏幕坐标
ddc->lineto(point);//point是客户区坐标
两坐标的原点不同,说一实际画出来的不是在矩形的正中。
试过用screentoclient(&rect)转成客户区坐标
但好像,rect.left=0,rect.top=0;//查了msdn,好像该方法就是做的。
高手教我该怎么做啊

解决方案 »

  1.   

    比如父窗口是CWnd* pParent,静态矩形框的控件ID是IDC_STATIC1(注意不能是IDC_STATIC,即不能是被宏定义为-1),那么可以用以下语句来取得静态矩形框在父窗口中的CRect范围:
    CRect tRct;
    this->GetDlgItem(IDC_STATIC1)->GetWindowRect(&tRct);
    this->ScreenToClient(&tRct);不过我觉得你的设计思路有问题,就算你找到正确坐标了,也画不上去,因为在父窗口中画的线,会被子窗口(也就是你的静态矩形框)遮住。
      

  2.   

    被父窗口遮住倒是好解决
    Invalidate();UpdateWindow();
    就行了。
    楼上你有什么好一点的思路
    说来体听听啊
      

  3.   

    静态矩形框客户区
    //////////////////////
    自己定义这个矩形区域,在OnPaint里定义一个客户区的DC,这个DC的大小是客户区的大小。最后把这个DC拷贝到前台DC。
      

  4.   

    问题解决了
    原来是这样写的
    CWnd* pwnd = GetDlgItem(IDC_***);
    pwnd->GetWindowRect(&rect);
    pwnd->ScreenToClient(&rect);
    居然转换到客户去坐标是rect.left=rect.top=0
    ------------------------------------------------------------------
    问题就出在pwnd->ScreenToClient(&rect)
    这样使得把静态框的屏幕坐标转成静态框的客户坐标,怪不得顶点坐标为0呢
    this->ScreenToClent(&rect)//这样才转化成窗口客户区坐标-------------------------
    --------------------------
    看来细节疏忽不得啊