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

对话框与窗口

开发平台:

Visual C++

  1. // XTFontCombo.h interface for the CXTFontCombo class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTFONTCOMBO_H__)
  22. #define __XTFONTCOMBO_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. // ----------------------------------------------------------------------
  28. // Summary:
  29. //     List used for enumerating CXTLogFont structures.
  30. // Remarks:
  31. //     CList definition used by the CXTFontEnum class to maintain
  32. //     a list of CXTLogFont objects representing each font displayed
  33. //     for a CXTFontListBox control.
  34. // See Also:
  35. //     CXTFontEnum::GetFontList
  36. // ----------------------------------------------------------------------
  37. typedef CList<CXTLogFont, CXTLogFont&> CXTFontList;
  38. //===========================================================================
  39. // Summary:
  40. //     CXTFontEnum is a stand alone singleton font enumeration class. It is
  41. //     used to enumerate a list of fonts found installed for the operating
  42. //     system.
  43. // Remarks:
  44. //     CXTFontEnum is a singleton class, which means it can only be
  45. //     instantiated a single time. The constructor is private, so the only
  46. //     way to access members of this class is to use the objects Get() method.
  47. //     To retrieve a list of available fonts for your operating system, you
  48. //     would make the following call:
  49. //
  50. // Example:
  51. //     The following example demonstrates the use of the CXTFontEnum class.
  52. // <code>
  53. // CXTFontEnum::Get().GetFontList()
  54. // </code>
  55. //===========================================================================
  56. class _XTP_EXT_CLASS CXTFontEnum
  57. {
  58. protected:
  59. //-----------------------------------------------------------------------
  60. // Summary:
  61. //     Constructs a CXTFontEnum object. CXTFontEnum is a singleton
  62. //     class, to instantiate an object, use the static method Get().
  63. //-----------------------------------------------------------------------
  64. CXTFontEnum();
  65. public:
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Destroys a CXTFontEnum object, handles cleanup and deallocation
  69. //-----------------------------------------------------------------------
  70. virtual ~CXTFontEnum();
  71. public:
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     This static member function will return a reference to the one
  75. //     and only CXTFontEnum object. You can use this function to access
  76. //     data members for the CXTFontEnum class.
  77. // Example:
  78. //     The following example demonstrates the use of Get.
  79. // <code>
  80. // CXTFontEnum::Get().GetFontList()
  81. // </code>
  82. // Returns:
  83. //     A reference to a CXTFontEnum object.
  84. //-----------------------------------------------------------------------
  85. static CXTFontEnum& AFX_CDECL Get();
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     This member function is used to determine the existence of the font
  89. //     specified by 'strFaceName'.
  90. // Parameters:
  91. //     strFaceName - Reference to a NULL terminated string that represents
  92. //                   the font name.
  93. // Returns:
  94. //     true if the font exists, otherwise returns false.
  95. //-----------------------------------------------------------------------
  96. bool DoesFontExist(CString& strFaceName);
  97. //-----------------------------------------------------------------------
  98. // Summary:
  99. //     This member function is used to get a pointer to the font specified
  100. //     by 'strFaceName'.
  101. // Parameters:
  102. //     strFaceName - A NULL terminated string that represents the font
  103. //                   name.
  104. // Returns:
  105. //     A pointer to the CXTLogFont structure for the specified item,
  106. //     or NULL if no font was found.
  107. //-----------------------------------------------------------------------
  108. CXTLogFont* GetLogFont(const CString& strFaceName);
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     This member function is used by the callback function to retrieve the
  112. //     current width for the longest font name in the list.
  113. // Returns:
  114. //     An integer value that represents the width for the longest font
  115. //     in the list.
  116. //-----------------------------------------------------------------------
  117. int GetMaxWidth();
  118. //-----------------------------------------------------------------------
  119. // Summary:
  120. //     This member function is used to get a reference to the font list.
  121. // Returns:
  122. //     A reference to the CXTFontList used by this class.
  123. //-----------------------------------------------------------------------
  124. CXTFontList& GetFontList();
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //     This member function is called by the CXTFontEnum class to initialize
  128. //     the font list. You can also call this member function to reinitialize
  129. //     the font enumeration. For example, if you changed printers and you want
  130. //     to enumerate printer fonts, or you wanted to use a different character
  131. //     set.
  132. // Parameters:
  133. //     pDC      - Points to a valid device context, if NULL, the screen
  134. //                device context is used.
  135. //     nCharSet - Represents the character set to enumerate.
  136. //-----------------------------------------------------------------------
  137. void Init(CDC* pDC = NULL, BYTE nCharSet = DEFAULT_CHARSET);
  138. protected:
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     The EnumFontFamExProc function is an application defined-callback
  142. //     function used with the EnumFontFamiliesEx function. It is used to process
  143. //     the fonts and is called once for each enumerated font. The FONTENUMPROC
  144. //     type defines a pointer to this callback function. EnumFontFamExProc
  145. //     is a placeholder for the application defined-function name.
  146. // Parameters:
  147. //     pelf       - Pointer to an ENUMLOGFONTEX structure that contains
  148. //                  information about the logical attributes of the font.
  149. //     lpntm      - Pointer to a structure that contains information
  150. //                  about the physical attributes of a font. The function
  151. //                  uses the NEWTEXTMETRICEX structure for TrueType fonts;
  152. //                  and the TEXTMETRIC structure for other fonts.
  153. //     dwFontType - Specifies the type of the font. This parameter can be a combination
  154. //              of the values in the Remarks section.
  155. //     lParam - Specifies the application-defined data passed by the EnumFontFamiliesEx
  156. //     function.
  157. // Remarks:
  158. //     Styles to be added or removed can be combined by using the bitwise
  159. //     OR (|) operator. It can be one or more of the following:<p/>
  160. //          * <b>DEVICE_FONTTYPE</b> The font is a device font.
  161. //          * <b>RASTER_FONTTYPE</b> The font is a raster font.
  162. //          * <b>TRUETYPE_FONTTYPE</b> The font is a TrueType font.
  163. // Returns:
  164. //     The return value must be a nonzero value to continue enumeration.
  165. //     To stop enumeration, the return value must be zero.
  166. //-----------------------------------------------------------------------
  167. static BOOL CALLBACK EnumFontFamExProc(ENUMLOGFONTEX* pelf, NEWTEXTMETRICEX* lpntm, DWORD dwFontType, LPARAM lParam);
  168. //-----------------------------------------------------------------------
  169. // Summary:
  170. //     This member function is called by the font enumeration callback to
  171. //     add a font to the font list.
  172. // Parameters:
  173. //     pLF    - Points to a valid LOGFONT structure.
  174. //     dwType - Specifies the type of the font. This parameter can be a combination
  175. //              of the values in the Remarks section.
  176. // Remarks:
  177. //     Styles to be added or removed can be combined by using the bitwise
  178. //     OR (|) operator. It can be one or more of the following:<p/>
  179. //          * <b>DEVICE_FONTTYPE</b> The font is a device font.
  180. //          * <b>RASTER_FONTTYPE</b> The font is a raster font.
  181. //          * <b>TRUETYPE_FONTTYPE</b> The font is a TrueType font.
  182. // Returns:
  183. //     true if successful, otherwise returns false.
  184. //-----------------------------------------------------------------------
  185. bool AddFont(const LOGFONT* pLF, DWORD dwType);
  186. protected:
  187. CXTFontList m_listFonts; // List of fonts found during enumeration
  188. };
  189. //////////////////////////////////////////////////////////////////////
  190. AFX_INLINE CXTFontList& CXTFontEnum::GetFontList() {
  191. return m_listFonts;
  192. }
  193. // -------------------------------------------------------------------
  194. // Summary:
  195. //     Enumeration used to determine font display.
  196. // Remarks:
  197. //     XTFontStyle type defines the constants used by the CXTFontListBox
  198. //     class to determine how the fonts will be displayed in the CXTFontListBox
  199. //     control.
  200. // See Also:
  201. //     CXTFontListBox, CXTFontListBox::SetListStyle
  202. //
  203. // <KEYWORDS xtFontGUI, xtFontSample, xtFontBoth>
  204. // -------------------------------------------------------------------
  205. enum XTFontStyle
  206. {
  207. xtFontUnknown   = 0x00, // Display type not defined.
  208. xtFontGUI       = 0x01, // Display font name with GUI font style.
  209. xtFontSample    = 0x02, // Display font name with its own font style.
  210. xtFontBoth      = 0x03, // Display font name with GUI font style, then a sample display to the right.
  211. };
  212. //===========================================================================
  213. // Summary:
  214. //     CXTFontListBox is a CXTListBox derived class. It is used to create
  215. //     a font selection list box.
  216. // Remarks:
  217. //     You can choose to display the font name
  218. //     with the GUI font style, display the font name with its own font style,
  219. //     or display the font name with the default GUI font style and a sample
  220. //     display to the right.
  221. //===========================================================================
  222. class _XTP_EXT_CLASS CXTFontListBox : public CXTListBox
  223. {
  224. public:
  225. //-----------------------------------------------------------------------
  226. // Summary:
  227. //     Constructs a CXTFontListBox object
  228. //-----------------------------------------------------------------------
  229. CXTFontListBox();
  230. //-----------------------------------------------------------------------
  231. // Summary:
  232. //     Destroys a CXTFontListBox object, handles cleanup and deallocation
  233. //-----------------------------------------------------------------------
  234. virtual ~CXTFontListBox();
  235. public:
  236. // ------------------------------------------------------------------------
  237. // Summary:
  238. //     Call this member function to get the font for the currently selected
  239. //     item.
  240. // Parameters:
  241. //     lf -           Reference to an CXTLogFont structure.
  242. //     strFaceName -  A reference to a valid CString object to receive the
  243. //                    logfont face name.
  244. // Returns:
  245. //     true if successful, otherwise returns false.
  246. // ------------------------------------------------------------------------
  247. virtual bool GetSelFont(CXTLogFont& lf);
  248. virtual bool GetSelFont(CString& strFaceName); //<combine CXTFontListBox::GetSelFont@CXTLogFont&>
  249. // -------------------------------------------------------------------
  250. // Summary:
  251. //     Call this member function to select the font for the list box.
  252. // Parameters:
  253. //     lf -           Reference to an CXTLogFont structure.
  254. //     strFaceName -  A NULL terminated string that represents the logfont
  255. //                    face name.
  256. // Returns:
  257. //     true if successful, otherwise returns false.
  258. // -------------------------------------------------------------------
  259. virtual bool SetSelFont(CXTLogFont& lf);
  260. virtual bool SetSelFont(const CString& strFaceName); //<combine CXTFontListBox::SetSelFont@CXTLogFont&>
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     Call this member function to set the font display style for the font
  264. //     list box. There are three styles to choose from that include displaying
  265. //     the font in the default GUI font, displaying the font in its own font
  266. //     style, or displaying both the font name in the default GUI font and
  267. //     a sample to the right.
  268. // Parameters:
  269. //     dwStyle - Specifies the style for the font list box. See XTFontStyle for
  270. //               a list of available styles.
  271. // See Also: XTFontStyle
  272. //-----------------------------------------------------------------------
  273. void SetListStyle(DWORD dwStyle);
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     Call this member function to initialize the font list box and populate it
  277. //     with a list of available fonts.  This method should be called directly
  278. //     after creating or sub-classing the control.
  279. // Parameters:
  280. //     bAutoFont - True to enable automatic font initialization.
  281. //-----------------------------------------------------------------------
  282. virtual void Initialize(bool bAutoFont = true);
  283. protected:
  284. //{{AFX_CODEJOCK_PRIVATE
  285. DECLARE_MESSAGE_MAP()
  286. //{{AFX_VIRTUAL(CXTFontListBox)
  287. virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
  288. virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
  289. virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
  290. //}}AFX_VIRTUAL
  291. //{{AFX_MSG(CXTFontListBox)
  292. //}}AFX_MSG
  293. //}}AFX_CODEJOCK_PRIVATE
  294. protected:
  295. DWORD       m_dwStyle;     // Display style indicating how to render the font list.
  296. CString     m_csSymbol;    // String displayed for the symbol characters.
  297. CImageList  m_ilFontType;  // True type font image list.
  298. };
  299. //////////////////////////////////////////////////////////////////////
  300. AFX_INLINE void CXTFontListBox::SetListStyle(DWORD dwStyle) {
  301. m_dwStyle = dwStyle;
  302. }
  303. //===========================================================================
  304. // Summary:
  305. //     CXTFontCombo is a CXTFlatComboBox derived class. It is used to create
  306. //     a combo box that displays a drop list of available fonts for your system.
  307. //     The fonts are displayed in their various styles.
  308. //===========================================================================
  309. class _XTP_EXT_CLASS CXTFontCombo : public CXTFlatComboBox
  310. {
  311. DECLARE_DYNAMIC(CXTFontCombo)
  312. public:
  313. //-----------------------------------------------------------------------
  314. // Summary:
  315. //     Constructs a CXTFontCombo object
  316. //-----------------------------------------------------------------------
  317. CXTFontCombo();
  318. //-----------------------------------------------------------------------
  319. // Summary:
  320. //     Destroys a CXTFontCombo object, handles cleanup and deallocation
  321. //-----------------------------------------------------------------------
  322. virtual ~CXTFontCombo();
  323. public:
  324. // -------------------------------------------------------------------
  325. // Summary:
  326. //     Retrieves the selected font.
  327. // Parameters:
  328. //     lf -           Reference to an CXTLogFont structure.
  329. //     strFaceName -  A reference to a valid CString object to receive the
  330. //                    logfont face name.
  331. // Remarks:
  332. //     The first version of GetSelFont will retrieve the selected font
  333. //     name. The second version will get the CXTLogFont for the currently
  334. //     selected item.
  335. // Returns:
  336. //     true if successful, otherwise returns false.
  337. // -------------------------------------------------------------------
  338. virtual bool GetSelFont(CXTLogFont& lf);
  339. virtual bool GetSelFont(CString& strFaceName); //<combine CXTFontCombo::GetSelFont@CXTLogFont&>
  340. // ----------------------------------------------------------------------
  341. // Summary:
  342. //     Sets the selected font.
  343. // Parameters:
  344. //     lf -           Reference to an CXTLogFont object.
  345. //     strFaceName -  A NULL terminated string that represents the logfont
  346. //                    face name.
  347. // Remarks:
  348. //     The first version of SetSelFont will set the selected font by
  349. //     using its face name. The second version will set the selected font
  350. //     by using a CXTLogFont object.
  351. // Returns:
  352. //     true if successful, otherwise returns false.
  353. // ----------------------------------------------------------------------
  354. virtual bool SetSelFont(CXTLogFont& lf);
  355. virtual bool SetSelFont(const CString& strFaceName); //<combine CXTFontCombo::SetSelFont@CXTLogFont&>
  356. // --------------------------------------------------------------------------
  357. // Summary:
  358. //     Sets the font style for the CXTFontCombo control.
  359. // Parameters:
  360. //     dwStyle - Specifies the style for the font list box. Styles can be any
  361. //               one of the values in the Remarks section.
  362. // Remarks:
  363. //     Call this member function to set the font display style for the
  364. //     font list box. There are three styles to choose from that include
  365. //     displaying the font in the default GUI font, displaying the font
  366. //     in its own font style, or displaying both the font name in the
  367. //     default GUI font and a sample to the right.
  368. //
  369. //     The style can be any of the following values:
  370. //
  371. //     * <b>xtFontGUI</b> Display font name with GUI font style.
  372. //     * <b>xtFontSample</b> Display font name with its own font style.
  373. //     * <b>xtFontBoth</b> Display font name with GUI font style,
  374. //           then a sample display to the right.
  375. // --------------------------------------------------------------------------
  376. void SetListStyle(DWORD dwStyle);
  377. // ------------------------------------------------------------------------
  378. // Summary:
  379. //     Initializes the CXTFontCombo control.
  380. // Parameters:
  381. //     lpszFaceName -  A NULL terminated string that represents the logfont
  382. //                     face name.
  383. // nWidth -        The minimum allowable width of the list box portion of
  384. //                     the combo box in pixels.
  385. // bEnable -       TRUE to enable auto completion, otherwise FALSE.
  386. // Remarks:
  387. //     Call this member function to initialize the font list box and
  388. //     populate it with a list of available fonts.
  389. // ------------------------------------------------------------------------
  390. virtual void InitControl(LPCTSTR lpszFaceName = NULL, UINT nWidth = 0, BOOL bEnable = TRUE);
  391. protected:
  392. // ------------------------------------------------------------------------
  393. // Summary:
  394. //      Called by the font combo box to send CBN notifications to the owner
  395. //      window to support keyboard navigation.
  396. // Parameters:
  397. //      nCode - CBN notification message to send.
  398. // ------------------------------------------------------------------------
  399. virtual void NotifyOwner(UINT nCode);
  400. //{{AFX_CODEJOCK_PRIVATE
  401. DECLARE_MESSAGE_MAP()
  402. //{{AFX_VIRTUAL(CXTFontCombo)
  403. virtual void DrawItem(LPDRAWITEMSTRUCT);
  404. virtual void MeasureItem(LPMEASUREITEMSTRUCT);
  405. virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
  406. virtual BOOL PreTranslateMessage(MSG* pMsg);
  407. //}}AFX_VIRTUAL
  408. //{{AFX_MSG(CXTFontCombo)
  409. afx_msg BOOL OnDropDown();
  410. //}}AFX_MSG
  411. //}}AFX_CODEJOCK_PRIVATE
  412. //{{AFX_CODEJOCK_PRIVATE
  413. public:
  414. #ifdef _DEBUG
  415. virtual void AssertValid() const;
  416. #endif
  417. //}}AFX_CODEJOCK_PRIVATE
  418. protected:
  419. DWORD       m_dwStyle;      // Enumerated style indicating how to display the font list.
  420. CString     m_csSymbol;     // String displayed for symbol characters.
  421. CImageList  m_ilFontType;   // true type font image list.
  422. private:
  423. CString     m_csSelected;   // Selected text set when CBN_DROPDOWN is called.
  424. };
  425. //////////////////////////////////////////////////////////////////////
  426. AFX_INLINE void CXTFontCombo::SetListStyle(DWORD dwStyle) {
  427. m_dwStyle = dwStyle;
  428. }
  429. #endif // #if !defined(__XTFONTCOMBO_H__)