晚上編一個小程序,涉及到如何設置對話框的背景顏色和靜態文本顏色。這在VC6.0中本來是一句話就搞定的事。在應用程序類中的InitInstance()函數添加:
//設置對話框背景和文本顏色
SetDialogBkColor(RGB(160,180,220),RGB(0,0,0));
誰知這在VS 2005上竟不起作用,到網上一查,原來SetDialogBkColor函數在VS 2003中就已經不支持了。只得另辟蹊徑。另外的辦法就是響應WM_CTLCOLOR消息,在消息映射函數中添加:
- HBRUSH CFileSpltDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
- {
- HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
- // TODO: 在此更改DC 的任何屬性
- // TODO: 如果默認的不是所需畫筆,則返回另一個畫筆
- // Determine if drawing a dialog box . If we are , return +handle to
- //our own background brush . Otherwise let windows //handle it .
- switch(nCtlColor)
- {
- case CTLCOLOR_STATIC: //對所有靜態文本控件的設置
- {
- //設置背景為透明
- pDC->SetBkMode(TRANSPARENT);
- pDC->SetTextColor(RGB(0,0,0)); //設置字體顏色
- break;
- }
- case CTLCOLOR_DLG:
- {
- return (HBRUSH) m_brush .GetSafeHandle();
- break;
- }
- default:
- break;
- }
- return hbr;
- }
照這樣,除了靜態文本可以控制,還有按鈕、文本編輯框可以控制其背景顏色,
因為我看到有下列的宏:
- #define CTLCOLOR_MSGBOX 0
- #define CTLCOLOR_EDIT 1
- #define CTLCOLOR_LISTBOX 2
- #define CTLCOLOR_BTN 3
- #define CTLCOLOR_DLG 4
- #define CTLCOLOR_SCROLLBAR 5
- #define CTLCOLOR_STATIC 6
- #define CTLCOLOR_MAX 7