1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: src/msw/fontdlg.cpp 3 // Purpose: wxFontDialog class 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 01/02/97 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 // ============================================================================ 12 // declarations 13 // ============================================================================ 14 15 // ---------------------------------------------------------------------------- 16 // headers 17 // ---------------------------------------------------------------------------- 18 19 // For compilers that support precompilation, includes "wx.h". 20 #include "wx/wxprec.h" 21 22 #ifdef __BORLANDC__ 23 #pragma hdrstop 24 #endif 25 26 #if wxUSE_FONTDLG 27 28 #include "wx/fontdlg.h" 29 #include "wx/modalhook.h" 30 31 #ifndef WX_PRECOMP 32 #include "wx/msw/wrapcdlg.h" 33 #include "wx/utils.h" 34 #include "wx/dialog.h" 35 #include "wx/log.h" 36 #include "wx/math.h" 37 #endif 38 39 #include <stdlib.h> 40 #include <string.h> 41 42 // ---------------------------------------------------------------------------- 43 // wxWin macros 44 // ---------------------------------------------------------------------------- 45 IMPLEMENT_DYNAMIC_CLASS(wxFontDialog,wxDialog)46IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog) 47 48 // ============================================================================ 49 // implementation 50 // ============================================================================ 51 52 // ---------------------------------------------------------------------------- 53 // wxFontDialog 54 // ---------------------------------------------------------------------------- 55 56 int wxFontDialog::ShowModal() 57 { 58 WX_HOOK_MODAL_DIALOG(); 59 60 // It should be OK to always use GDI simulations 61 DWORD flags = CF_SCREENFONTS /* | CF_NOSIMULATIONS */ ; 62 63 LOGFONT logFont; 64 65 CHOOSEFONT chooseFontStruct; 66 wxZeroMemory(chooseFontStruct); 67 68 chooseFontStruct.lStructSize = sizeof(CHOOSEFONT); 69 if ( m_parent ) 70 chooseFontStruct.hwndOwner = GetHwndOf(m_parent); 71 chooseFontStruct.lpLogFont = &logFont; 72 73 if ( m_fontData.m_initialFont.IsOk() ) 74 { 75 flags |= CF_INITTOLOGFONTSTRUCT; 76 wxFillLogFont(&logFont, &m_fontData.m_initialFont); 77 } 78 79 if ( m_fontData.m_fontColour.IsOk() ) 80 { 81 chooseFontStruct.rgbColors = wxColourToRGB(m_fontData.m_fontColour); 82 } 83 84 // CF_ANSIONLY flag is obsolete for Win32 85 if ( !m_fontData.GetAllowSymbols() ) 86 { 87 flags |= CF_SELECTSCRIPT; 88 logFont.lfCharSet = ANSI_CHARSET; 89 } 90 91 if ( m_fontData.GetEnableEffects() ) 92 flags |= CF_EFFECTS; 93 if ( m_fontData.GetShowHelp() ) 94 flags |= CF_SHOWHELP; 95 96 if ( m_fontData.m_minSize != 0 || m_fontData.m_maxSize != 0 ) 97 { 98 chooseFontStruct.nSizeMin = m_fontData.m_minSize; 99 chooseFontStruct.nSizeMax = m_fontData.m_maxSize; 100 flags |= CF_LIMITSIZE; 101 } 102 103 chooseFontStruct.Flags = flags; 104 105 if ( ChooseFont(&chooseFontStruct) != 0 ) 106 { 107 wxRGBToColour(m_fontData.m_fontColour, chooseFontStruct.rgbColors); 108 m_fontData.m_chosenFont = wxCreateFontFromLogFont(&logFont); 109 m_fontData.EncodingInfo().facename = logFont.lfFaceName; 110 m_fontData.EncodingInfo().charset = logFont.lfCharSet; 111 112 return wxID_OK; 113 } 114 else 115 { 116 DWORD dwErr = CommDlgExtendedError(); 117 if ( dwErr != 0 ) 118 { 119 wxLogError(_("Common dialog failed with error code %0lx."), dwErr); 120 } 121 //else: it was just cancelled 122 123 return wxID_CANCEL; 124 } 125 } 126 127 #endif // wxUSE_FONTDLG 128