Ejemplo n.º 1
0
long lPutWindowPlacement(LPCTSTR lpScreenName, WINDOWPLACEMENT *pwp)
{
  TCHAR szBuffer[1000];
  lstrcpy(szBuffer, oszScreenRegistry);
  lstrcat(szBuffer, lpScreenName);
  return RegSetValueExRecursive(HKEY_CURRENT_USER, szBuffer, 0,
								REG_BINARY, (CONST BYTE*) pwp,
								(DWORD) sizeof(*pwp));
}
Ejemplo n.º 2
0
long lPutWindowPlacement(const char *oszScreenName, WINDOWPLACEMENT *pwp)
{
  TCHAR szBuffer[1000];
  vMyStrCpy(szBuffer, oszScreenRegistry);
  vMyStrCpy(szBuffer + strlen(oszScreenRegistry), oszScreenName);
  return RegSetValueExRecursive(HKEY_CURRENT_USER, szBuffer, 0,
								REG_BINARY, (CONST BYTE*) pwp,
								(DWORD) sizeof(*pwp));
}
Ejemplo n.º 3
0
BOOL ResizeDlg::OnWndMsg(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *res )
//    Actual window procedure that will handle saving window size/position and moving
//    the controls whilst the window sizes.
{
    if(dd == NULL) {
        return CDialog::OnWndMsg(msg, wParam, lParam, res);
    }
    switch( msg ) {
    case WM_ERASEBKGND:
    {
        BOOL r = CDialog::OnWndMsg(msg, wParam, lParam, res);
        DialogData *pdd = (DialogData*)dd;
        if( pdd && pdd->m_bShowSizingGrip && !pdd->m_bMaximised ) {
            VAPI( ::DrawFrameControl( reinterpret_cast<HDC>( wParam ),
                                      pdd->m_rcGrip,
                                      DFC_SCROLL, DFCS_SCROLLSIZEGRIP ) );
        }
        return r;
    }
    case WM_SIZE:
    {
        DialogData *pdd = (DialogData*)dd;
        if( pdd && wParam != SIZE_MINIMIZED ) {
            pdd->m_bMaximised = ( wParam == SIZE_MAXIMIZED ? true : false );
            UpdateWindowSize( LOWORD( lParam ), HIWORD( lParam ), *this);
        }
    }
    break;
    case WM_NCHITTEST:
    {
        //
        //        If the gripper is enabled then perform a simple hit test on our gripper area.
        DialogData *pdd = (DialogData*)dd;
        if( pdd && pdd->m_bShowSizingGrip ) {
            POINT pt = { LOWORD(lParam), HIWORD(lParam) };
            (void)ScreenToClient( &pt );
            if( PtInRect( pdd->m_rcGrip, pt ) )
                return (BOOL)HTBOTTOMRIGHT;
        }
    }
    break;
    case WM_GETMINMAXINFO:
    {
        //
        //        Our opportunity to say that we do not want the dialog to grow or shrink any more.
        DialogData *pdd = (DialogData*)dd;
        LPMINMAXINFO lpmmi = reinterpret_cast<LPMINMAXINFO>( lParam );
        lpmmi->ptMinTrackSize = pdd->m_ptSmallest;
        if( pdd->m_bLargestSet ) {
            lpmmi->ptMaxTrackSize = pdd->m_ptLargest;
        }
    }
    return (BOOL)0;
    case WM_NOTIFY:
    {
        if( reinterpret_cast<LPNMHDR>(lParam)->code == PSN_SETACTIVE ) {
            CRect rc;
            VAPI( ::GetClientRect( *GetParent( ), &rc ) );
            UpdateWindowSize( rc.Width(), rc.Height(), *GetParent( ) );
        }
    }
    break;
    case WM_DESTROY:
    {
        //
        //        Our opportunty for cleanup.
        //        Simply acquire all of our objects, free the appropriate memory and remove the
        //        properties from the window. If we do not remove the properties then they will constitute
        //        a resource leak.
        DialogData *pdd = (DialogData*)dd;
        if( pdd ) {
            RegistryData rd;
            rd.m_wpl.length = sizeof( rd.m_wpl );
            VAPI( GetWindowPlacement( &rd.m_wpl ) );

            if( pdd->hkRootSave && pdd->pcszName ) {
                (void)RegSetValueExRecursive( pdd->hkRootSave, pdd->pcszName,
                                              NULL, REG_BINARY,
                                              reinterpret_cast<LPBYTE>( &rd ),
                                              sizeof( rd ) );
            }

            if( pdd->psd ) {
                free(pdd->psd);
            }
            free(pdd);
        }

    }
    break;
    }
    return CDialog::OnWndMsg(msg, wParam, lParam, res);
}