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 Tech Support » Office2007 themes and auto-hiding taskbar Collapse All
Subject Author Date
Petr Maar Jul 13, 2006 - 8:33 AM

Hello,
I’m using Prof-UIS 2.54 and if WindowsXP taskbar is set to auto-hide and application is maximized, then taskbar is not accessible by mouse if using any of Office2007 themes, other themes work fine. Application window covers entire screen and no thin taskbar line can be seen and so it is inaccessible... It can be seen on your samples as well.
Is it a bug or regular behavior of these themes?

Petr

Technical Support Jul 13, 2006 - 12:41 PM

We are aware of this bug. It is not possible to create correctly working skinned window frames without removing the WS_BORDER window style. If this style is present, Windows often draws the standard Window caption over the skinned non-client area. But it seems that Windows cannot work correctly with maximized windows that have no WS_BORDER. We can see only one way to fix the problem your reported: to detect if the desktop area has the size of the monitor area and then reduce the size of the maximized window by one pixel. So to fix this bug, please update the source code for the following method:

void CExtNcFrameImpl::NcFrameImpl_PostWindowProc(
    LRESULT & lResult, UINT message, WPARAM wParam, LPARAM lParam )
{
    lResult;
    wParam;
    lParam;
    switch( message )
    {
    case WM_NCLBUTTONDBLCLK:
        if( m_bNcFrameImpl_RestoreBorder )
        {
            m_bNcFrameImpl_RestoreBorder = false;
            CWnd * pWndFrameImpl = NcFrameImpl_GetFrameWindow();
            pWndFrameImpl->ModifyStyle( WS_BORDER, 0 );
        }
    break;
    case WM_WINDOWPOSCHANGING:
        {
            LPWINDOWPOS lpWindowPos = 
                reinterpret_cast < LPWINDOWPOS > (lParam);
            ASSERT( lpWindowPos != NULL );
            m_bNcFrameImpl_DelatayedFrameRecalc =
                ( ( lpWindowPos->flags & SWP_FRAMECHANGED ) == 0 )
                    ? true : false;
            NcFrameImpl_SetupRgn( (WINDOWPOS *)lParam );
        }
    break;
    case WM_WINDOWPOSCHANGED:
        m_bNcFrameImpl_DelatayedFrameRecalc = false;
    break;
    case WM_GETMINMAXINFO:
        if( NcFrameImpl_IsSupported() )
        {
            CWnd * pWndFrameImpl = (CWnd *)NcFrameImpl_GetFrameWindow();
            ASSERT_VALID( pWndFrameImpl );
            CExtPaintManager::monitor_parms_t _mp;
            CExtPaintManager::stat_GetMonitorParms( _mp, pWndFrameImpl );
            if( _mp.m_rcMonitor == _mp.m_rcWorkArea )
            {
                LPMINMAXINFO pMMI = (LPMINMAXINFO)lParam;
                if( pMMI->ptMaxPosition.x < _mp.m_rcWorkArea.left )
                    pMMI->ptMaxPosition.x = _mp.m_rcWorkArea.left;
                if( pMMI->ptMaxPosition.y < _mp.m_rcWorkArea.top )
                    pMMI->ptMaxPosition.y = _mp.m_rcWorkArea.top;
                CSize _maxSize = _mp.m_rcWorkArea.Size();
                 _maxSize.cy -= 1;
                if( pMMI->ptMaxSize.x > _maxSize.cx )
                    pMMI->ptMaxSize.x = _maxSize.cx;
                if( pMMI->ptMaxSize.y > _maxSize.cy )
                    pMMI->ptMaxSize.y = _maxSize.cy;
            }
        }
    break;
    }
}