| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /********************************************
- ** 工作室:S&P工作室
- ** 作者 :张东斌
- ** 日期 :2007年6月
- *********************************************/
- #include "stdafx.h"
- #include "SPVC80Helpers.h"
- #include "SPDrawHelpers.h"
- #include "SPPropertyGridInplaceEdit.h"
- #include "SPPropertyGridInplaceButton.h"
- #include "SPPropertyGridInplaceList.h"
- #include "SPPropertyGridItem.h"
- #include "SPPropertyGridItemFont.h"
- #include "SPPropertyGrid.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CSPPropertyGridItemFont
- IMPLEMENT_DYNAMIC( CSPPropertyGridItemFont , CSPPropertyGridItem )
- CSPPropertyGridItemFont::CSPPropertyGridItemFont( CString strCaption , LOGFONT & font ) : CSPPropertyGridItem( strCaption )
- {
- SetFont( font );
- m_nFlags = SPGridItemHasExpandButton;
- m_clrValue = ( COLORREF ) - 1;
- EnableAutomation();
- }
- CSPPropertyGridItemFont::CSPPropertyGridItemFont( UINT nID , LOGFONT & font ) : CSPPropertyGridItem( nID )
- {
- SetFont( font );
- m_nFlags = SPGridItemHasExpandButton;
- m_clrValue = ( COLORREF ) - 1;
- EnableAutomation();
- }
- CSPPropertyGridItemFont::~CSPPropertyGridItemFont()
- {
- }
- /////////////////////////////////////////////////////////////////////////////
- //
- void CSPPropertyGridItemFont::SetFont( LOGFONT & font )
- {
- MEMCPY_S( &m_lfValue,&font,sizeof( LOGFONT ) );
- CWindowDC dc ( CWnd::GetDesktopWindow() );
- int nHeight = -MulDiv( m_lfValue.lfHeight,72,dc.GetDeviceCaps( LOGPIXELSY ) );
- m_strValue.Format( _T( "%s; %ipt" ),m_lfValue.lfFaceName,nHeight );
- }
- BOOL CSPPropertyGridItemFont::OnDrawItemValue( CDC & dc , CRect rcValue )
- {
- if ( m_clrValue == ( COLORREF ) - 1 )
- {
- return CSPPropertyGridItem::OnDrawItemValue( dc,rcValue );
- }
- COLORREF clr = dc.GetTextColor();
- CRect rcSample ( rcValue.left - 2,rcValue.top + 1,rcValue.left + 18,rcValue.bottom - 1 );
- CSPPenDC pen ( dc,clr );
- CSPBrushDC brush ( dc,m_clrValue );
- dc.Rectangle( rcSample );
- CRect rcText ( rcValue );
- rcText.left += 25;
- dc.DrawText( m_strValue,rcText,DT_SINGLELINE | DT_VCENTER );
- return TRUE;
- }
- CRect CSPPropertyGridItemFont::GetValueRect()
- {
- CRect rcValue ( CSPPropertyGridItem::GetValueRect() );
- if ( m_clrValue != ( COLORREF ) - 1 )
- {
- rcValue.left += 25;
- }
- return rcValue;
- }
- UINT CALLBACK CSPPropertyGridItemFont::FontDlgProc( HWND hWnd , UINT message , WPARAM wParam , LPARAM lParam )
- {
- if ( message == WM_INITDIALOG )
- {
- HWND hWndCombo = GetDlgItem( hWnd,1139 );
- if ( hWndCombo )
- EnableWindow( hWndCombo,FALSE );
- //return (UINT)AfxDlgProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- void CSPPropertyGridItemFont::OnInplaceButtonDown()
- {
- CFontDialog dlg ( &m_lfValue,CF_EFFECTS | CF_SCREENFONTS,NULL,m_pGrid );
- if ( m_clrValue == ( COLORREF ) - 1 )
- {
- dlg.m_cf.lpfnHook = FontDlgProc;
- }
- else
- {
- dlg.m_cf.rgbColors = m_clrValue;
- }
- if ( dlg.DoModal() == IDOK )
- {
- LOGFONT lf;
- dlg.GetCurrentFont( &lf );
- SetFont( lf );
- if ( m_clrValue != ( COLORREF ) - 1 )
- m_clrValue = dlg.GetColor();
- OnValueChanged( m_strValue );
- m_pGrid->Invalidate( FALSE );
- }
- }
- void CSPPropertyGridItemFont::SetColor( COLORREF clr )
- {
- m_clrValue = clr;
- if ( m_pGrid && m_pGrid->GetSafeHwnd() )
- {
- m_pGrid->Invalidate( FALSE );
- }
- }
- COLORREF CSPPropertyGridItemFont::GetColor()
- {
- return m_clrValue;
- }
- void CSPPropertyGridItemFont::GetFont( LOGFONT * lf )
- {
- ASSERT( lf != NULL );
- MEMCPY_S( lf,&m_lfValue,sizeof( LOGFONT ) );
- }
|