question on OnNcPaint
hi,
I am trying to paint the border around the main frame black. This is
my current code
void CMainFrame::OnNcPaint()
{
MSG &msg = AfxGetThreadState()->m_lastSentMsg;
HRGN hRgn = (HRGN)msg.wParam;
CRect rcWin; // window rect
GetWindowRect(&rcWin);
rcWin.OffsetRect(-rcWin.left, -rcWin.top);
CWindowDC dcWin(this);
CBrush brFrame(RGB(0,0,0));
CRect finalRect;
CRect clntRect;
m_Client.GetWindowRect(clntRect);
ScreenToClient(clntRect);
CRect dockRect;
m_Dock->GetWindowRect(dockRect);
ScreenToClient(dockRect);
::UnionRect(finalRect,clntRect,dockRect);
CRect toolRect;
m_wndToolBar.GetWindowRect(toolRect);
ScreenToClient(toolRect);
::UnionRect(finalRect,finalRect,toolRect);
CRect statusRect;
m_wndStatusBar.GetWindowRect(statusRect);
ScreenToClient(statusRect);
::UnionRect(finalRect,finalRect,statusRect);
HRGN hRgnTest2 = ::CreateRectRgnIndirect(finalRect);
// window minus the client area
HRGN hRgnNew = ::CreateRectRgnIndirect(&rcWin);
HRGN hRgnAll = ::CreateRectRgnIndirect(&rcWin);
if (msg.wParam > 1)
{
WPARAM savewp = msg.wParam;
msg.wParam = (WPARAM)NULL;
CombineRgn(hRgnNew, (HRGN)msg.wParam, hRgnTest2, RGN_DIFF);
msg.wParam = (WPARAM)hRgnNew;
CMDIFrameWnd::OnNcPaint();
msg.wParam = savewp;
}
else
{
CombineRgn(hRgnNew, hRgnAll, hRgnTest2, RGN_DIFF);
::FillRgn(dcWin.m_hDC,hRgnNew,(HBRUSH)brFrame);
}
DeleteObject(hRgnAll);
DeleteObject(hRgnNew);
DeleteObject(hRgnTest2);
}
only the bottom and the right portion is getting painted black. The
caption and left side retains the window color.
any suggestions?
Regards
Mihir