如何更改CPropertySheet的背景色
生活随笔
收集整理的這篇文章主要介紹了
如何更改CPropertySheet的背景色
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何更改CPropertySheet的背景色? 當然這里指的是包括改CPropertyPage和標簽的背景顏色.
(1)改CPropertyPage的背景色: 1)創建一個CPropertyPage的子類: class COwnerDrawPropPage : public CPropertyPage; 2)處理它的WM_ERASEBKGND 和 WM_CTLCOLOR消息: BOOL COwnerDrawPropPage::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? CBrush brush; ? brush.CreateSolidBrush(BACKCOLOR_BLUE); ? pDC->FillRect( &rectClient,& brush); ? return TRUE; ? //return CPropertyPage::OnEraseBkgnd(pDC); }
HBRUSH COwnerDrawPropPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { ? // ? ?HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); ? // ? ?return hbr;
? pDC->SetBkColor(BACKCOLOR_BLUE); ? pDC->SetBkMode(TRANSPARENT); ? HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE); ? return hbrushBack; ? ? ? } ? ? 3)把所有屬性頁的父類都改為COwnerDrawPropPage.這樣就改了屬性頁的顏色.
(2)改CPropertySheet的背景色, 這里包括兩方面: 客戶區的顏色, 標簽的顏色. 1)改客戶區的顏色跟改屬性頁的一樣:
HBRUSH CMyPropertySheet::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { // ? ?HBRUSH hbr = CPropertySheet::OnCtlColor(pDC, pWnd, nCtlColor); // ? ?return hbr; ? pDC->SetBkColor(BACKCOLOR_BLUE); ? pDC->SetBkMode(TRANSPARENT); ? HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE); ? return hbrushBack; ? ? } BOOL CMyPropertySheet::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? CBrush brush; ? brush.CreateSolidBrush(BACKCOLOR_BLUE); ? pDC->FillRect( &rectClient,& brush); ? return TRUE; ? //return CPropertySheet::OnEraseBkgnd(pDC); }
2)改標簽的就有一定難度了. 先從CTabCtrl派生一個COwnerDrawTabCtrl, 處理其WM_ERASEBKGND消息. 然后再實現其DrawItem方法,注意不是WM_DRAWITEM!! 而是 void?DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) .
BOOL COwnerDrawTabCtrl::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? pDC->FillRect( &rectClient,& m_brushBK); ? return TRUE; ? //return CTabCtrl::OnEraseBkgnd(pDC); } void COwnerDrawTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
? TCHAR szTabText[64]={0};
? TC_ITEM ? ? tci; ? tci.mask ? ? ? ?= TCIF_TEXT; ? tci.pszText ? ? = szTabText; ? tci.cchTextMax ?= sizeof(szTabText)-1;
? GetItem( lpDrawItemStruct->itemID,& tci); ? CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); ? ? ? pDC->FillRect(& lpDrawItemStruct->rcItem,& m_brushBK); ? pDC->SetBkColor( BACKCOLOR_BLUE);
? if ((lpDrawItemStruct->itemState & ODS_SELECTED)&& ? ? ? ? (lpDrawItemStruct->itemAction& (ODA_SELECT | ODA_DRAWENTIRE))) ? { ? ? ? //Make the color of text of the selected tab to be BLUE. ? ? ? pDC->SetTextColor(RGB( 17, 139, 1)); ? } ? //! 文字的位置可能的偏移 ? pDC->TextOut(lpDrawItemStruct->rcItem.left+4, ? ? ? lpDrawItemStruct->rcItem.top+4, ? ? ? tci.pszText, ? ? ? lstrlen(tci.pszText)); ? ?? } 現在, 萬里長征就已經完成了一大截了,最后一步是為CMyPropertySheet?加入一個? COwnerDrawTabCtrl 成員變量, 然后在OnInitDialog() 加入子類化代碼:
BOOL CMyPropertySheet::OnInitDialog()? { ? BOOL bResult = CPropertySheet::OnInitDialog(); ? //! 省略原有代碼
? //! Jasmine 2011-11-08 ? m_tabOwnerDraw.SubclassWindow( GetTabControl()->m_hWnd); ? m_tabOwnerDraw.ModifyStyle(0,TCS_OWNERDRAWFIXED); ? return bResult; } 這樣就把用CPropertySheet和CPropertyPage實現的屬性框的背景顏色改好.? Have a good time!
(1)改CPropertyPage的背景色: 1)創建一個CPropertyPage的子類: class COwnerDrawPropPage : public CPropertyPage; 2)處理它的WM_ERASEBKGND 和 WM_CTLCOLOR消息: BOOL COwnerDrawPropPage::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? CBrush brush; ? brush.CreateSolidBrush(BACKCOLOR_BLUE); ? pDC->FillRect( &rectClient,& brush); ? return TRUE; ? //return CPropertyPage::OnEraseBkgnd(pDC); }
HBRUSH COwnerDrawPropPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { ? // ? ?HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor); ? // ? ?return hbr;
? pDC->SetBkColor(BACKCOLOR_BLUE); ? pDC->SetBkMode(TRANSPARENT); ? HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE); ? return hbrushBack; ? ? ? } ? ? 3)把所有屬性頁的父類都改為COwnerDrawPropPage.這樣就改了屬性頁的顏色.
(2)改CPropertySheet的背景色, 這里包括兩方面: 客戶區的顏色, 標簽的顏色. 1)改客戶區的顏色跟改屬性頁的一樣:
HBRUSH CMyPropertySheet::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { // ? ?HBRUSH hbr = CPropertySheet::OnCtlColor(pDC, pWnd, nCtlColor); // ? ?return hbr; ? pDC->SetBkColor(BACKCOLOR_BLUE); ? pDC->SetBkMode(TRANSPARENT); ? HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE); ? return hbrushBack; ? ? } BOOL CMyPropertySheet::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? CBrush brush; ? brush.CreateSolidBrush(BACKCOLOR_BLUE); ? pDC->FillRect( &rectClient,& brush); ? return TRUE; ? //return CPropertySheet::OnEraseBkgnd(pDC); }
2)改標簽的就有一定難度了. 先從CTabCtrl派生一個COwnerDrawTabCtrl, 處理其WM_ERASEBKGND消息. 然后再實現其DrawItem方法,注意不是WM_DRAWITEM!! 而是 void?DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) .
BOOL COwnerDrawTabCtrl::OnEraseBkgnd(CDC* pDC) { ? CRect rectClient(0,0,0,0); ? GetClientRect(&rectClient); ? pDC->FillRect( &rectClient,& m_brushBK); ? return TRUE; ? //return CTabCtrl::OnEraseBkgnd(pDC); } void COwnerDrawTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) {
? TCHAR szTabText[64]={0};
? TC_ITEM ? ? tci; ? tci.mask ? ? ? ?= TCIF_TEXT; ? tci.pszText ? ? = szTabText; ? tci.cchTextMax ?= sizeof(szTabText)-1;
? GetItem( lpDrawItemStruct->itemID,& tci); ? CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); ? ? ? pDC->FillRect(& lpDrawItemStruct->rcItem,& m_brushBK); ? pDC->SetBkColor( BACKCOLOR_BLUE);
? if ((lpDrawItemStruct->itemState & ODS_SELECTED)&& ? ? ? ? (lpDrawItemStruct->itemAction& (ODA_SELECT | ODA_DRAWENTIRE))) ? { ? ? ? //Make the color of text of the selected tab to be BLUE. ? ? ? pDC->SetTextColor(RGB( 17, 139, 1)); ? } ? //! 文字的位置可能的偏移 ? pDC->TextOut(lpDrawItemStruct->rcItem.left+4, ? ? ? lpDrawItemStruct->rcItem.top+4, ? ? ? tci.pszText, ? ? ? lstrlen(tci.pszText)); ? ?? } 現在, 萬里長征就已經完成了一大截了,最后一步是為CMyPropertySheet?加入一個? COwnerDrawTabCtrl 成員變量, 然后在OnInitDialog() 加入子類化代碼:
BOOL CMyPropertySheet::OnInitDialog()? { ? BOOL bResult = CPropertySheet::OnInitDialog(); ? //! 省略原有代碼
? //! Jasmine 2011-11-08 ? m_tabOwnerDraw.SubclassWindow( GetTabControl()->m_hWnd); ? m_tabOwnerDraw.ModifyStyle(0,TCS_OWNERDRAWFIXED); ? return bResult; } 這樣就把用CPropertySheet和CPropertyPage實現的屬性框的背景顏色改好.? Have a good time!
總結
以上是生活随笔為你收集整理的如何更改CPropertySheet的背景色的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android获取未知字符串,andro
- 下一篇: EndDialog和CDialog::O