1、如果在程序启动时,调整主框架、View大小,显示合适大小?
可以计算view 中边缘控件的位置,然后在其基础上,加上适当大小,做为主框架的大小。
CRect rect;
this->GetWindowRect(rect);
//GetParentFrame()->MoveWindow(rect,TRUE);
CRect rect2;
m_btn_Update.GetWindowRect(rect2); // m_btn_Update即边缘控件,即要显示的最下边
控件
CRect rect3;
GetParentFrame()->GetWindowRect(rect3);
rect3.bottom=rect2.bottom+40; //在最下面的基础上,再加40,40是边框。
GetParentFrame()->MoveWindow(rect3);
四个重要函数:
GetWindowRect(&rect) //获得窗口坐标(相对于屏幕左上角)
GetClientRect(&rect) //获得客户区坐标 (对于button、Edit来说,客户区坐标=窗口坐标)
ScreenToClient() //屏幕坐标转换成客户区坐标
ClientToScreen() //客户区坐标转换成屏幕坐标
2、2010.9.8遇到的画背景颜色的问题已经解决,因为返回的是空画刷,所以出现了问题。
如下:
HBRUSH CPnrNavCtrlView::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
{
HBRUSH m_wndbkBrush;
m_wndbkBrush=CreateSolidBrush(m_crBackground);
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);//设置与背景色相同
pDC->SetBkColor(m_crBackground);//设置指定颜色
return m_wndbkBrush;
//return(HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷,避免重画背景
}
}
OnCtlColor函数是客户区重绘时,子窗口(即子控件)向父窗口发送VM_CTLCOLOR消息,触发的
。目的是让父窗口给自己准备画刷,以便绘图。(MFC权威剖析)
这样做的目的是,有利于父窗口控制子窗口。