FontComboDlg.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:7k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // FontComboDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "FontCombo.h"
  5. #include "FontComboDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CFontComboDlg dialog
  13. CFontComboDlg::CFontComboDlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CFontComboDlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CFontComboDlg)
  17. m_bBold = FALSE;
  18. m_bItalic = FALSE;
  19. m_bUnderline = FALSE;
  20. //}}AFX_DATA_INIT
  21. m_crCurrent = COLORREF_NULL;
  22. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  23. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  24. CXTRegistryManager regMgr;
  25.     m_bBold       = regMgr.GetProfileInt   (_T("Settings"), _T("m_bBold"),       TRUE        );
  26.     m_bItalic     = regMgr.GetProfileInt   (_T("Settings"), _T("m_bItalic"),     FALSE       );
  27.     m_bUnderline  = regMgr.GetProfileInt   (_T("Settings"), _T("m_bUnderline"),  FALSE       );
  28. m_strFontSize = regMgr.GetProfileString(_T("Settings"), _T("m_strFontSize"), _T("36")    );
  29. m_strFontName = regMgr.GetProfileString(_T("Settings"), _T("m_strFontName"), _T("Verdana"));
  30. m_crCurrent   = regMgr.GetProfileInt   (_T("Settings"), _T("m_crCurrent"),   CLR_DEFAULT );
  31. // Set the theme for the application.
  32. XTThemeManager()->SetTheme(xtThemeOffice2003);
  33. }
  34. CFontComboDlg::~CFontComboDlg()
  35. {
  36. CXTRegistryManager regMgr;
  37.     regMgr.WriteProfileInt   (_T("Settings"), _T("m_bBold"),       m_bBold      );
  38.     regMgr.WriteProfileInt   (_T("Settings"), _T("m_bItalic"),     m_bItalic    );
  39.     regMgr.WriteProfileInt   (_T("Settings"), _T("m_bUnderline"),  m_bUnderline );
  40. regMgr.WriteProfileString(_T("Settings"), _T("m_strFontSize"), m_strFontSize);
  41. regMgr.WriteProfileString(_T("Settings"), _T("m_strFontName"), m_strFontName);
  42. regMgr.WriteProfileInt   (_T("Settings"), _T("m_crCurrent"),   m_crCurrent  );
  43. }
  44. void CFontComboDlg::DoDataExchange(CDataExchange* pDX)
  45. {
  46. CDialog::DoDataExchange(pDX);
  47. //{{AFX_DATA_MAP(CFontComboDlg)
  48. DDX_Control(pDX, IDC_TXT_SAMPLE, m_txtSample);
  49. DDX_Control(pDX, IDC_COMBO_SIZE, m_wndComboSize);
  50. DDX_Control(pDX, IDC_COMBO_FONT, m_wndComboFont);
  51. DDX_Control(pDX, IDC_COLOR_FONT, m_wndColorPicker);
  52. DDX_Check(pDX, IDC_CHK_BOLD, m_bBold);
  53. DDX_Check(pDX, IDC_CHK_ITALIC, m_bItalic);
  54. DDX_Check(pDX, IDC_CHK_UNDERLINE, m_bUnderline);
  55. //}}AFX_DATA_MAP
  56. }
  57. BEGIN_MESSAGE_MAP(CFontComboDlg, CDialog)
  58. //{{AFX_MSG_MAP(CFontComboDlg)
  59. ON_WM_SYSCOMMAND()
  60. ON_WM_PAINT()
  61. ON_WM_QUERYDRAGICON()
  62. ON_CBN_SELENDOK(IDC_COMBO_SIZE, OnSelendokComboSize)
  63. ON_BN_CLICKED(IDC_CHK_BOLD, OnChkBold)
  64. ON_BN_CLICKED(IDC_CHK_ITALIC, OnChkItalic)
  65. ON_BN_CLICKED(IDC_CHK_UNDERLINE, OnChkUnderline)
  66. //}}AFX_MSG_MAP
  67. ON_CPN_XT_SELENDOK(IDC_COLOR_FONT, OnSelEndOKColor)
  68. ON_CBN_SELENDOK(IDC_COMBO_FONT, OnSelEndOKFontCombo)
  69. END_MESSAGE_MAP()
  70. /////////////////////////////////////////////////////////////////////////////
  71. // CFontComboDlg message handlers
  72. BOOL CFontComboDlg::OnInitDialog()
  73. {
  74. CDialog::OnInitDialog();
  75. // Add "About..." menu item to system menu.
  76. // IDM_ABOUTBOX must be in the system command range.
  77. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  78. ASSERT(IDM_ABOUTBOX < 0xF000);
  79. CMenu* pSysMenu = GetSystemMenu(FALSE);
  80. if (pSysMenu != NULL)
  81. {
  82. CString strAboutMenu;
  83. strAboutMenu.LoadString(IDS_ABOUTBOX);
  84. if (!strAboutMenu.IsEmpty())
  85. {
  86. pSysMenu->AppendMenu(MF_SEPARATOR);
  87. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  88. }
  89. }
  90. // Set the icon for this dialog.  The framework does this automatically
  91. //  when the application's main window is not a dialog
  92. SetIcon(m_hIcon, TRUE); // Set big icon
  93. SetIcon(m_hIcon, FALSE); // Set small icon
  94. // select the font and set the drop width for the combo.
  95. m_wndComboFont.InitControl(m_strFontName, 285);
  96. // insert strings into the size combo box.
  97. m_wndComboSize.AddString(_T("8"));
  98. m_wndComboSize.AddString(_T("10"));
  99. m_wndComboSize.AddString(_T("12"));
  100. m_wndComboSize.AddString(_T("14"));
  101. m_wndComboSize.AddString(_T("18"));
  102. m_wndComboSize.AddString(_T("24"));
  103. m_wndComboSize.AddString(_T("36"));
  104. // set the selection.
  105. if (m_wndComboSize.SelectString(-1, m_strFontSize) == CB_ERR)
  106. {
  107. m_wndComboSize.SetWindowText(m_strFontSize);
  108. }
  109. m_wndColorPicker.SetColor( m_crCurrent );
  110. // initialize the text sample display
  111. UpdateFont();
  112. return TRUE;  // return TRUE  unless you set the focus to a control
  113. }
  114. void CFontComboDlg::OnSysCommand(UINT nID, LPARAM lParam)
  115. {
  116. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  117. {
  118. CAboutDlg dlgAbout;
  119. dlgAbout.DoModal();
  120. }
  121. else
  122. {
  123. CDialog::OnSysCommand(nID, lParam);
  124. }
  125. }
  126. // If you add a minimize button to your dialog, you will need the code below
  127. //  to draw the icon.  For MFC applications using the document/view model,
  128. //  this is automatically done for you by the framework.
  129. void CFontComboDlg::OnPaint() 
  130. {
  131. if (IsIconic())
  132. {
  133. CPaintDC dc(this); // device context for painting
  134. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  135. // Center icon in client rectangle
  136. int cxIcon = GetSystemMetrics(SM_CXICON);
  137. int cyIcon = GetSystemMetrics(SM_CYICON);
  138. CRect rect;
  139. GetClientRect(&rect);
  140. int x = (rect.Width() - cxIcon + 1) / 2;
  141. int y = (rect.Height() - cyIcon + 1) / 2;
  142. // Draw the icon
  143. dc.DrawIcon(x, y, m_hIcon);
  144. }
  145. else
  146. {
  147. CDialog::OnPaint();
  148. }
  149. }
  150. // The system calls this to obtain the cursor to display while the user drags
  151. //  the minimized window.
  152. HCURSOR CFontComboDlg::OnQueryDragIcon()
  153. {
  154. return (HCURSOR) m_hIcon;
  155. }
  156. void CFontComboDlg::OnSelEndOKColor()
  157. {
  158. m_crCurrent = m_wndColorPicker.GetColor();
  159. m_txtSample.UpdateFont(m_lf, m_crCurrent);
  160. }
  161. void CFontComboDlg::OnSelEndOKFontCombo()
  162. {
  163. UpdateFont();
  164. }
  165. void CFontComboDlg::UpdateFont()
  166. {
  167. UpdateData();
  168. m_wndComboFont.GetSelFont(m_lf);
  169. m_strFontName = m_lf.lfFaceName;
  170. int iSel = m_wndComboSize.GetCurSel();
  171. if (iSel != CB_ERR)
  172. {
  173. m_wndComboSize.GetLBText(iSel, m_strFontSize);
  174. m_lf.lfHeight = -(_ttoi(m_strFontSize));
  175. }
  176. else
  177. {
  178. m_wndComboSize.GetWindowText(m_strFontSize);
  179. m_lf.lfHeight = -(_ttoi(m_strFontSize));
  180. }
  181. m_lf.lfWeight    = m_bBold      ? FW_BOLD : FW_NORMAL;
  182. m_lf.lfItalic    = m_bItalic    ? (BYTE)1 : (BYTE)0;
  183. m_lf.lfUnderline = m_bUnderline ? (BYTE)1 : (BYTE)0;
  184. m_txtSample.UpdateFont(m_lf, m_crCurrent);
  185. }
  186. void CFontComboDlg::OnSelendokComboSize() 
  187. {
  188. UpdateFont();
  189. }
  190. void CFontComboDlg::OnChkBold() 
  191. {
  192. UpdateFont();
  193. }
  194. void CFontComboDlg::OnChkItalic() 
  195. {
  196. UpdateFont();
  197. }
  198. void CFontComboDlg::OnChkUnderline() 
  199. {
  200. UpdateFont();
  201. }