2014-08-28 36 views
2

我想在窗口周圍繪製矩形,但我不想覆蓋標題欄。 我在窗口回調函數到目前爲止寫的是:如何在不覆蓋win32標題欄的情況下在窗口周圍繪製矩形

case WM_NCPAINT: 
    { 
     HDC hdc; 
     RECT rect; 
     HPEN pen; 

     hdc=GetDCEx(hWnd,(HRGN)wParam,DCX_WINDOW|DCX_CACHE|DCX_INTERSECTRGN|DCX_LOCKWINDOWUPDATE); 
     GetWindowRect(hWnd,&rect); 
     pen=CreatePen(PS_SOLID, 10, RGB(255, 0, 0));//red pen 10 pixels in size 
     SelectObject(hdc,pen); 
     Rectangle(hdc,0,0,(rect.right-rect.left),(rect.bottom-rect.top)); 
     DeleteObject(pen); 
     ReleaseDC(hWnd,hdc); 
    } 
    break; 

但是,由此得出了用白色畫筆窗口標題欄。

我該如何讓它不要在標題欄上畫?創建筆如下之前,我失去了標題欄文字和菜單...

我一直在使用HOLLOW_BRUSH嘗試:

 HBRUSH b=CreateSolidBrush(HOLLOW_BRUSH); 
     SelectObject(hdc,b); 

但只造成根本不能繪製的標題欄(黑色)。

回答

5

通過處理WM_NCPAINT消息,您告訴窗口管理器您將負責繪製整個非客戶區域,因此窗口管理器不會爲您繪製任何消息。

如果您想要繪製原始標題欄,那麼您需要先撥打DefWindowProc(),然後在繪製它的「頂部」上繪製自己的繪圖。

如果您希望用一個矩形一次繪製整個非客戶區,您可能還需要使用ExcludeClipRect()來防止客戶區被拖出。

相關問題