GetWindowRect
在网上下载了几个美化对话框的实例代码:基本的思路都差不多,都是从DefWindowProc开始,然后在里面调用一个函数用于自绘对话框的边框,代码如下:
LRESULT CTitleBarDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam);
if (!::IsWindow(m_hWnd))
return lrst;
if(message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message ==WM_NCACTIVATE ||message == WM_NOTIFY)
{
CDC* pWinDC = GetWindowDC();
if (pWinDC)
DrawTitleBar(pWinDC);
ReleaseDC(pWinDC);
}
return lrst;
}
void CTitleBarDlg::DrawTitleBar(CDC *pDC)
{
if (m_hWnd)
{
CBrush Brush(RGB(0,100,255));
CBrush* pOldBrush = pDC->SelectObject(&Brush);
CRect rtWnd, rtTitle, rtButtons;
GetWindowRect(&rtWnd); //得到的到底是什么尺寸?
我的问题是GetWindowRect(&rtWnd); 得到的矩形很怪 top=0,bott0m=352,left=0,right=554;
GetWindowRect函数功能:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。
既然该尺寸以相对于屏幕坐标左上角的屏幕坐标给出的,那么屏幕的左上角坐标为0,0;对话框又不是在屏幕的左上角0,0的位置出现,为什么top=0,left=0,?这个想不明白?GetWindowRect(&rtWnd)得到的到底是什么?
另外,我要是为对话框添加一个按钮,在按钮的点击响应函数中加入GetWindowRect(&rtWnd),它的值为
top=207,bott0m=532,left=269,right=755;这个值看上去比较正常;两次的值不一样,我的解释是通过CTitleBarDlg::DefWindowProc函数调用DrawTitleBar(CDC *pDC)函数时对话框还没有创建,所以在DrawTitleBar中GetWindowRect(&rtWnd)的值很怪!要是这种想法成立的话,那么在DrawTitleBar中用GetWindowRect(&rtWnd)得到值代表的是什么,这个值有什么意义?