日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何更改CPropertySheet的背景色

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何更改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!

總結

以上是生活随笔為你收集整理的如何更改CPropertySheet的背景色的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。