我的对话框内有一picture控件,我想在里面画图:Rect rt;
GetDlgItem(IDC_PICTURE)->GetWindowRect(&rt);
ScreenToClient(&rt);OnPaint()
{
CPaintDC dc(this);dc.Ellipse(&rt);
}画出来的图形位置不对,我一看rt的内容正好是我设计的picture控件坐标的2倍,所以画出来的图形又大又偏,这是怎么回事?应该怎么处理?

解决方案 »

  1.   

    你的代码应该是放在了picture控件的父窗口类中了吧,这样的话,ScreenToClient(&rt)是把rt转化成了父窗口的客户坐标,应该是GetDlgItem(IDC_PICTURE)->ScreenToClient(&rt)才对.
      

  2.   

    刚才的实践表明,没有出现这样的情况。
    不信可以问我要源代码。
    [email protected]
    4月10号之前我不删除它。
      

  3.   

    GetDlgItem(IDC_PICTURE)->ScreenToClient(&rt)不行,应为我的dc是对话框窗口的,对应对话框窗口的坐标。我也知道是坐标没转换对,而且教科书上也是这么用的都没错误,可是我就是不知道我错在哪里了。希望大侠们不吝赐教!
      

  4.   

    void CTempDlgDlg::OnPaint()
    {   
       //AppWizard的代码省略了       
       CRect rt;
       CWnd *pWnd=GetDlgItem(IDC_PIC); //IDC_PIC为控件ID
       pWnd->GetWindowRect(&rt);
       pWnd->ScreenToClient(&rt);      //必须用控件的指针调用
       CDC *pDC=pWnd->GetDC();
       CBrush blue(RGB(0x00,0x00,0xff));
       pDC->SelectObject(&blue);
       pDC->Ellipse(rt);
       pDC->SelectStockObject(BLACK_BRUSH);
       pWnd->ReleaseDC(pDC);
    }
    你试试这个。一定可以。我用过;(给分哦)
      

  5.   

    记得好像就是这两句:
    -----------------------------
    pWnd->GetWindowRect(&rc);
    ScreeToClient(&rc);