MFC對話方塊如何使用工具欄並修改工具欄的背景顏色與自繪對話方塊統一(二)
阿新 • • 發佈:2019-01-07
寫這篇文章只是為了解決我上一篇文章遺留的一個問題,本來覺得這個問題可以不用管,但是在我寫的程式中發現並不能置之不理,先來重現這個問題
工具欄有一部分沒有繪上
看紅色框包圍的地方,是背後 VS2010 的介面,因為程式擦成透明的啦,上一篇文章我錯誤的想成那塊沒有繪上上的區域是屬於對話方塊的,也就有了我上一篇文章在 OnEaserBkgnd 和 OnPaint 畫背景之分(對於我的程式)不多說這些,看我工具欄類中是怎樣貼背景的
BOOL CToolBarEx::OnEraseBkgnd(CDC* pDC) { // TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值 // 填充工具欄的背景色 CRect rectClient; GetClientRect(rectClient); pDC->FillSolidRect(rectClient, RGB(242,247,249)); return TRUE; //return CToolBar::OnEraseBkgnd(pDC); }
要解決這個問題的時候,我想偏很多地方,我分別過載 OnNcPaint 和 OnPaint ,大家也可以試試看有什麼效果,這裡說下 OnNcPaint 是隻畫和上面空白區域對應的左上方,自己新增試試就明白了,後來不行,想到GetClinetRect換成GetWindowRect(這肯定是胡亂猜的啦,也肯定不行),上面不行,反而讓我想起了去看rectClient的值是什麼,為什麼那部分不繪,工具欄是MoveWindow出來的,大小是自己設定的,我看除錯的不對應,少了一小塊,我就按我自己定的大小給他填充。
pDC->FillSolidRect(CRect(CPoint(0, 0), CSize(612, 45))/*rectClient*/, RGB(242,247,249));
這樣就好了,這裡再來推翻一下上一篇文章中我的想法,空白區域怎麼可能會是對話方塊上的呢,MoveWindow指定了劃出這塊區域給工具欄,出了問題應該首先想到工具欄呀。
說到了,這裡,上一篇文章裡的原始碼,稍微修改一下就可以重現我這篇文章所談的問題,讓對話方塊這樣畫背景
pDC->FillSolidRect(rectClient, RGB(0,0,0));
是不是這下明顯多了,明顯用GetClientRect取的少些什麼。到此要說的就完了,算是對上一篇博文的補充吧