pglokprv.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 7k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _INC_PGLOKPRV_H
  2. #define _INC_PGLOKPRV_H
  3. #include "pgbase.h"
  4. class CLookPreviewPg : public WizardPage
  5. {
  6. public:
  7.     CLookPreviewPg(LPPROPSHEETPAGE ppsp, int dwPageId, int nIdTitle, int nIdSubTitle, int nIdValueString);
  8.     ~CLookPreviewPg(VOID);
  9. protected: // Virtual functions
  10. // Override this if the values are not stored in a string table
  11. virtual void LoadValueArray();
  12. // This must be overridden so that the dialog knows what item to select as the default
  13. virtual int GetCurrentValue(NONCLIENTMETRICS *pncm) = 0;
  14. // If the dialog is using a list box, the user MUST override this function
  15. virtual void GetValueItemText(int nIndex, LPTSTR lpszBuffer, int nLen) {_ASSERTE(FALSE);}
  16. // Must be overridden to set ncm to appropriate values based on Value array index
  17. virtual void ModifyMyNonClientMetrics(NONCLIENTMETRICS &ncm) = 0;
  18. protected:
  19. enum UITYPE {UIBUTTONS, UILISTBOX, UISLIDER};
  20. void UpdatePreview(int nActionCtl);
  21. void OnVHScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos);
  22. int m_nIdValueString;
  23. UITYPE m_UIType;
  24. HWND m_hwndSlider;
  25. HWND m_hwndListBox;
  26. int m_nCountValues;
  27. int m_rgnValues[MAX_DISTINCT_VALUES];
  28. int m_nCurValueIndex;
  29. void ResetColors();
  30. void UpdateControls();
  31. LRESULT OnInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam);
  32. LRESULT OnCommand(HWND hwnd, WPARAM wParam, LPARAM lParam);
  33. LRESULT HandleMsg(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  34. LRESULT OnPSN_WizNext(HWND hwnd, INT idCtl, LPPSHNOTIFY pnmh);
  35. private:
  36. };
  37. /////////////////////////////////////////////////////////////
  38. // Min Legible text size TYPE 1, 2 & 3
  39. class CLookPreviewMinTextPg : public CLookPreviewPg
  40. {
  41. public:
  42. CLookPreviewMinTextPg(LPPROPSHEETPAGE ppsp, int dwPageId)
  43. : CLookPreviewPg( ppsp,
  44. dwPageId,
  45. IDS_LKPREV_MINTEXTTITLE,
  46. IDS_LKPREV_MINTEXTSUBTITLE,
  47. IDS_LKPREV_MINTEXTSIZES) {};
  48. virtual int GetCurrentValue(NONCLIENTMETRICS *pncm)
  49. {
  50. // Use active window caption
  51. return MulDiv(abs(pncm->lfCaptionFont.lfHeight), 72, g_Options.m_nLogPixelsY);
  52. };
  53. virtual void ModifyMyNonClientMetrics(NONCLIENTMETRICS &ncm)
  54. {
  55. ncm.lfCaptionFont.lfHeight = -MulDiv(m_rgnValues[m_nCurValueIndex], g_Options.m_nLogPixelsY, 72);
  56. ncm.lfMenuFont.lfHeight = -MulDiv(m_rgnValues[m_nCurValueIndex], g_Options.m_nLogPixelsY, 72);
  57. ncm.lfCaptionFont.lfWeight = FW_BOLD; // Caption is BOLD
  58. HFONT hFont = CreateFontIndirect(&ncm.lfCaptionFont);
  59. ncm.lfMenuFont.lfWeight = FW_NORMAL; // Still need lf for ICON
  60. TEXTMETRIC tm;
  61. HDC hdc = GetDC(m_hwnd);
  62. HFONT hfontOld = (HFONT)SelectObject(hdc, hFont);
  63. GetTextMetrics(hdc, &tm);
  64. if (hfontOld)
  65. SelectObject(hdc, hfontOld);
  66. ReleaseDC(m_hwnd, hdc);
  67. int cyBorder = GetSystemMetrics(SM_CYBORDER);
  68. int nSize = abs(ncm.lfCaptionFont.lfHeight) + abs(tm.tmExternalLeading) + 2 * cyBorder;
  69. nSize = max(nSize, GetSystemMetrics(SM_CYICON)/2 + 2 * cyBorder);
  70. ncm.iCaptionWidth = nSize;
  71. ncm.iCaptionHeight = nSize;
  72. ncm.iSmCaptionWidth = nSize;
  73. ncm.iSmCaptionHeight = nSize;
  74. ncm.iMenuWidth = nSize;
  75. ncm.iMenuHeight = nSize;
  76. }
  77. };
  78. class CLookPreviewMinText1Pg : public CLookPreviewMinTextPg
  79. {
  80. public:
  81. CLookPreviewMinText1Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewMinTextPg( ppsp, IDD_PREV_MINTEXT1) {};
  82. };
  83. class CLookPreviewMinText2Pg : public CLookPreviewMinTextPg
  84. {
  85. public:
  86. CLookPreviewMinText2Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewMinTextPg( ppsp, IDD_PREV_MINTEXT2) {};
  87. };
  88. class CLookPreviewMinText3Pg : public CLookPreviewMinTextPg
  89. {
  90. public:
  91. CLookPreviewMinText3Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewMinTextPg( ppsp, IDD_PREV_MINTEXT3) {};
  92. protected:
  93. virtual void GetValueItemText(int nIndex, LPTSTR lpszBuffer, int nLen)
  94. {
  95. // Add font sizes
  96. TCHAR szName[100];
  97. wsprintf(szName, __TEXT("Font Size %i"), m_rgnValues[nIndex]);
  98. lstrcpyn(lpszBuffer, szName, nLen);
  99. }
  100. };
  101. /////////////////////////////////////////////////////////////
  102. // Color page
  103. class CLookPreviewColorPg : public CLookPreviewPg
  104. {
  105. public:
  106. CLookPreviewColorPg(LPPROPSHEETPAGE ppsp)
  107. : CLookPreviewPg( ppsp,
  108. IDD_PREV_COLOR,
  109. IDS_LKPREV_COLORTITLE,
  110. IDS_LKPREV_COLORSUBTITLE,
  111. 0) {};
  112. virtual void LoadValueArray()
  113. {
  114. // For colors, we just use 0 to GetSchemeCount()
  115. m_nCountValues = GetSchemeCount() + 1;
  116. for(int i=0;i<m_nCountValues;i++)
  117. m_rgnValues[i] = i;
  118. }
  119. virtual int GetCurrentValue(NONCLIENTMETRICS *pncm) {return 0;}; // Always return value of 0
  120. virtual void GetValueItemText(int nIndex, LPTSTR lpszBuffer, int nLen)
  121. {
  122. _ASSERTE(nIndex < GetSchemeCount() + 1);
  123. if(0 == nIndex)
  124. lstrcpyn(lpszBuffer, __TEXT("No changes"), nLen);
  125. else
  126. GetSchemeName(nIndex - 1, lpszBuffer, nLen);
  127. }
  128. virtual void ModifyMyNonClientMetrics(NONCLIENTMETRICS &ncm)
  129. {
  130. ResetColors();
  131. }
  132. };
  133. /////////////////////////////////////////////////////////////
  134. // Scroll Bar Size TYPE 1 & 2
  135. class CLookPreviewScrollBarPg : public CLookPreviewPg
  136. {
  137. public:
  138. CLookPreviewScrollBarPg(LPPROPSHEETPAGE ppsp, int dwPageId)
  139. : CLookPreviewPg( ppsp,
  140. dwPageId,
  141. IDS_LKPREV_SCROLLBARTITLE,
  142. IDS_LKPREV_SCROLLBARSUBTITLE,
  143. IDS_LKPREV_SCROLLSIZES) {};
  144. virtual int GetCurrentValue(NONCLIENTMETRICS *pncm) {return max(pncm->iScrollWidth, pncm->iScrollHeight);};
  145. virtual void ModifyMyNonClientMetrics(NONCLIENTMETRICS &ncm)
  146. {
  147. ncm.iScrollWidth = m_rgnValues[m_nCurValueIndex];
  148. ncm.iScrollHeight = m_rgnValues[m_nCurValueIndex];
  149. }
  150. };
  151. class CLookPreviewScrollBar1Pg : public CLookPreviewScrollBarPg
  152. {
  153. public:
  154. CLookPreviewScrollBar1Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewScrollBarPg( ppsp, IDD_PREV_SCROLL1) {};
  155. };
  156. class CLookPreviewScrollBar2Pg : public CLookPreviewScrollBarPg
  157. {
  158. public:
  159. CLookPreviewScrollBar2Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewScrollBarPg( ppsp, IDD_PREV_SCROLL2) {};
  160. };
  161. /////////////////////////////////////////////////////////////
  162. // Border Size TYPE 1 & 2
  163. class CLookPreviewBorderPg : public CLookPreviewPg
  164. {
  165. public:
  166. CLookPreviewBorderPg(LPPROPSHEETPAGE ppsp, int dwPageId)
  167. : CLookPreviewPg( ppsp,
  168. dwPageId,
  169. IDS_LKPREV_BORDERTITLE,
  170. IDS_LKPREV_BORDERSUBTITLE,
  171. IDS_LKPREV_BORDERSIZES) {};
  172. virtual int GetCurrentValue(NONCLIENTMETRICS *pncm) {return pncm->iBorderWidth;};
  173. virtual void ModifyMyNonClientMetrics(NONCLIENTMETRICS &ncm)
  174. {
  175. ncm.iBorderWidth = m_rgnValues[m_nCurValueIndex];
  176. }
  177. };
  178. class CLookPreviewBorder1Pg : public CLookPreviewBorderPg
  179. {
  180. public:
  181. CLookPreviewBorder1Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewBorderPg( ppsp, IDD_PREV_BORDER1) {};
  182. };
  183. class CLookPreviewBorder2Pg : public CLookPreviewBorderPg
  184. {
  185. public:
  186. CLookPreviewBorder2Pg(LPPROPSHEETPAGE ppsp) : CLookPreviewBorderPg( ppsp, IDD_PREV_BORDER2) {};
  187. };
  188. #endif // _INC_PGLOKPRV_H