fontlist.cpp
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.6
  3. ** Copyright (C) 2003, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** Bitmap Font Builder
  7. */
  8. #include "fontlist.h"
  9. CFontList::CFontList()
  10. {
  11. nFonts=0;
  12. pFonts=0;
  13. }
  14. CFontList::~CFontList()
  15. {
  16. ClearList();
  17. }
  18. void CFontList::BuildList()
  19. {
  20. HDC hdc = CreateCompatibleDC(0);
  21. LOGFONT lf;
  22. lf.lfCharSet=DEFAULT_CHARSET;
  23. lf.lfFaceName[0]='';
  24. lf.lfPitchAndFamily=0;
  25.     EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)EnumFontFamExProc, (LPARAM)this, 0);
  26. DeleteDC(hdc);
  27. }
  28. void CFontList::ClearList()
  29. {
  30. CFontListItem *pItem=pFonts, *pNext;
  31. while(pItem)
  32. {
  33. pNext=pItem->next;
  34. delete pItem;
  35. pItem=pNext;
  36. }
  37. nFonts=0;
  38. }
  39. char *CFontList::GetFontByIdx(int n)
  40. {
  41. int i;
  42. CFontListItem *pItem=pFonts;
  43. if(n<0 || n>=GetNumFonts()) return 0;
  44. for(i=0;i<n;i++) pItem=pItem->next;
  45. return pItem->family;
  46. }
  47. void CFontList::FindSortAdd(char *family)
  48. {
  49. int cmp;
  50. CFontListItem *pItem=pFonts, *pPrev=0, *pNew;
  51. while(pItem)
  52. {
  53. cmp=strcmp(pItem->family, family);
  54. if(!cmp) return;
  55. if(cmp>0)
  56. {
  57. pNew = new CFontListItem;
  58. strcpy(pNew->family, family);
  59. pNew->next=pItem;
  60. if(pPrev) pPrev->next=pNew;
  61. else pFonts=pNew;
  62. nFonts++;
  63. return;
  64. }
  65. pPrev=pItem;
  66. pItem=pItem->next;
  67. }
  68. pNew = new CFontListItem;
  69. strcpy(pNew->family, family);
  70. pNew->next=pItem;
  71. if(pPrev) pPrev->next=pNew;
  72. else pFonts=pNew;
  73. nFonts++;
  74. }
  75. int CALLBACK EnumFontFamExProc(
  76.   ENUMLOGFONTEX *lpelfe,    // logical-font data
  77.   NEWTEXTMETRICEX *lpntme,  // physical-font data
  78.   DWORD FontType,           // type of font
  79.   LPARAM lParam             // application-defined data
  80. )
  81. {
  82. ((CFontList *)lParam)->FindSortAdd(lpelfe->elfLogFont.lfFaceName);
  83. return 1;
  84. }