home *** CD-ROM | disk | FTP | other *** search
/ Supercompiler 1997 / SUPERCOMPILER97.iso / MS_VC.50 / VC / MFC / SRC / CCDATA.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-30  |  20.8 KB  |  712 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1997 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #include "stdafx.h"
  12.  
  13. #ifdef AFX_INIT_SEG
  14. #pragma code_seg(AFX_INIT_SEG)
  15. #endif
  16.  
  17. #ifdef _AFXDLL
  18.  
  19. #ifndef _MAC
  20. inline HINSTANCE AfxLoadCommCtrl(FARPROC* proc, LPCSTR lpsz)
  21.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "COMCTL32.DLL", proc, lpsz); }
  22. #define COMMCTRLLOAD(x) AfxLoadCommCtrl((FARPROC*)&_afxCommCtrl.pfn##x, #x);
  23. #ifdef _UNICODE
  24. #define COMMCTRLLOADT(x) AfxLoadCommCtrl((FARPROC*)&_afxCommCtrl.pfn##x, #x"W");
  25. #else
  26. #define COMMCTRLLOADT(x) AfxLoadCommCtrl((FARPROC*)&_afxCommCtrl.pfn##x, #x"A");
  27. #endif
  28.  
  29. inline HINSTANCE AfxLoadShell(FARPROC* proc, LPCSTR lpsz)
  30.     { return AfxLoadDll(&_afxExtDllState->m_hInstShell, "SHELL32.DLL", proc, lpsz); }
  31. #define SHELLLOAD(x) AfxLoadShell((FARPROC*)&_afxShell.pfn##x, #x);
  32. #ifdef _UNICODE
  33. #define SHELLLOADT(x) AfxLoadShell((FARPROC*)&_afxShell.pfn##x, #x"W");
  34. #else
  35. #define SHELLLOADT(x) AfxLoadShell((FARPROC*)&_afxShell.pfn##x, #x"A");
  36. #endif
  37.  
  38. inline HINSTANCE AfxLoadComDlg(FARPROC* proc, LPCSTR lpsz)
  39.     { return AfxLoadDll(&_afxExtDllState->m_hInstComDlg, "COMDLG32.DLL", proc, lpsz); }
  40. #define COMDLGLOAD(x) AfxLoadComDlg((FARPROC*)&_afxComDlg.pfn##x, #x);
  41. #ifdef _UNICODE
  42. #define COMDLGLOADT(x) AfxLoadComDlg((FARPROC*)&_afxComDlg.pfn##x, #x"W");
  43. #else
  44. #define COMDLGLOADT(x) AfxLoadComDlg((FARPROC*)&_afxComDlg.pfn##x, #x"A");
  45. #endif
  46.  
  47. inline HINSTANCE AfxLoadWinSpool(FARPROC* proc, LPCSTR lpsz)
  48.     { return AfxLoadDll(&_afxExtDllState->m_hInstWinSpool, "WINSPOOL.DRV", proc, lpsz); }
  49. #define WINSPOOLLOAD(x) AfxLoadWinSpool((FARPROC*)&_afxWinSpool.pfn##x, #x);
  50. #ifdef _UNICODE
  51. #define WINSPOOLLOADT(x) AfxLoadWinSpool((FARPROC*)&_afxWinSpool.pfn##x, #x"W");
  52. #else
  53. #define WINSPOOLLOADT(x) AfxLoadWinSpool((FARPROC*)&_afxWinSpool.pfn##x, #x"A");
  54. #endif
  55.  
  56. inline HINSTANCE AfxLoadAdvApi(FARPROC* proc, LPCSTR lpsz)
  57.     { return AfxLoadDll(&_afxExtDllState->m_hInstAdvApi, "ADVAPI32.DLL", proc, lpsz); }
  58. #define ADVAPILOAD(x) AfxLoadAdvApi((FARPROC*)&_afxAdvApi.pfn##x, #x);
  59. #ifdef _UNICODE
  60. #define ADVAPILOADT(x) AfxLoadAdvApi((FARPROC*)&_afxAdvApi.pfn##x, #x"W");
  61. #else
  62. #define ADVAPILOADT(x) AfxLoadAdvApi((FARPROC*)&_afxAdvApi.pfn##x, #x"A");
  63. #endif
  64.  
  65. #else // _MAC
  66.  
  67. inline HINSTANCE AfxLoadCommCtrl(FARPROC* proc, LPCSTR lpsz)
  68. #ifdef _DEBUG
  69.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "DebugMicrosoftControlsLib", proc, lpsz); }
  70. #else
  71.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "MicrosoftControlsLib", proc, lpsz); }
  72. #endif
  73. #define COMMCTRLLOAD(x) AfxLoadCommCtrl((FARPROC*)&_afxCommCtrl.pfn##x, #x);
  74. #define COMMCTRLLOADT(x) AfxLoadCommCtrl((FARPROC*)&_afxCommCtrl.pfn##x, #x);
  75.  
  76. #endif // _MAC
  77.  
  78. ////////////////////////////////////////////////////////////////////////////
  79. //
  80.  
  81. void STDAPICALLTYPE AfxThunkInitCommonControls()
  82. {
  83.     COMMCTRLLOAD(InitCommonControls);
  84.     _afxCommCtrl.pfnInitCommonControls();
  85. }
  86.  
  87. int STDAPICALLTYPE AfxThunkLBItemFromPt(HWND hLB, POINT pt, BOOL bAutoScroll)
  88. {
  89.     COMMCTRLLOAD(LBItemFromPt);
  90.     return _afxCommCtrl.pfnLBItemFromPt(hLB, pt, bAutoScroll);
  91. }
  92.  
  93. HBITMAP STDAPICALLTYPE AfxThunkCreateMappedBitmap(HINSTANCE hInstance,
  94.     int idBitmap, UINT wFlags, LPCOLORMAP lpColorMap, int iNumMaps)
  95. {
  96.     COMMCTRLLOAD(CreateMappedBitmap);
  97.     return _afxCommCtrl.pfnCreateMappedBitmap(hInstance,
  98.         idBitmap, wFlags, lpColorMap, iNumMaps);
  99. }
  100.  
  101.  
  102. BOOL STDAPICALLTYPE AfxThunkMakeDragList(HWND hLB)
  103. {
  104.     COMMCTRLLOAD(MakeDragList);
  105.     return _afxCommCtrl.pfnMakeDragList(hLB);
  106. }
  107.  
  108. ////////////////////////////////////////////////////////////////////////////
  109. //
  110.  
  111. BOOL STDAPICALLTYPE AfxThunkImageList_SetOverlayImage(HIMAGELIST himl, int iImage, int iOverlay)
  112. {
  113.     COMMCTRLLOAD(ImageList_SetOverlayImage);
  114.     return _afxCommCtrl.pfnImageList_SetOverlayImage(himl, iImage, iOverlay);
  115. }
  116.  
  117. COLORREF STDAPICALLTYPE AfxThunkImageList_GetBkColor(HIMAGELIST himl)
  118. {
  119.     COMMCTRLLOAD(ImageList_GetBkColor);
  120.     return _afxCommCtrl.pfnImageList_GetBkColor(himl);
  121. }
  122.  
  123. COLORREF STDAPICALLTYPE AfxThunkImageList_SetBkColor(HIMAGELIST himl, COLORREF clrBk)
  124. {
  125.     COMMCTRLLOAD(ImageList_SetBkColor);
  126.     return _afxCommCtrl.pfnImageList_SetBkColor(himl, clrBk);
  127. }
  128.  
  129. BOOL STDAPICALLTYPE AfxThunkImageList_GetImageInfo(HIMAGELIST himl, int i, IMAGEINFO FAR* pImageInfo)
  130. {
  131.     COMMCTRLLOAD(ImageList_GetImageInfo);
  132.     return _afxCommCtrl.pfnImageList_GetImageInfo(himl, i, pImageInfo);
  133. }
  134.  
  135. BOOL STDAPICALLTYPE AfxThunkImageList_Draw(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, UINT fStyle)
  136. {
  137.     COMMCTRLLOAD(ImageList_Draw);
  138.     return _afxCommCtrl.pfnImageList_Draw(himl, i, hdcDst, x, y, fStyle);
  139. }
  140.  
  141. HICON STDAPICALLTYPE AfxThunkImageList_GetIcon(HIMAGELIST himl, int i, UINT flags)
  142. {
  143.     COMMCTRLLOAD(ImageList_GetIcon);
  144.     return _afxCommCtrl.pfnImageList_GetIcon(himl, i, flags);
  145. }
  146.  
  147. int STDAPICALLTYPE AfxThunkImageList_ReplaceIcon(HIMAGELIST himl, int i, HICON hicon)
  148. {
  149.     COMMCTRLLOAD(ImageList_ReplaceIcon);
  150.     return _afxCommCtrl.pfnImageList_ReplaceIcon(himl, i, hicon);
  151. }
  152.  
  153. BOOL STDAPICALLTYPE AfxThunkImageList_Replace(HIMAGELIST himl, int i, HBITMAP hbmImage, HBITMAP hbmMask)
  154. {
  155.     COMMCTRLLOAD(ImageList_Replace);
  156.     return _afxCommCtrl.pfnImageList_Replace(himl, i, hbmImage, hbmMask);
  157. }
  158.  
  159. BOOL STDAPICALLTYPE AfxThunkImageList_Remove(HIMAGELIST himl, int i)
  160. {
  161.     COMMCTRLLOAD(ImageList_Remove);
  162.     return _afxCommCtrl.pfnImageList_Remove(himl, i);
  163. }
  164.  
  165. int STDAPICALLTYPE AfxThunkImageList_AddMasked(HIMAGELIST himl, HBITMAP hbmImage, COLORREF crMask)
  166. {
  167.     COMMCTRLLOAD(ImageList_AddMasked);
  168.     return _afxCommCtrl.pfnImageList_AddMasked(himl, hbmImage, crMask);
  169. }
  170.  
  171. void STDAPICALLTYPE AfxThunkImageList_EndDrag()
  172. {
  173.     COMMCTRLLOAD(ImageList_EndDrag);
  174.     _afxCommCtrl.pfnImageList_EndDrag();
  175. }
  176.  
  177. BOOL STDAPICALLTYPE AfxThunkImageList_BeginDrag(HIMAGELIST himlTrack, int iTrack, int dxHotspot, int dyHotspot)
  178. {
  179.     COMMCTRLLOAD(ImageList_BeginDrag);
  180.     return _afxCommCtrl.pfnImageList_BeginDrag(himlTrack, iTrack, dxHotspot, dyHotspot);
  181. }
  182.  
  183. #ifndef _AFX_NO_OLE_SUPPORT
  184.  
  185. BOOL STDAPICALLTYPE AfxThunkImageList_Write(HIMAGELIST himl, LPSTREAM pstm)
  186. {
  187.     COMMCTRLLOAD(ImageList_Write);
  188.     return _afxCommCtrl.pfnImageList_Write(himl, pstm);
  189. }
  190.  
  191. HIMAGELIST STDAPICALLTYPE AfxThunkImageList_Read(LPSTREAM pstm)
  192. {
  193.     COMMCTRLLOAD(ImageList_Read);
  194.     return _afxCommCtrl.pfnImageList_Read(pstm);
  195. }
  196.  
  197. #endif // !_AFX_NO_OLE_SUPPORT
  198.  
  199. HIMAGELIST STDAPICALLTYPE AfxThunkImageList_Merge(HIMAGELIST himl1, int i1, HIMAGELIST himl2, int i2, int dx, int dy)
  200. {
  201.     COMMCTRLLOAD(ImageList_Merge);
  202.     return _afxCommCtrl.pfnImageList_Merge(himl1, i1, himl2, i2, dx, dy);
  203. }
  204.  
  205. HIMAGELIST STDAPICALLTYPE AfxThunkImageList_Create(int cx, int cy, UINT flags, int cInitial, int cGrow)
  206. {
  207.     COMMCTRLLOAD(ImageList_Create);
  208.     return _afxCommCtrl.pfnImageList_Create(cx, cy, flags, cInitial, cGrow);
  209. }
  210.  
  211. BOOL STDAPICALLTYPE AfxThunkImageList_Destroy(HIMAGELIST himl)
  212. {
  213.     COMMCTRLLOAD(ImageList_Destroy);
  214.     return _afxCommCtrl.pfnImageList_Destroy(himl);
  215. }
  216.  
  217. BOOL STDAPICALLTYPE AfxThunkImageList_DragMove(int x, int y)
  218. {
  219.     COMMCTRLLOAD(ImageList_DragMove);
  220.     return _afxCommCtrl.pfnImageList_DragMove(x, y);
  221. }
  222.  
  223. BOOL STDAPICALLTYPE AfxThunkImageList_SetDragCursorImage(HIMAGELIST himlDrag, int iDrag, int dxHotspot, int dyHotspot)
  224. {
  225.     COMMCTRLLOAD(ImageList_SetDragCursorImage);
  226.     return _afxCommCtrl.pfnImageList_SetDragCursorImage(himlDrag, iDrag, dxHotspot, dyHotspot);
  227. }
  228.  
  229. BOOL STDAPICALLTYPE AfxThunkImageList_DragShowNolock(BOOL fShow)
  230. {
  231.     COMMCTRLLOAD(ImageList_DragShowNolock);
  232.     return _afxCommCtrl.pfnImageList_DragShowNolock(fShow);
  233. }
  234.  
  235. HIMAGELIST STDAPICALLTYPE AfxThunkImageList_GetDragImage(POINT FAR* ppt,POINT FAR* pptHotspot)
  236. {
  237.     COMMCTRLLOAD(ImageList_GetDragImage);
  238.     return _afxCommCtrl.pfnImageList_GetDragImage(ppt, pptHotspot);
  239. }
  240.  
  241. BOOL STDAPICALLTYPE AfxThunkImageList_DragEnter(HWND hwndLock, int x, int y)
  242. {
  243.     COMMCTRLLOAD(ImageList_DragEnter);
  244.     return _afxCommCtrl.pfnImageList_DragEnter(hwndLock, x, y);
  245. }
  246.  
  247. BOOL STDAPICALLTYPE AfxThunkImageList_DragLeave(HWND hwndLock)
  248. {
  249.     COMMCTRLLOAD(ImageList_DragLeave);
  250.     return _afxCommCtrl.pfnImageList_DragLeave(hwndLock);
  251. }
  252.  
  253. int STDAPICALLTYPE AfxThunkImageList_GetImageCount(HIMAGELIST himl)
  254. {
  255.     COMMCTRLLOAD(ImageList_GetImageCount);
  256.     return _afxCommCtrl.pfnImageList_GetImageCount(himl);
  257. }
  258.  
  259. int STDAPICALLTYPE AfxThunkImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
  260. {
  261.     COMMCTRLLOAD(ImageList_Add);
  262.     return _afxCommCtrl.pfnImageList_Add(himl, hbmImage, hbmMask);
  263. }
  264.  
  265. HIMAGELIST STDAPICALLTYPE AfxThunkImageList_LoadImage(HINSTANCE hi, LPCTSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags)
  266. {
  267.     COMMCTRLLOADT(ImageList_LoadImage);
  268.     return _afxCommCtrl.pfnImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, uType, uFlags);
  269. }
  270.  
  271. /////////////////////////////////////////////////////////////////////////////
  272. // Property sheet thunks
  273.  
  274. BOOL STDAPICALLTYPE AfxThunkDestroyPropertySheetPage(HPROPSHEETPAGE hPage)
  275. {
  276.     COMMCTRLLOAD(DestroyPropertySheetPage);
  277.     return _afxCommCtrl.pfnDestroyPropertySheetPage(hPage);
  278. }
  279.  
  280. STDAPICALLTYPE AfxThunkPropertySheet(LPCPROPSHEETHEADER pHeader)
  281. {
  282.     COMMCTRLLOADT(PropertySheet);
  283.     return _afxCommCtrl.pfnPropertySheet(pHeader);
  284. }
  285.  
  286. HPROPSHEETPAGE STDAPICALLTYPE AfxThunkCreatePropertySheetPage(LPCPROPSHEETPAGE pPage)
  287. {
  288.     COMMCTRLLOADT(CreatePropertySheetPage);
  289.     return _afxCommCtrl.pfnCreatePropertySheetPage(pPage);
  290. }
  291.  
  292. /////////////////////////////////////////////////////////////////////////////
  293. // _AFX_COMMCTRL_CALL
  294.  
  295. AFX_DATADEF AFX_COMMCTRL_CALL _afxCommCtrl =
  296. {
  297. // housekeeping and other
  298.  
  299.     AfxThunkInitCommonControls,
  300.     AfxThunkLBItemFromPt,
  301.     AfxThunkCreateMappedBitmap,
  302.     AfxThunkMakeDragList,
  303.  
  304. // image lists
  305.     AfxThunkImageList_SetOverlayImage,
  306.     AfxThunkImageList_GetBkColor,
  307.     AfxThunkImageList_SetBkColor,
  308.     AfxThunkImageList_GetImageInfo,
  309.     AfxThunkImageList_Draw,
  310.     AfxThunkImageList_GetIcon,
  311.     AfxThunkImageList_ReplaceIcon,
  312.     AfxThunkImageList_Replace,
  313.     AfxThunkImageList_Remove,
  314.     AfxThunkImageList_AddMasked,
  315.     AfxThunkImageList_EndDrag,
  316.     AfxThunkImageList_BeginDrag,
  317.     AfxThunkImageList_Merge,
  318.     AfxThunkImageList_Create,
  319.     AfxThunkImageList_Destroy,
  320.     AfxThunkImageList_DragMove,
  321.     AfxThunkImageList_SetDragCursorImage,
  322.     AfxThunkImageList_DragShowNolock,
  323.     AfxThunkImageList_GetDragImage,
  324.     AfxThunkImageList_DragEnter,
  325.     AfxThunkImageList_DragLeave,
  326.     AfxThunkImageList_GetImageCount,
  327.     AfxThunkImageList_Add,
  328.     AfxThunkImageList_LoadImage,
  329.  
  330. #ifndef _AFX_NO_OLE_SUPPORT
  331.     AfxThunkImageList_Write,
  332.     AfxThunkImageList_Read,
  333. #endif // !_AFX_NO_OLE_SUPPORT
  334.  
  335. // property sheets
  336.  
  337.     AfxThunkDestroyPropertySheetPage,
  338.     AfxThunkPropertySheet,
  339.     AfxThunkCreatePropertySheetPage,
  340. };
  341.  
  342. #ifndef _MAC
  343. /////////////////////////////////////////////////////////////////////////////
  344. // _AFX_SHELL_CALL
  345.  
  346. DWORD WINAPI AfxThunkSHGetFileInfo(LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR *psfi, UINT cbFileInfo, UINT uFlags)
  347. {
  348.     SHELLLOADT(SHGetFileInfo);
  349.     return _afxShell.pfnSHGetFileInfo(pszPath, dwFileAttributes, psfi, cbFileInfo, uFlags);
  350. }
  351.  
  352. HICON WINAPI AfxThunkExtractIcon(HINSTANCE hInst, LPCTSTR lpszExeFileName, UINT nIconIndex)
  353. {
  354.     SHELLLOADT(ExtractIcon);
  355.     return _afxShell.pfnExtractIcon(hInst, lpszExeFileName, nIconIndex);
  356. }
  357.  
  358. UINT WINAPI AfxThunkDragQueryFile(HDROP h, UINT n1, LPTSTR lpsz, UINT n2)
  359. {
  360.     SHELLLOADT(DragQueryFile);
  361.     return _afxShell.pfnDragQueryFile(h, n1, lpsz, n2);
  362. }
  363.  
  364. VOID WINAPI AfxThunkDragAcceptFiles(HWND h, BOOL b)
  365. {
  366.     SHELLLOAD(DragAcceptFiles);
  367.     _afxShell.pfnDragAcceptFiles(h, b);
  368. }
  369.  
  370. VOID WINAPI AfxThunkDragFinish(HDROP h)
  371. {
  372.     SHELLLOAD(DragFinish);
  373.     _afxShell.pfnDragFinish(h);
  374. }
  375.  
  376. AFX_DATADEF AFX_SHELL_CALL _afxShell =
  377. {
  378.     AfxThunkSHGetFileInfo,
  379.     AfxThunkExtractIcon,
  380.     AfxThunkDragQueryFile,
  381.     AfxThunkDragAcceptFiles,
  382.     AfxThunkDragFinish,
  383. };
  384.  
  385. /////////////////////////////////////////////////////////////////////////////
  386. // _AFX_COMDLG_CALL
  387.  
  388. BOOL APIENTRY AfxThunkChooseColor(LPCHOOSECOLOR lp)
  389. {
  390.     COMDLGLOADT(ChooseColor);
  391.     return _afxComDlg.pfnChooseColor(lp);
  392. }
  393.  
  394. DWORD APIENTRY AfxThunkCommDlgExtendedError()
  395. {
  396.     COMDLGLOAD(CommDlgExtendedError);
  397.     return _afxComDlg.pfnCommDlgExtendedError();
  398. }
  399.  
  400. HWND APIENTRY AfxThunkReplaceText(LPFINDREPLACE lp)
  401. {
  402.     COMDLGLOADT(ReplaceText);
  403.     return _afxComDlg.pfnReplaceText(lp);
  404. }
  405.  
  406. BOOL APIENTRY AfxThunkGetSaveFileName(LPOPENFILENAME lp)
  407. {
  408.     COMDLGLOADT(GetSaveFileName);
  409.     return _afxComDlg.pfnGetSaveFileName(lp);
  410. }
  411.  
  412. short APIENTRY AfxThunkGetFileTitle(LPCTSTR lpsz1, LPTSTR lpsz2, WORD w)
  413. {
  414.     COMDLGLOADT(GetFileTitle);
  415.     return _afxComDlg.pfnGetFileTitle(lpsz1, lpsz2, w);
  416. }
  417.  
  418. BOOL APIENTRY AfxThunkPrintDlg(LPPRINTDLG lp)
  419. {
  420.     COMDLGLOADT(PrintDlg);
  421.     return _afxComDlg.pfnPrintDlg(lp);
  422. }
  423.  
  424. BOOL APIENTRY AfxThunkChooseFont(LPCHOOSEFONT lp)
  425. {
  426.     COMDLGLOADT(ChooseFont);
  427.     return _afxComDlg.pfnChooseFont(lp);
  428. }
  429.  
  430. HWND APIENTRY AfxThunkFindText(LPFINDREPLACE lp)
  431. {
  432.     COMDLGLOADT(FindText);
  433.     return _afxComDlg.pfnFindText(lp);
  434. }
  435.  
  436. BOOL APIENTRY AfxThunkPageSetupDlg(LPPAGESETUPDLG lp)
  437. {
  438.     COMDLGLOADT(PageSetupDlg);
  439.     return _afxComDlg.pfnPageSetupDlg(lp);
  440. }
  441.  
  442. BOOL APIENTRY AfxThunkGetOpenFileName(LPOPENFILENAME lp)
  443. {
  444.     COMDLGLOADT(GetOpenFileName);
  445.     return _afxComDlg.pfnGetOpenFileName(lp);
  446. }
  447.  
  448. AFX_DATADEF AFX_COMDLG_CALL _afxComDlg =
  449. {
  450.     AfxThunkChooseColor,
  451.     AfxThunkCommDlgExtendedError,
  452.     AfxThunkReplaceText,
  453.     AfxThunkGetSaveFileName,
  454.     AfxThunkGetFileTitle,
  455.     AfxThunkPrintDlg,
  456.     AfxThunkChooseFont,
  457.     AfxThunkFindText,
  458.     AfxThunkPageSetupDlg,
  459.     AfxThunkGetOpenFileName,
  460. };
  461.  
  462. /////////////////////////////////////////////////////////////////////////////
  463. // _AFX_WINSPOOL_CALL
  464.  
  465. LONG WINAPI AfxThunkDocumentProperties(HWND hWnd, HANDLE hPrinter, LPTSTR pDeviceName,
  466.         PDEVMODE pDevModeOutput, PDEVMODE pDevModeInput, DWORD fMode)
  467. {
  468.     WINSPOOLLOADT(DocumentProperties);
  469.     return _afxWinSpool.pfnDocumentProperties(hWnd, hPrinter, pDeviceName,
  470.         pDevModeOutput, pDevModeInput, fMode);
  471. }
  472.  
  473. BOOL WINAPI AfxThunkOpenPrinter(LPTSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTS pDefault)
  474. {
  475.     WINSPOOLLOADT(OpenPrinter);
  476.     return _afxWinSpool.pfnOpenPrinter(pPrinterName, phPrinter, pDefault);
  477. }
  478.  
  479. BOOL WINAPI AfxThunkClosePrinter(HANDLE hPrinter)
  480. {
  481.     WINSPOOLLOAD(ClosePrinter);
  482.     return _afxWinSpool.pfnClosePrinter(hPrinter);
  483. }
  484.  
  485.  
  486. AFX_DATADEF AFX_WINSPOOL_CALL _afxWinSpool =
  487. {
  488.     AfxThunkOpenPrinter,
  489.     AfxThunkClosePrinter,
  490.     AfxThunkDocumentProperties,
  491. };
  492.  
  493. /////////////////////////////////////////////////////////////////////////////
  494. // _AFX_ADVAPI_CALL
  495.  
  496. LONG APIENTRY AfxThunkRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition)
  497. {
  498.     ADVAPILOADT(RegCreateKeyEx);
  499.     return _afxAdvApi.pfnRegCreateKeyEx(hKey, lpSubKey, Reserved, lpClass,
  500.         dwOptions, samDesired, lpSecurityAttributes, phkResult,
  501.         lpdwDisposition);
  502. }
  503.  
  504. LONG APIENTRY AfxThunkRegEnumKey(HKEY hKey, DWORD dwIndex, LPTSTR lpName, DWORD cbName)
  505. {
  506.     ADVAPILOADT(RegEnumKey);
  507.     return _afxAdvApi.pfnRegEnumKey(hKey, dwIndex, lpName, cbName);
  508. }
  509.  
  510. LONG APIENTRY AfxThunkRegDeleteKey(HKEY hKey, LPCTSTR lpSubKey)
  511. {
  512.     ADVAPILOADT(RegDeleteKey);
  513.     return _afxAdvApi.pfnRegDeleteKey(hKey, lpSubKey);
  514. }
  515.  
  516. LONG APIENTRY AfxThunkRegDeleteValue(HKEY hKey, LPCTSTR lpValueName)
  517. {
  518.     ADVAPILOADT(RegDeleteValue);
  519.     return _afxAdvApi.pfnRegDeleteValue(hKey, lpValueName);
  520. }
  521.  
  522. LONG APIENTRY AfxThunkRegOpenKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
  523. {
  524.     ADVAPILOADT(RegOpenKeyEx);
  525.     return _afxAdvApi.pfnRegOpenKeyEx(hKey, lpSubKey, ulOptions, samDesired,
  526.         phkResult);
  527. }
  528.  
  529. LONG APIENTRY AfxThunkRegCloseKey(HKEY hKey)
  530. {
  531.     ADVAPILOAD(RegCloseKey);
  532.     return _afxAdvApi.pfnRegCloseKey(hKey);
  533. }
  534.  
  535. LONG APIENTRY AfxThunkRegSetValue(HKEY hKey, LPCTSTR lpSubKey, DWORD dwType, LPCTSTR lpData, DWORD cbData)
  536. {
  537.     ADVAPILOADT(RegSetValue);
  538.     return _afxAdvApi.pfnRegSetValue(hKey, lpSubKey, dwType, lpData, cbData);
  539. }
  540.  
  541. LONG APIENTRY AfxThunkRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)
  542. {
  543.     ADVAPILOADT(RegCreateKey);
  544.     return _afxAdvApi.pfnRegCreateKey(hKey, lpSubKey, phkResult);
  545. }
  546.  
  547. LONG APIENTRY AfxThunkRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE* lpData, DWORD cbData)
  548. {
  549.     ADVAPILOADT(RegSetValueEx);
  550.     return _afxAdvApi.pfnRegSetValueEx(hKey, lpValueName, Reserved, dwType,
  551.         lpData, cbData);
  552. }
  553.  
  554. LONG APIENTRY AfxThunkRegQueryValue(HKEY hKey, LPCTSTR lpSubKey, LPTSTR lpValue, PLONG lpcbValue)
  555. {
  556.     ADVAPILOADT(RegQueryValue);
  557.     return _afxAdvApi.pfnRegQueryValue(hKey, lpSubKey, lpValue, lpcbValue);
  558. }
  559.  
  560. LONG APIENTRY AfxThunkRegOpenKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)
  561. {
  562.     ADVAPILOADT(RegOpenKey);
  563.     return _afxAdvApi.pfnRegOpenKey(hKey, lpSubKey, phkResult);
  564. }
  565.  
  566. LONG APIENTRY AfxThunkRegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)
  567. {
  568.     ADVAPILOADT(RegQueryValueEx);
  569.     return _afxAdvApi.pfnRegQueryValueEx(hKey, lpValueName, lpReserved,
  570.         lpType, lpData, lpcbData);
  571. }
  572.  
  573. BOOL APIENTRY AfxThunkSetFileSecurity(LPCTSTR lpszFile, SECURITY_INFORMATION  si,
  574.    PSECURITY_DESCRIPTOR psd)
  575. {
  576.     ADVAPILOADT(SetFileSecurity);
  577.     return _afxAdvApi.pfnSetFileSecurity(lpszFile, si, psd);
  578. }
  579.  
  580. BOOL APIENTRY AfxThunkGetFileSecurity(LPCTSTR lpFileName,
  581.     SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor,
  582.     DWORD nLength, LPDWORD lpnLengthNeeded)
  583. {
  584.     ADVAPILOADT(GetFileSecurity);
  585.     return _afxAdvApi.pfnGetFileSecurity(lpFileName, RequestedInformation,
  586.         pSecurityDescriptor, nLength, lpnLengthNeeded);
  587. }
  588.  
  589. AFX_DATADEF AFX_ADVAPI_CALL _afxAdvApi =
  590. {
  591.     AfxThunkRegCreateKeyEx,
  592.     AfxThunkRegEnumKey,
  593.     AfxThunkRegDeleteKey,
  594.     AfxThunkRegDeleteValue,
  595.     AfxThunkRegOpenKeyEx,
  596.     AfxThunkRegCloseKey,
  597.     AfxThunkRegSetValue,
  598.     AfxThunkRegCreateKey,
  599.     AfxThunkRegSetValueEx,
  600.     AfxThunkRegQueryValue,
  601.     AfxThunkRegOpenKey,
  602.     AfxThunkRegQueryValueEx,
  603.     AfxThunkSetFileSecurity,
  604.     AfxThunkGetFileSecurity,
  605. };
  606.  
  607. #endif //!_MAC
  608.  
  609. #endif // _AFXDLL
  610.  
  611. /////////////////////////////////////////////////////////////////////////////
  612. // AfxGetPropSheetFont
  613.  
  614. #if !defined(_MAC) || defined(MACOCX)
  615.  
  616. struct _AFX_PROPPAGEFONTINFO : public CNoTrackObject
  617. {
  618.     LPTSTR m_pszFaceName;
  619.     WORD m_wSize;
  620.     _AFX_PROPPAGEFONTINFO() : m_pszFaceName(NULL), m_wSize(0) {}
  621.     ~_AFX_PROPPAGEFONTINFO() { GlobalFree(m_pszFaceName); }
  622. };
  623.  
  624. PROCESS_LOCAL(_AFX_PROPPAGEFONTINFO, _afxPropPageFontInfo)
  625.  
  626.  #define IDD_PROPSHEET   1006
  627. #define IDD_WIZARD      1020
  628.  
  629. #ifdef _AFXDLL
  630. #ifndef _MAC
  631. inline HINSTANCE AfxLoadCommCtrl()
  632.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "COMCTL32.DLL"); }
  633. #else
  634. inline HINSTANCE AfxLoadCommCtrl()
  635. #ifdef _DEBUG
  636.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "DebugMicrosoftControlsLib"); }
  637. #else
  638.     { return AfxLoadDll(&_afxExtDllState->m_hInstCommCtrl, "MicrosoftControlsLib"); }
  639. #endif
  640. #endif
  641. #else
  642. inline HINSTANCE AfxLoadCommCtrl()
  643.     { return GetModuleHandle(_T("COMCTL32.DLL")); }
  644. #endif
  645.  
  646. BOOL AFXAPI AfxGetPropSheetFont(CString& strFace, WORD& wSize, BOOL bWizard)
  647. {
  648.     _AFX_PROPPAGEFONTINFO* pFontInfo = _afxPropPageFontInfo.GetData();
  649.  
  650.     // determine which font property sheet will use
  651.     if (pFontInfo->m_wSize == 0)
  652.     {
  653.         ASSERT(pFontInfo->m_pszFaceName == NULL);
  654.  
  655.         HINSTANCE hInst = AfxLoadCommCtrl();
  656.         if (hInst != NULL)
  657.         {
  658.             HRSRC hResource = ::FindResource(hInst,
  659.                 MAKEINTRESOURCE(bWizard ? IDD_WIZARD : IDD_PROPSHEET),
  660.                 RT_DIALOG);
  661.             HGLOBAL hTemplate = LoadResource(hInst, hResource);
  662.             if (hTemplate != NULL)
  663.                 CDialogTemplate::GetFont((DLGTEMPLATE*)hTemplate, strFace,
  664.                     wSize);
  665.         }
  666.  
  667.         pFontInfo->m_pszFaceName = (LPTSTR)GlobalAlloc(GPTR, sizeof(TCHAR) *
  668.             (strFace.GetLength() + 1));
  669.         lstrcpy(pFontInfo->m_pszFaceName, strFace);
  670.         pFontInfo->m_wSize = wSize;
  671.     }
  672.  
  673.     strFace = pFontInfo->m_pszFaceName;
  674.     wSize = pFontInfo->m_wSize;
  675.  
  676.     return (wSize != 0xFFFF);
  677. }
  678.  
  679. #endif //!_MAC || MACOCX
  680.  
  681. /////////////////////////////////////////////////////////////////////////////
  682. // _AFX_EXTDLL_STATE implementation
  683.  
  684. #ifdef _AFXDLL
  685.  
  686. #pragma warning(disable: 4074)
  687. #pragma init_seg(lib)
  688.  
  689. _AFX_EXTDLL_STATE::~_AFX_EXTDLL_STATE()
  690. {
  691.     if (m_hInstCommCtrl != NULL)
  692. #ifndef _MAC
  693.         ::FreeLibrary(m_hInstCommCtrl);
  694.     if (m_hInstComDlg != NULL)
  695.         ::FreeLibrary(m_hInstComDlg);
  696.     if (m_hInstShell != NULL)
  697.         ::FreeLibrary(m_hInstShell);
  698.     if (m_hInstWinSpool != NULL)
  699.         ::FreeLibrary(m_hInstWinSpool);
  700.     if (m_hInstAdvApi != NULL)
  701.         ::FreeLibrary(m_hInstAdvApi);
  702.     if (m_hInstInternet != NULL)
  703.         ::FreeLibrary(m_hInstInternet);
  704. #else
  705.         REFreeLibrary(m_hInstCommCtrl);
  706. #endif
  707. }
  708.  
  709. PROCESS_LOCAL(_AFX_EXTDLL_STATE, _afxExtDllState)
  710.  
  711. #endif // _AFXDLL
  712.