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

Windows Kernel

Development Platform:

Visual C++

  1. #pragma warning(disable:4200)   // Zero-sized array in struct
  2. #ifdef WINNT
  3. /*
  4.  * FONT_INFO
  5.  *
  6.  * The distinction between the desired and actual font dimensions obtained
  7.  * is important in the case of TrueType fonts, in which there is no guarantee
  8.  * that what you ask for is what you will get.
  9.  *
  10.  * Note that the correspondence between "Desired" and "Actual" is broken
  11.  * whenever the user changes his display driver, because GDI uses driver
  12.  * parameters to control the font rasterization.
  13.  *
  14.  * The SizeDesired is {0, 0} if the font is a raster font.
  15.  */
  16. typedef struct _FONT_INFO {
  17.     HFONT hFont;
  18.     COORD Size;      // font size obtained
  19.     COORD SizeWant;  // 0;0 if Raster font
  20.     LONG  Weight;
  21.     LPTSTR FaceName;
  22.     BYTE  Family;
  23.     BYTE  tmCharSet;
  24. } FONT_INFO, *PFONT_INFO;
  25. typedef struct tagFACENODE {
  26.      struct tagFACENODE *pNext;
  27.      DWORD  dwFlag;
  28.      TCHAR  atch[];
  29. } FACENODE, *PFACENODE;
  30. //
  31. // TrueType font list
  32. //     This structure shares in windowsincwincon.w file
  33. //
  34. // we don't make bold available if BOLD_MARK is in the face name.
  35. #define BOLD_MARK    (L'*')
  36. typedef struct _TT_FONT_LIST {
  37.     SINGLE_LIST_ENTRY List;
  38.     UINT  CodePage;
  39.     BOOL  fDisableBold;
  40.     TCHAR FaceName1[LF_FACESIZE];
  41.     TCHAR FaceName2[LF_FACESIZE];
  42. } TTFONTLIST, *LPTTFONTLIST;
  43. #ifdef MAX_TITLE_LEN
  44. #undef MAX_TITLE_LEN
  45. #endif
  46. #define MAX_TITLE_LEN 256
  47. #define MAXDIMENSTRING     40  // max text in combo box
  48. #define DX_TTBITMAP        20
  49. #define DY_TTBITMAP        12
  50. #define CCH_RASTERFONTS    24
  51. #define CCH_SELECTEDFONT   30
  52. typedef struct {
  53.     IShellLink * psl;
  54.     LPNT_CONSOLE_PROPS lpConsole;
  55.     LPNT_FE_CONSOLE_PROPS lpFEConsole;
  56.     BOOL bConDirty;
  57.     int xScreen;
  58.     int yScreen;
  59.     POINT NonClientSize;
  60.     RECT WindowRect;
  61.     DWORD PreviewFlags;
  62.     PFONT_INFO FontInfo;
  63.     ULONG FontInfoLength;
  64.     ULONG NumberOfFonts;
  65.     BOOL gbEnumerateFaces;
  66.     BOOL gbPointSizeError;
  67.     BOOL gbBold;
  68.     BOOL bFontInit;
  69.     BOOL bColorInit;
  70.     PFACENODE gpFaceNames;
  71.     TCHAR DefaultFaceName[LF_FACESIZE];
  72.     LPTSTR lpFaceName;
  73. #ifndef UNICODE
  74.     CHAR szFaceName[LF_FACESIZE];
  75. #endif
  76.     COORD DefaultFontSize;
  77.     BYTE  DefaultFontFamily;
  78.     ULONG DefaultFontIndex;
  79.     ULONG CurrentFontIndex;
  80.     LONG  FontLong;
  81.     int   Index;
  82.     BYTE  ColorArray[4];
  83.     TCHAR ConsoleTitle[ MAX_TITLE_LEN + 1 ];
  84.     BOOL fChangeCodePage;
  85.     UINT uOEMCP;
  86.     SINGLE_LIST_ENTRY gTTFontList;    // This list contain TTFONTLIST data.
  87. } CONSOLEPROP_DATA, *LPCONSOLEPROP_DATA;  // cpd
  88. // got this from wingdip.h so we don't have to compile it all
  89. #define IS_ANY_DBCS_CHARSET( CharSet )                              
  90.                    ( ((CharSet) == SHIFTJIS_CHARSET)    ? TRUE :    
  91.                      ((CharSet) == HANGEUL_CHARSET)     ? TRUE :    
  92.                      ((CharSet) == CHINESEBIG5_CHARSET) ? TRUE :    
  93.                      ((CharSet) == GB2312_CHARSET)      ? TRUE : FALSE )
  94. #define TM_IS_TT_FONT(x)     (((x) & TMPF_TRUETYPE) == TMPF_TRUETYPE)
  95. #define IS_BOLD(w)           ((w) >= FW_SEMIBOLD)
  96. #define SIZE_EQUAL(s1, s2)   (((s1).X == (s2).X) && ((s1).Y == (s2).Y))
  97. #define POINTS_PER_INCH 72
  98. #define MIN_PIXEL_HEIGHT 5
  99. #define MAX_PIXEL_HEIGHT 72
  100. #define CONSOLE_REGISTRY_CURRENTPAGE  (L"CurrentPage")
  101. #define MAX_SCRBUF_WIDTH  9999
  102. #define MAX_SCRBUF_HEIGHT 9999
  103. #define INITIAL_FONTS 20
  104. #define FONT_INCREMENT 3
  105. #define CONSOLE_MAX_FONT_NAME_LENGTH 256
  106. #define CM_SETCOLOR       (WM_USER+1)
  107. #define CM_PREVIEW_UPDATE (WM_USER+2)
  108. #define CM_PREVIEW_INIT   (WM_USER+3)
  109. #define CM_COLOR_INIT     (WM_USER+4)
  110. #define PREVIEW_HSCROLL  0x01
  111. #define PREVIEW_VSCROLL  0x02
  112. #define FE_ABANDONFONT 0
  113. #define FE_SKIPFONT    1
  114. #define FE_FONTOK      2
  115. #define EF_NEW         0x0001 // a newly available face
  116. #define EF_OLD         0x0002 // a previously available face
  117. #define EF_ENUMERATED  0x0004 // all sizes have been enumerated
  118. #define EF_OEMFONT     0x0008 // an OEM face
  119. #define EF_TTFONT      0x0010 // a TT face
  120. #define EF_DEFFACE     0x0020 // the default face
  121. #define EF_DBCSFONT    0x0040 // the DBCS font
  122. /* ----- Macros ----- */
  123. /*
  124.  *  High-level macros
  125.  *
  126.  *  These macros handle the SendMessages that go tofrom list boxes
  127.  *  and combo boxes.
  128.  *
  129.  *  The "xxx_lcb" prefix stands for leaves CritSect & "list or combo box".
  130.  *
  131.  *  Basically, we're providing mnemonic names for what would otherwise
  132.  *  look like a whole slew of confusing SendMessage's.
  133.  *
  134.  */
  135. #define lcbRESETCONTENT(hWnd, bLB) 
  136.         SendMessage(hWnd, bLB ? LB_RESETCONTENT : CB_RESETCONTENT, 0, 0L)
  137. #define lcbGETTEXT(hWnd, bLB, w) 
  138.         SendMessage(hWnd, bLB ? LB_GETTEXT : CB_GETLBTEXT, w, 0L)
  139. #define lcbFINDSTRINGEXACT(hWnd, bLB, pwsz) 
  140.         SendMessage(hWnd, bLB ? LB_FINDSTRINGEXACT : CB_FINDSTRINGEXACT, 
  141.                           (DWORD)-1, (LPARAM)pwsz)
  142. #define lcbADDSTRING(hWnd, bLB, pwsz) 
  143.         SendMessage(hWnd, bLB ? LB_ADDSTRING : CB_ADDSTRING, 0, (LPARAM)pwsz)
  144. #define lcbSETITEMDATA(hWnd, bLB, w, nFont) 
  145.         SendMessage(hWnd, bLB ? LB_SETITEMDATA : CB_SETITEMDATA, w, nFont)
  146. #define lcbGETITEMDATA(hWnd, bLB, w) 
  147.         SendMessage(hWnd, bLB ? LB_GETITEMDATA : CB_GETITEMDATA, w, 0L)
  148. #define lcbGETCOUNT(hWnd, bLB) 
  149.         SendMessage(hWnd, bLB ? LB_GETCOUNT : CB_GETCOUNT, 0, 0L)
  150. #define lcbGETCURSEL(hWnd, bLB) 
  151.         SendMessage(hWnd, bLB ? LB_GETCURSEL : CB_GETCURSEL, 0, 0L)
  152. #define lcbSETCURSEL(hWnd, bLB, w) 
  153.         SendMessage(hWnd, bLB ? LB_SETCURSEL : CB_SETCURSEL, w, 0L)
  154. #define NELEM(array) (sizeof(array)/sizeof(array[0]))
  155. #define AttrToRGB(Attr) (pcpd->lpConsole->ColorTable[(Attr) & 0x0F])
  156. #define ScreenTextColor(pcpd) 
  157.             (AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute) & 0x0F))
  158. #define ScreenBkColor(pcpd) 
  159.             (AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute >> 4)))
  160. #define PopupTextColor(pcpd) 
  161.             (AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute) & 0x0F))
  162. #define PopupBkColor(pcpd) 
  163.             (AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute >> 4)))
  164. //
  165. // Function prototypes
  166. //
  167. VOID
  168. InitializeFonts( LPCONSOLEPROP_DATA pcpd );
  169. VOID
  170. DestroyFonts( LPCONSOLEPROP_DATA pcpd );
  171. NTSTATUS
  172. EnumerateFonts( LPCONSOLEPROP_DATA pcpd, DWORD Flags);
  173. int
  174. FindCreateFont(
  175.     LPCONSOLEPROP_DATA pcpd,
  176.     DWORD Family,
  177.     LPTSTR ptszFace,
  178.     COORD Size,
  179.     LONG Weight);
  180. BOOL
  181. DoFontEnum(
  182.     LPCONSOLEPROP_DATA pcpd,
  183.     HDC hDC,
  184.     LPTSTR ptszFace,
  185.     PSHORT pTTPoints,
  186.     UINT nTTPoints);
  187. VOID
  188. GetTitleFromLinkName(
  189.     LPTSTR szLinkName,
  190.     LPTSTR szTitle
  191.     );
  192. VOID
  193. SetRegistryValues(
  194.     LPCONSOLEPROP_DATA pcpd
  195.     );
  196. VOID
  197. GetRegistryValues(
  198.     LPCONSOLEPROP_DATA pcpd
  199.     );
  200. void
  201. InitRegistryValues(
  202.     LPCONSOLEPROP_DATA pcpd
  203.     );
  204. VOID
  205. GetRegistryValues(
  206.     LPCONSOLEPROP_DATA pcpd
  207.     );
  208. // proto-types for FarEast console
  209. //
  210. VOID
  211. SetFERegistryValues(
  212.     LPCONSOLEPROP_DATA pcpd
  213.     );
  214. VOID
  215. GetFERegistryValues(
  216.     LPCONSOLEPROP_DATA pcpd
  217.     );
  218. void
  219. InitFERegistryValues(
  220.     LPCONSOLEPROP_DATA pcpd
  221.     );
  222. NTSTATUS
  223. MakeAltRasterFont(
  224.     LPCONSOLEPROP_DATA pcpd,
  225.     UINT CodePage,
  226.     COORD *AltFontSize,
  227.     BYTE  *AltFontFamily,
  228.     ULONG *AltFontIndex,
  229.     LPTSTR AltFaceName
  230.     );
  231. NTSTATUS
  232. InitializeDbcsMisc(
  233.     LPCONSOLEPROP_DATA pcpd
  234.     );
  235. BYTE
  236. CodePageToCharSet(
  237.     UINT CodePage
  238.     );
  239. LPTTFONTLIST
  240. SearchTTFont(
  241.     LPCONSOLEPROP_DATA pcpd,
  242.     LPTSTR ptszFace,
  243.     BOOL fCodePage,
  244.     UINT CodePage
  245.     );
  246. BOOL
  247. IsAvailableTTFont(
  248.     LPCONSOLEPROP_DATA pcpd,
  249.     LPTSTR ptszFace
  250.     );
  251. BOOL
  252. IsAvailableTTFontCP(
  253.     LPCONSOLEPROP_DATA pcpd,
  254.     LPTSTR pwszFace,
  255.     UINT CodePage
  256.     );
  257. BOOL
  258. IsDisableBoldTTFont(
  259.     LPCONSOLEPROP_DATA pcpd,
  260.     LPTSTR ptszFace
  261.     );
  262. LPTSTR
  263. GetAltFaceName(
  264.     LPCONSOLEPROP_DATA pcpd,
  265.     LPTSTR ptszFace
  266.     );
  267. NTSTATUS
  268. DestroyDbcsMisc(
  269.     LPCONSOLEPROP_DATA pcpd
  270.     );
  271. int
  272. LanguageListCreate(
  273.     HWND hDlg,
  274.     UINT CodePage
  275.     );
  276. #endif // WINNT
  277. typedef struct {
  278.     // input params
  279.     IShellLink *psl;
  280.     // local state variables
  281.     HWND hDlg;
  282.     BOOL bIsFile;    // don't make this a bitfied because we don't keep it around
  283.     BOOL bIsDirty;   // so the codesize savings is better
  284.     int iIconIndex;
  285. #ifdef WINNT
  286.     HANDLE hThread;
  287.     BOOL bCheckRunInSep;
  288.     HANDLE hCheckNow;
  289. #endif
  290.     TCHAR szFile[MAX_PATH];
  291.     TCHAR szIconPath[MAX_PATH];
  292. } LINKPROP_DATA, *LPLINKPROP_DATA;      // lpd
  293. typedef struct {
  294.     LINKPROP_DATA    lpd;
  295. #ifdef WINNT
  296.     CONSOLEPROP_DATA cpd;
  297. #endif
  298. } LINKDATA, *LPLINKDATA;
  299. HRESULT _SaveLink(LPLINKDATA pld);
  300. #ifdef WINNT
  301. VOID LinkConsolePagesSave(LPLINKDATA pld);
  302. void AddLinkConsolePages(LPLINKDATA pld, IShellLink * psl, LPCTSTR pszFile, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam);
  303. #endif