2010.9.9

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权威剖析)
这样做的目的是,有利于父窗口控制子窗口。

 

 

你可能感兴趣的:(2010.9.9)