windows-nt/Source/XPSP1/NT/shell/themes/test/mditest/ncmetricsdlg.cpp
2020-09-26 16:20:57 +08:00

244 lines
6.7 KiB
C++

// NCMetricsDlg.cpp : implementation file
//
#include "stdafx.h"
#include "mditest.h"
#include "NCMetricsDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNCMetricsDlg dialog
CNCMetricsDlg::CNCMetricsDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNCMetricsDlg::IDD, pParent),
_fDlgInit(FALSE),
_fChanged(FALSE)
{
ZeroMemory( &_ncm, sizeof(_ncm) );
_ncm.cbSize = sizeof(_ncm);
//{{AFX_DATA_INIT(CNCMetricsDlg)
//}}AFX_DATA_INIT
}
void CNCMetricsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNCMetricsDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNCMetricsDlg, CDialog)
//{{AFX_MSG_MAP(CNCMetricsDlg)
ON_EN_CHANGE(IDC_BORDERWIDTH, OnChanged)
ON_BN_CLICKED(IDC_CAPTIONFONT, OnCaptionfont)
ON_BN_CLICKED(IDC_CAPTIONFONT2, OnSmallCaptionFont)
ON_BN_CLICKED(IDC_APPLY, OnApply)
ON_EN_CHANGE(IDC_MENUWIDTH, OnChanged)
ON_EN_CHANGE(IDC_MENUHEIGHT, OnChanged)
ON_EN_CHANGE(IDC_SCROLLBARWIDTH, OnChanged)
ON_EN_CHANGE(IDC_SCROLLBARHEIGHT, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONWIDTH, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONHEIGHT, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONWIDTH2, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONHEIGHT2, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONFONTDESCR, OnChanged)
ON_EN_CHANGE(IDC_CAPTIONFONTDESCR2, OnChanged)
ON_BN_CLICKED(IDOK, OnOk)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNCMetricsDlg message handlers
BOOL CNCMetricsDlg::OnInitDialog()
{
CDialog::OnInitDialog();
_GetSPI( TRUE, TRUE );
_fDlgInit = TRUE;
_UpdateControls();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CNCMetricsDlg::_UpdateControls()
{
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_APPLY ), _fChanged );
}
void CNCMetricsDlg::_GetSPI( BOOL fAcquire, BOOL fDlgSetValues )
{
BOOL fSpi = fAcquire ? SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &_ncm, 0 ) : TRUE;
if( fDlgSetValues )
{
SetDlgItemInt(IDC_BORDERWIDTH, _ncm.iBorderWidth );
SetDlgItemInt(IDC_SCROLLBARWIDTH, _ncm.iScrollWidth );
SetDlgItemInt(IDC_SCROLLBARHEIGHT, _ncm.iScrollHeight );
SetDlgItemInt(IDC_MENUWIDTH, _ncm.iMenuWidth );
SetDlgItemInt(IDC_MENUHEIGHT, _ncm.iMenuHeight );
SetDlgItemInt(IDC_CAPTIONWIDTH, _ncm.iCaptionWidth );
SetDlgItemInt(IDC_CAPTIONHEIGHT, _ncm.iCaptionHeight );
SetDlgItemInt(IDC_SMCAPTIONWIDTH, _ncm.iSmCaptionWidth );
SetDlgItemInt(IDC_SMCAPTIONHEIGHT, _ncm.iSmCaptionHeight );
int cyFont;
TCHAR szFontDescr[128];
HDC hdc = ::GetDC(NULL);
cyFont = -MulDiv(_ncm.lfCaptionFont.lfHeight, 72, GetDeviceCaps(hdc, LOGPIXELSY));
wsprintf( szFontDescr, TEXT("%s, %dpt"), _ncm.lfCaptionFont.lfFaceName, cyFont );
SetDlgItemText(IDC_CAPTIONFONTDESCR, szFontDescr);
cyFont = -MulDiv(_ncm.lfSmCaptionFont.lfHeight, 72, GetDeviceCaps(hdc, LOGPIXELSY));
wsprintf( szFontDescr, TEXT("%s, %dpt"), _ncm.lfSmCaptionFont.lfFaceName, cyFont );
SetDlgItemText(IDC_CAPTIONFONTDESCR2, szFontDescr);
::ReleaseDC(NULL, hdc);
_UpdateControls();
}
}
void CNCMetricsDlg::_SetSPI( BOOL fAssign, BOOL fDlgSetValues )
{
BOOL fGet = FALSE;
if( fDlgSetValues )
{
_ncm.iBorderWidth = GetDlgItemInt(IDC_BORDERWIDTH);
_ncm.iScrollWidth = GetDlgItemInt(IDC_SCROLLBARWIDTH);
_ncm.iScrollHeight = GetDlgItemInt(IDC_SCROLLBARHEIGHT);
_ncm.iMenuWidth = GetDlgItemInt(IDC_MENUWIDTH);
_ncm.iMenuHeight = GetDlgItemInt(IDC_MENUHEIGHT);
_ncm.iCaptionWidth = GetDlgItemInt(IDC_CAPTIONWIDTH);
_ncm.iCaptionHeight = GetDlgItemInt(IDC_CAPTIONHEIGHT);
_ncm.iSmCaptionWidth = GetDlgItemInt(IDC_SMCAPTIONWIDTH);
_ncm.iSmCaptionHeight = GetDlgItemInt(IDC_SMCAPTIONHEIGHT );
}
if( fAssign )
{
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, 0, &_ncm,
SPIF_SENDCHANGE | SPIF_UPDATEINIFILE );
_fChanged = FALSE;
}
}
void CNCMetricsDlg::OnChanged()
{
_fChanged = _fDlgInit;
_UpdateControls();
}
//-----------------------------------------------------------------------------------//
BOOL QueryCaptionFont( HWND hwndParent, LOGFONT* plf )
{
LOGFONT lf = *plf;
DWORD dwErr = 0;
CHOOSEFONT cf;
ZeroMemory( &cf, sizeof(cf) );
cf.lStructSize = sizeof(cf);
cf.hwndOwner = hwndParent;
cf.lpLogFont = &lf;
cf.iPointSize = 0;
cf.Flags = CF_INITTOLOGFONTSTRUCT|CF_EFFECTS|CF_FORCEFONTEXIST|CF_SCREENFONTS;
cf.lCustData;
cf.lpfnHook;
cf.lpszStyle;
cf.nFontType;
if( ChooseFont( &cf ) )
{
*plf = lf;
return TRUE;
}
else
{
dwErr = CommDlgExtendedError();
}
return FALSE;
}
//-----------------------------------------------------------------------------------//
void CNCMetricsDlg::OnCaptionfont()
{
if( QueryCaptionFont( m_hWnd, &_ncm.lfCaptionFont ) )
{
_GetSPI(FALSE, TRUE);
_fChanged = TRUE;
_UpdateControls();
}
}
//-----------------------------------------------------------------------------------//
void CNCMetricsDlg::OnSmallCaptionFont()
{
if( QueryCaptionFont( m_hWnd, &_ncm.lfSmCaptionFont ) )
{
_GetSPI(FALSE, TRUE);
_fChanged = TRUE;
_UpdateControls();
}
}
//-----------------------------------------------------------------------------------//
void CNCMetricsDlg::OnApply()
{
_SetSPI( TRUE, TRUE );
}
//-----------------------------------------------------------------------------------//
void CNCMetricsDlg::OnOk()
{
_SetSPI( TRUE, TRUE );
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CThinFrameDlg dialog
CThinFrameDlg::CThinFrameDlg(CWnd* pParent /*=NULL*/)
: CDialog(CThinFrameDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CThinFrameDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CThinFrameDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CThinFrameDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CThinFrameDlg, CDialog)
//{{AFX_MSG_MAP(CThinFrameDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CThinFrameDlg message handlers