[求助]关于MFC函数Get****Rect的问题
发表于:
2009-4-14 18:57
8122
[求助]关于MFC函数Get****Rect的问题
MFC里CWnd类有这样两个函数:
void GetWindowRect(
LPRECT lpRect
) const;
和
void GetClientRect(
LPRECT lpRect
) const;
在下初学MFC,被这两个函数给搞得头昏脑胀,希望各位高人能帮助在下解答以下几处疑惑,不胜感激!
1、对函数GetWindowRect,MSDN里的解释是:
The dimensions are given in screen coordinates relative to the upper-left corner of the display screen . The dimensions of the caption, border, and scroll bars, if present, are included.
这个display screen指的是上一层窗口么?比方说,我在一个对话框里放了CEdit控件myeidt,
那么myedit.GetWindowRect(&rect);所得的rect是不是就是myedit相对于对话框左上角的位置?那么如果我调用对话框的的GetWindowRect函数,this->GetWindowRect(&rect),返回的rect是不是应该是相对于屏幕左上角的位置,但我曾用MessageBox输出过,发现如果调用对话框的GetWindowRect,那么返回的CRect的left和top都是0,这岂不是与MSDN的描述矛盾啊?
2、如果我想获取一个Group Box控件的位置大小矩形,目的是为了用CBrush画图形,使之正好在Group Box中间并匹配Group Box的大小,用如下代码:
typedef struct _MY_ELLIPSE {
CRect rect;
CBrush brush;
} MY_ELLIPSE;
MY_ELLIPSE MyEllipse;
CStatic GroupBox;//已与一个Group Box控件关联
BOOL CBrushDlgDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect TempRect;
this->GroupBox.GetWindowRect(&TempRect);
MyEllipse.rect=CRect(TempRect.left,TempRect.top,TempRect.right,TempRect.bottom);
this->MyEllipse[0].brush.CreateSolidBrush(RGB(0,0,255));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CBrushDlgDlg::OnPaint()
{
if (IsIconic())
{
……
}
else
{
CClientDC cdc(this);
CBrush* pOldBrush=NULL;
pOldBrush=cdc.SelectObject(&this->MyEllipse.brush);
cdc.Ellipse(&this->MyEllipse.rect);
cdc.SelectObject(pOldBrush);
CDialog::OnPaint();
}
}
但是编译运行后,图形画出来明显偏右下,并且大小也过大,这个GetWindowRect返回的矩形为什么与Group Box一点也不匹配呢?
3、各位都是怎么完成类似2中的目的的呢,简单概括地说,就是有两个个控件,希望第二个控件的位置能
动态 地由第一个控件决定。我也不知道“动态”这个词用得是否准确,就是不能在资源窗口组合好,而要在运行时放好。
希望能有高人解惑,再次拜谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)