我在程序中重载了CStatic,来负责在指定地方动态创建控件,首先第一步是在重载的CStatic类中获取DataWatchDlg父窗体(也就是对话框)的坐标。可用GetClientRect(&rect)获取的结果是3687464-1-1242404-1943858504,而在DataWatchDlg类中获取自动生成的对话框坐标为0-0-822-525.为什么获得的结果都不一致?在重载的CStatic类中获取父窗体坐标要注意什么??在指定位置创建CStatic控件哪些方面要注意?
小生请大家回答,谢谢

解决方案 »

  1.   

    GetClientRect(&rect)  这个获取的应该是 相对于屏幕的坐标 
    在DataWatchDlg类中获取的坐标是对于 DataWatchDlg 的坐标 
    要区分开来 
      

  2.   

    //确定要输入台站信息的位置
    CRect CDrawProgress::DrawStationInfoRect(int drawspan)
    {
    CRect rect;
    CRect m_rect;
            GetClientRect(&rect);
    //ClientToScreen(&rect);
    CString m_td;
    m_td.Format("%d-%d-%d-%d",rect.top,rect.left,rect.right,rect.bottom);
    AfxMessageBox(m_td);
    m_rect.top=rect.top+20+(40+10)*drawspan;
    m_rect.left=rect.left+20;
    m_rect.right=rect.right-650;
            m_rect.bottom=(rect.bottom/10)+(40+10)*drawspan;
    return m_rect;
    }
    将DataWatchDlg产生的对话框指针传递给CDrawProgress中的DrawStationInfoRect函数该怎么传递?相关的函数名应该做什么样的修改?谢谢.
      

  3.   

    //确定要输入台站信息的位置
    CRect CDrawProgress::DrawStationInfoRect(int drawspan)
    {
    CRect rect;
    CRect m_rect;
            GetClientRect(&rect);
    //ClientToScreen(&rect);
    CString m_td;
    m_td.Format("%d-%d-%d-%d",rect.top,rect.left,rect.right,rect.bottom);
    AfxMessageBox(m_td);
    m_rect.top=rect.top+20+(40+10)*drawspan;
    m_rect.left=rect.left+20;
    m_rect.right=rect.right-650;
            m_rect.bottom=(rect.bottom/10)+(40+10)*drawspan;
    return m_rect;
    }
    将DataWatchDlg产生的对话框指针传递给CDrawProgress中的DrawStationInfoRect函数该怎么传递?相关的函数名应该做什么样的修改?谢谢.
      

  4.   

    获取父窗口指针并不能使用GetClientRect啊.我是用findwind来获取父窗口指针的.
      

  5.   


    // 获取父窗口指针
    CDialog *pDlg = (CDialog*)GetParent();CRect rectParent;
    // 获取父窗口客户区坐标
    pDlg->GetClientRect(&rectParent);