Professional UI Solutions
Site Map   /  Register
 
 

Forum

Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS General Discussion » CWnd and drawing frame/border Collapse All
Subject Author Date
Jonas Gauffin Oct 30, 2006 - 2:20 AM

I got a MDI without document/view. The child windows derives from CWnd directly. I’m using CExtPaintManagerOffice2007_R2_Obsidian.
The captionbar/border is drawn as window standard, I tried to use CExtNCW template, but it do not work on a CWnd directly. It complains on that UpdateTitle do not exist.

c:\Program\FOSS Software Inc\Prof-UIS\Include\ExtNcFrame.h(259): error C2039: ’OnUpdateFrameTitle’ : is not a member of ’CWnd’

Technical Support Oct 30, 2006 - 10:19 AM

Thank you for reporting the problem. To fix it, please modify the code of the CExtNCW template in ExtNcFrame.h as described below. Please find the following line

template < class _BTNCW >
and remove from this template the following code:
public:
 virtual void OnUpdateFrameTitle( BOOL bAddToTitle )
 {
  HWND hWndOwn = GetSafeHwnd();
  _BTNCW::OnUpdateFrameTitle( bAddToTitle );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
 virtual void OnUpdateFrameMenu( HMENU hMenuAlt )
 {
  HWND hWndOwn = GetSafeHwnd();
  _BTNCW::OnUpdateFrameMenu( hMenuAlt );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
Then add two new templates:
 
template < >
class CExtNCW < CFrameWnd >
 : public CFrameWnd
 , public CExtNcFrameImpl
{
public:
 CExtNCW()
 {
 }
 virtual ~CExtNCW()
 {
 }
 virtual HWND NcFrameImpl_OnQueryHWND()
 {
  return GetSafeHwnd();
 }
protected:
 virtual void PreSubclassWindow()
 {
  CFrameWnd::PreSubclassWindow();
  CExtNcFrameImpl::PreSubclassWindow();
 }
 virtual void PostNcDestroy()
 {
  CExtNcFrameImpl::PostNcDestroy();
  CFrameWnd::PostNcDestroy();
 }
 virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
 {
  if( ! NcFrameImpl_IsSupported() )
   return CFrameWnd::WindowProc( message, wParam, lParam );
  HWND hWndOwn = m_hWnd;
  LRESULT lResult = 0;
  if( NcFrameImpl_PreWindowProc( lResult, message, wParam, lParam ) )
   return lResult;
  lResult = CFrameWnd::WindowProc( message, wParam, lParam );
  if( ! ::IsWindow( hWndOwn ) )
   return lResult;
  if( CWnd::FromHandlePermanent(hWndOwn) == NULL )
   return lResult;
  NcFrameImpl_PostWindowProc( lResult, message, wParam, lParam );
  return lResult;
 } 
public:
 virtual void OnUpdateFrameTitle( BOOL bAddToTitle )
 {
  HWND hWndOwn = GetSafeHwnd();
  CFrameWnd::OnUpdateFrameTitle( bAddToTitle );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
 virtual void OnUpdateFrameMenu( HMENU hMenuAlt )
 {
  HWND hWndOwn = GetSafeHwnd();
  CFrameWnd::OnUpdateFrameMenu( hMenuAlt );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
}; // class CExtNCW
 
template < >
class CExtNCW < CMDIFrameWnd >
 : public CMDIFrameWnd
 , public CExtNcFrameImpl
{
public:
 CExtNCW()
 {
 }
 virtual ~CExtNCW()
 {
 }
 virtual HWND NcFrameImpl_OnQueryHWND()
 {
  return GetSafeHwnd();
 }
protected:
 virtual void PreSubclassWindow()
 {
  CMDIFrameWnd::PreSubclassWindow();
  CExtNcFrameImpl::PreSubclassWindow();
 }
 virtual void PostNcDestroy()
 {
  CExtNcFrameImpl::PostNcDestroy();
  CMDIFrameWnd::PostNcDestroy();
 }
 virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
 {
  if( ! NcFrameImpl_IsSupported() )
   return CMDIFrameWnd::WindowProc( message, wParam, lParam );
  HWND hWndOwn = m_hWnd;
  LRESULT lResult = 0;
  if( NcFrameImpl_PreWindowProc( lResult, message, wParam, lParam ) )
   return lResult;
  lResult = CMDIFrameWnd::WindowProc( message, wParam, lParam );
  if( ! ::IsWindow( hWndOwn ) )
   return lResult;
  if( CWnd::FromHandlePermanent(hWndOwn) == NULL )
   return lResult;
  NcFrameImpl_PostWindowProc( lResult, message, wParam, lParam );
  return lResult;
 } 
public:
 virtual void OnUpdateFrameTitle( BOOL bAddToTitle )
 {
  HWND hWndOwn = GetSafeHwnd();
  CMDIFrameWnd::OnUpdateFrameTitle( bAddToTitle );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
 virtual void OnUpdateFrameMenu( HMENU hMenuAlt )
 {
  HWND hWndOwn = GetSafeHwnd();
  CMDIFrameWnd::OnUpdateFrameMenu( hMenuAlt );
  if( hWndOwn != NULL && ::IsWindow( hWndOwn ) )
   ::SendMessage( hWndOwn, WM_NCPAINT, 0L, 0L );
 }
}; // class CExtNCW