很多人都覺得自己的程序的界面不那么美觀, 往往VC默認(rèn)產(chǎn)生的對話框比較單調(diào), 因此很多人往往找到很多其它的控件對對話框進(jìn)行美化修飾, 例如給靜態(tài)控件設(shè)置字體, 設(shè)置背景顏色等等, 其實(shí)這些完全可以由VC自己的WM_CTLCOLOR消息來完成!
WM_CTLCOLOR消息用來完成對EDIT, STATIC, BUTTON等控件設(shè)置背景和字體顏色, 其用法如下:
1.首先在自己需要設(shè)置界面的對話框上點(diǎn)擊右鍵-->建立類向?qū)?->加入WM_CTLCOLOR消息-->自動生成OnCtlColor()函數(shù), 此函數(shù)可以對本對話框的控件的界面外觀做修飾, 用法如下:
將類向?qū)Мa(chǎn)生的函數(shù)做如下修改:
HBRUSH CDialogColor::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
??? HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
??? // TODO: Change any attributes of the DC here
??? // 設(shè)置顯示字體
??? CFont * cFont=new CFont;
??? cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0,
??????????????? ANSI_CHARSET,OUT_DEFAULT_PRECIS,
??????????????? CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
??????????????? DEFAULT_PITCH&FF_SWISS,"Arial");
??? // 對特定的控件做修改
??? switch()
??? {
??????? case CTLCOLOR_STATIC: //對所有靜態(tài)文本控件的設(shè)置
??????? {
??????????? pDC->SetBkMode(TRANSPARENT);
??????????? //設(shè)置背景為透明
??????????? pDC->SetTextColor(RGB(255,255,0)); //設(shè)置字體顏色
??????????? pWnd->SetFont(cFont); //設(shè)置字體
??????????? HBRUSH B = CreateSolidBrush(RGB(125,125,255));
??????????? //創(chuàng)建畫刷
??????????? return (HBRUSH) B; //返回畫刷句柄
??????? }
??????? case CTLCOLOR_EDIT: //對所有編輯框的設(shè)置
??????? {
??????????? pDC->SetBkMode(TRANSPARENT);
??????????? pDC->SetTextColor(RGB(255,255,0));
??????????? pWnd->SetFont(cFont);
??????????? HBRUSH B = CreateSolidBrush(RGB(125,125,255));
??????????? return (HBRUSH) B;
??????? }
??????? default:
??????????? return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);
??? }
}
注:case的類別有以下幾種:
CTLCOLOR_BTN 按鈕控件
CTLCOLOR_DLG 對話框
CTLCOLOR_EDIT 編輯框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滾動條
CTLCOLOR_STATIC 靜態(tài)文本
2.你可能覺得對所有的控件使用統(tǒng)一的界面設(shè)置覺得不自由, 其實(shí)VC同樣可以對特定的ID的控件進(jìn)行設(shè)置, 方法如下:
switch (pWnd->GetDlgCtrlID())
{
??? //針對ID為IDC_CTL1, IDC_CTL2和IDC_CTL3的控件進(jìn)行同樣的設(shè)置
??? case IDC_CTL1:
??? case IDC_CTL2:
??? case IDC_CTL3:
??? {
??????? pDC->SetBkMode(TRANSPARENT);
??????? pDC->SetTextColor(RGB(255,255, 0));
??????? pWnd->SetFont(cFont);
??????? HBRUSH B = CreateSolidBrush(RGB(125,125,255));
??????? return (HBRUSH) B;
??? }
??? default:
??????? return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
posted on 2006-06-24 22:30
Jerry Cat 閱讀(656)
評論(0) 編輯 收藏 引用