1. 程式人生 > >1.4 MFC控制元件設定

1.4 MFC控制元件設定

1.設定控制元件字型顏色、背景透明

1.開啟對應對話方塊的類嚮導ClassWizard。

2.在訊息對映MessageMaps中新增訊息Message:WM_CTLCOLOR。

3.然後程式程式碼中會新增進函式:

OnCtlColor(CDC*pDC, CWnd* pWnd, UINT nCtlColor)

4.在這個函式中新增if語句,其中的條件表示式改成想要設定的控制元件;

比如改成: if (pWnd->GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID() == IDC_STATIC2)

注意,控制元件ID最好改過,如果多個控制元件使用同個預設ID,函式則不識別。

5.在if中新增以下語句:
pDC->SetTextColor(RGB(255,255,255)); //設定字型為白色

pDC->SetBkMode(TRANSPARENT);         //設定背景為透明

整個函式的程式碼如下:

HBRUSHCHall::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
 if (pWnd-> GetDlgCtrlID() == IDC_STATIC1 || pWnd-> GetDlgCtrlID()== IDC_STATIC2 || pWnd-> GetDlgCtrlID() == IDC_STATIC3)
 {
  pDC->SetBkMode(TRANSPARENT);   //設定背景透明
  pDC->SetTextColor(RGB(255,255,255));
  return   HBRUSH(GetStockObject(HOLLOW_BRUSH));
 }
 return hbr;
}

2.控制元件位置、大小設定

         /*****控制元件位置*****/

         CRect       rect;

         GetClientRect(rect);                           //獲取對話方塊大小

         CWnd       *pWnd;

         pWnd = GetDlgItem(IDC_STATIC_FONT1);

         pWnd -> SetWindowPos(NULL,rect.Width()/2-95,

                   rect.Height()/2-60,190,36,SWP_NOZORDER );

SetWindowPos()函式使用更靈活,多用於只修改控制元件位置而大小不變或只修改大小而位置不變的情況:
BOOL SetWindowPos(const CWnd*pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);
第一個引數一般設為NULL;
x、y控制元件位置;cx、cy控制元件寬度和高度;
nFlags常用取值:
SWP_NOZORDER:忽略第一個引數;
SWP_NOMOVE:忽略x、y,維持位置不變;
SWP_NOSIZE:忽略cx、cy,維持大小不變;