如何個性控制對話框上的控件顯示?涉及到這方面的知識實在太多,限于個人能力,我也不能在這里非常全面的介紹了,本文主要介紹日常最常用的幾個功能:控件背景色設定、控件字體顯示、控件字色顯示、控件的亮\灰顯示。而這里的控件,也主要就介紹靜態控件、文本框控件、check控件,按鈕控件等。
眾所周知,在VC中做界面幾乎是所有工具中最艱難的一種(當然,如果是骨灰級的高手,那就變成“VC是做界面最豐富多彩的開發工具”了,我肯定離那境界還有好幾個十萬八千里!)。而VC中的界面,大多由對話框界面組成,所以包括本人在內,相信很多人都有感慨,要是VC的對話框能夠隨心所欲的定制該多好啊??在別的地方也看過一些換膚軟件,總感覺不好使,當然,看到金山、瑞星那種界面就很向往了,可惜是只可YY想一下,就我個人而言,是不太可能一個人實現的。
言歸正傳,就我個人的使用和實踐而言,在對話框中,不寫派生類的情況下,可以簡單實現一些控件的背景色、字體顯示什么的屬性,零零歲歲的裝飾一下,也可以稍微美化一下我們自己的軟件界面了。下面簡單說明一下實現過程:
對話框中所有控件,著色顯示都需要重載函數WM_CTRCOLOR,它一般生成以下的成員函數,在這個里面實現幾乎所有本文要說到的控件操作。
OnCtrColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ;
參數說明:
pDC是設備指針;
pWnd是窗口指針;
nCtlColor是控件類型;
因為對話框中的每個控件都會響應一次該函數,所以一般情況下,要對某個控件操作,就要先通過語句
if (pWnd->GetDlgCtrlID() == IDC_STATIC_TITLE)
找到該控件,或者通過語句
if (nCtlColor == CTLCOLOR_BIN | nCtlColor == CTLCOLOR_TEXT);
找到控件類。
然后再通過設定設備環境來達到改變控件顯示屬性的目的。
改變控件顯示字體,要先創建自己的特定字體,再選入設備
改變控件背景色,要先創建自己的特定畫刷,再選入設備
改變控件顯示字體的顏色,只要設置一下就可以了
1.
靜態控件
這幾乎是最簡單的了,如果想改變某個ID為ID_MY_SEL_STATIC靜態控件的背景色,只要語句
HBRUSH CViewWaveparamDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (pWnd->GetDlgCtrlID() == ID_MY_SEL_STATIC)
{
pDC->SetBkColor(RGB(0,0,255));//藍色
pDC->SetBkMode(TRANSPARENT); //調用該語句主要是為了顯示文本時,文本背景依然是藍色
return ::CreateSolidBrush(RGB(98,176,255));//返回創建的畫刷
}
return hbr;
}
如果想改變該控件的字體顏色,只需要在上面的函數if語句中加入一下語句就可以了
pDC->SetTextColor(RGB(255,255,255));//顯示字體為白色
如果要改變控件的字體,則需要在對話框的初始函數中創建一個字體,最好用成員變量;然后把該字體選入特定的控件的設備環境中
GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(m_logfont),&m_logfont);
m_logfont.lfHeight = 16;
m_logfont.lfWeight = 16;
strcpy(m_logfont.lfFaceName, "黑體");
m_logfont.lfCharSet = GB2312_CHARSET;
VERIFY(m_Textfont.CreateFontIndirect(&m_logfont));
GetDlgItem(ID_MY_SEL_STATIC)->SetFont(&m_Textfont);
2.
文本控件、check控件等基本都是這樣就可以實現了。
3.
按鈕控件
我起初也像上面這樣來做,可是就是顯示出來不是那么回事,我查了很多書籍,才發覺,原來按鈕用這個樣子是做不出來的。必須派生類,從CButton派生。然后在派生類中重載函數OnDrawItem(),只有這樣才能實現本文所述的功能。
涉及到派生,我想不是我三言兩語能說清楚的,在此只是提個思路,恕在下無力!推薦個網上比較好的以后派生類CButtonST.
其實我這篇文章很粗淺的,但是我希望能起到一個拋磚引玉的作用,有高手看到了本文,把你的見解和更好的實現方法貼上來,供不會的朋友借鑒臨摹一下。先在此感謝了!
漏了一點,就是顯示控件的亮\灰控制,補上。(不好意思,見諒見諒)
加入控制ID為ID_MY_BUTTON的顯示,
在本對話框類中實現用語句
GetDlgItem(ID_MY_BUTTON)->EnableWindow(false);
在非本對話框類中實現用語句
HWND Ctrlhwnd, dlghwnd;
GetDlgItem(IDD_BASE_DIALOG, &dlghwnd);
VERIFY(dlghwnd);
Ctrlhwnd = ::GetDlgItem(dlghwnd, ID_MY_BUTTON);
VERIFY(Ctrlhwnd);
::EnableWindow(Ctrlhwnd, true);