MFC學習之 對話方塊設定背景顏色及控制元件透明的方法
對話方塊設定背景色之後控制元件不透明的問題。
1.對話方塊設定背景色:
方法1:(用OnPaint())
在Dlg.h中:宣告 afx_msg void OnPaint();
HICON m_hIcon;
在Dlg中:在BEGIN_MESSAGE_MAP下:ON_WM_PAINT()
然後:void CHeaderDlg::OnPaint()
{
if (IsIconic())
{
...
}
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect, RGB(179, 181, 193)); //背景色就在這裡~
CDialog::OnPaint();
}
}
方法2:(WM_CTLCOLOR)
在XXDlg.標頭檔案的protected:中加入CBrush m_brush;
在XXDlg.cpp檔案中的OnInitDialog()初始化函式中加入畫刷m_brush.CreateSolidBrush(RGB(255,255,255));RGB中的顏色自己定義。
然後在類嚮導中新增WM_CTLCOLOR訊息函式。在裡面只寫一句話:return m_brush;
背景顏色就改了。
2.關於控制元件透明:
在上面方法2的基礎之上,在OnCtlColor 里加一句:pDC->SetBkMode(TRANSPARENT); //透明背景!
PS:或者
if(nCtlColor == CTLCOLOR_BTN)
{
pDC->SetTextColor(RGB(0, 0, 0));
pDC->SetBkColor(RGB(200, 200, 200));
buttonColor = CreateSolidBrush(RGB(200, 200, 200)); //背景顏色
return buttonColor;
}
else
{
pDC->SetBkMode(TRANSPARENT);
return m_brush;
}
就行了~ 標頭檔案中宣告 HBRUSH buttonColor;
一些引數:
#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
其中:comobox = edit + list