1. 程式人生 > >MFC學習之 對話方塊設定背景顏色及控制元件透明的方法

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