I’m using CExtPaintManagerSkin class to implement my skin project already. So, I did not implement my skin class-derived paint manager class and I called CExtPaintManagerSkin::NcFrame_Paint() method in CMainFrame::OnPaint() in my project.
But, the caption is not changed. What’s wrong?
void CMainFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call __super::OnPaint() for painting messages
// frame
//COLORREF clr3dHilight = ::GetSysColor(COLOR_3DHILIGHT); // pPM->GetColor( COLOR_3DHILIGHT, this );
//COLORREF clr3dFace = ::GetSysColor(COLOR_3DFACE); // pPM->GetColor( COLOR_3DFACE, this );
//COLORREF clr3dShadow = ::GetSysColor(COLOR_3DSHADOW); // pPM->GetColor( COLOR_3DSHADOW, this );
//COLORREF clr3dDkShadow = ::GetSysColor(COLOR_3DDKSHADOW); // pPM->GetColor( COLOR_3DDKSHADOW, this );
COLORREF clr3dHilight = g_pclsSkin->GetColor( COLOR_3DHILIGHT, this );
COLORREF clr3dFace = g_pclsSkin->GetColor( COLOR_3DFACE, this );
COLORREF clr3dShadow = g_pclsSkin->GetColor( COLOR_3DSHADOW, this );
COLORREF clr3dDkShadow = g_pclsSkin->GetColor( COLOR_3DDKSHADOW, this );
RECT rcIcon, rcText, rcHelp, rcMinimize, rcMaximizeRestore,rcClose;
CRect rcClient;
GetClientRect( &rcClient );
CPoint ptScrollPos(
GetScrollPos( SB_HORZ ),
GetScrollPos( SB_VERT )
);
CRect rcMrg = CRect(0,0, 500, 100);// = CalcActualViewRect();
//rcMrg.OffsetRect( -ptScrollPos );
// rcClient.OffsetRect( -ptScrollPos );
//CExtMemoryDC dc(
// pDC,
// &rcClient,
// CExtMemoryDC::MDCOPT_TO_MEMORY
// |CExtMemoryDC::MDCOPT_NO_COPY_OPT
// );
//CRect rcMrg = CalcActualViewRect();
//rcMrg.OffsetRect( -ptScrollPos );
//CExtPaintManager * pPM = g_PaintManager.GetPM();
//ASSERT_VALID( pPM );
bool bNcFrameSupported = false;
INT nCaptionHeight = 23;
//g_pclsSkin is an instance of CExtPaintManagerSkin class.
if( g_pclsSkin->NcFrame_IsSupported( this ) )
{
bNcFrameSupported = true;
nCaptionHeight = g_pclsSkin->NcFrame_GetCaptionHeight( true, ::AfxGetMainWnd() ) + 4;
g_pclsSkin->NcFrame_GetRects(NULL, _T("Test"), 0, rcIcon, rcText, rcHelp, rcMinimize, rcMaximizeRestore, rcClose, ::AfxGetMainWnd(), NULL, 0);
}
CRect rcFrame( &rcMrg );
rcFrame.InflateRect( 3, nCaptionHeight, 3, 0 );
g_pclsSkin->PaintDocumentClientAreaBkgnd( dc, this );
CRect rcDesignerWindowBk = rcFrame;
rcDesignerWindowBk.OffsetRect( ptScrollPos );
CRect rcDesignerClient( rcFrame );
if( bNcFrameSupported )
{
CRect rcClientReal;
GetClientRect( &rcClientReal );
rcDesignerClient.top = rcMrg.top - 1;
HRGN hRgn = g_pclsSkin->NcFrame_GenerateSkinFrameRGN( rcFrame, ::AfxGetMainWnd() );
if( hRgn != NULL )
::SelectClipRgn( dc.m_hDC, hRgn );
if( ! g_pclsSkin->PaintDockerBkgnd( true, dc, this ) )
dc.FillSolidRect( &rcFrame, clr3dFace );
CRect rcIcon( 0, 0, 0, 0 );
//CRect rcText( 0, 0, 500, 23 );
CRect rcHelp( 0, 0, 0, 0 );
CRect rcMinimize( 0, 0, 0, 0 );
CRect rcMaximizeRestore( 0, 0, 0, 0 );
CRect rcClose( 0, 0, 0, 0 );
CExtPaintManager::e_nc_button_state_t eStateButtonHelp = CExtPaintManager::__ENCBS_NORMAL;
CExtPaintManager::e_nc_button_state_t eStateButtonMinimize = CExtPaintManager::__ENCBS_NORMAL;
CExtPaintManager::e_nc_button_state_t eStateButtonMaximizeRestore = CExtPaintManager::__ENCBS_NORMAL;
CExtPaintManager::e_nc_button_state_t eStateButtonClose = CExtPaintManager::__ENCBS_NORMAL;
g_pclsSkin->NcFrame_Paint(
dc,
NULL,
_T("Test"),
0,
rcFrame,
rcDesignerClient,
rcIcon,
rcText,
rcHelp,
rcMinimize,
rcMaximizeRestore,
rcClose,
true,
true,
false,
eStateButtonHelp,
eStateButtonMinimize,
eStateButtonMaximizeRestore,
eStateButtonClose,
::AfxGetMainWnd()
);
if( hRgn != NULL )
{
::SelectClipRgn( dc.m_hDC, NULL );
::DeleteObject( hRgn );
}
} // if( bNcFrameSupported )
}