WRAP3D.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:
Windows编程
开发平台:
Visual C++
- /*
- * WRAP3D.C
- */
- #include <windows.h>
- #include <mapix.h>
- #ifdef WIN16
- #include <memory.h>
- #endif
- #include <mapiwin.h>
- #include "wrap3d.h"
- STDAPI_(LPVOID)
- CTL3D_Initialize(HINSTANCE hinstMe)
- {
- UINT fuErr;
- HINSTANCE hinst = 0;
- BOOL fRegistered = FALSE; /* assume failure */
- FARPROC fpEnabled;
- FARPROC fpRegister;
- LPCTX3D pctx = NULL;
- DWORD dwVer;
- /*
- * //$ If the Win 4 shell is present, don't even look for the DLL.
- * //$ Need to verify this algorithm.
- */
- dwVer = GetVersion();
- if (LOBYTE(LOWORD(dwVer)) >= 4)
- goto fail;
- #ifdef _WIN32
- pctx = LocalAlloc(LPTR, sizeof(CTX3D));
- if (!pctx)
- goto fail;
- #else
- if (MAPIAllocateBuffer(sizeof(CTX3D), &pctx))
- goto fail;
- #endif
- ZeroMemory(pctx, sizeof(CTX3D));
- /* Attempt to load the DLL. Do not allow any error messages. */
- fuErr = SetErrorMode(SEM_NOOPENFILEERRORBOX);
- #ifdef _WIN32
- hinst = LoadLibraryA("CTL3D32.DLL");
- SetErrorMode(fuErr);
- if (!hinst)
- goto fail;
- #else
- hinst = LoadLibrary("CTL3DV2.DLL");
- SetErrorMode(fuErr);
- if (hinst < HINSTANCE_ERROR)
- goto fail;
- #endif
- /* Get the entry points we need. */
- if (!(fpEnabled = GetProcAddress(hinst, "Ctl3dEnabled")))
- goto fail;
- if (!(fpRegister = GetProcAddress(hinst, "Ctl3dRegister")))
- goto fail;
- if (!(pctx->fpUnregister = GetProcAddress(hinst, "Ctl3dUnregister")))
- goto fail;
- if (!(pctx->fpSubclassDlgEx = GetProcAddress(hinst, "Ctl3dSubclassDlgEx")))
- goto fail;
- if (!(pctx->fpColorChange = GetProcAddress(hinst, "Ctl3dColorChange")))
- goto fail;
- if ((pctx->fpIsAutoSubclass = GetProcAddress(hinst, "Ctl3dIsAutoSubclass")) &&
- (!(pctx->fpAutoSubclass = GetProcAddress(hinst, "Ctl3dAutoSubclass")) ||
- !(pctx->fpUnAutoSubclass = GetProcAddress(hinst, "Ctl3dUnAutoSubclass"))))
- goto fail;
- if (!(pctx->fpSubclassCtl = GetProcAddress(hinst, "Ctl3dSubclassCtl")))
- goto fail;
- if (!(pctx->fpGetVer = GetProcAddress(hinst, "Ctl3dGetVer")))
- goto fail;
- /* If we were not already registered, do so. */
- if (!(*fpEnabled)())
- pctx->fRegistered = (*fpRegister)(hinstMe);
- /* Remember the library handle. */
- pctx->hinst = hinst;
- pctx->hinstMe = hinstMe;
- ret:
- return pctx;
- fail:
- if (hinst)
- FreeLibrary(hinst);
- #ifdef _WIN32
- if (pctx)
- LocalFree(pctx);
- #else
- MAPIFreeBuffer(pctx);
- #endif
- pctx = NULL;
- goto ret;
- }
- STDAPI_(void)
- CTL3D_Uninitialize(LPVOID lpv)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv))
- return;
- if (pctx->fRegistered)
- (*(pctx->fpUnregister))(pctx->hinstMe);
- FreeLibrary(pctx->hinst);
- #ifdef _WIN32
- LocalFree(pctx);
- #else
- MAPIFreeBuffer(pctx);
- #endif
- }
- STDAPI_(void)
- CTL3D_Subclass(LPVOID lpv, HWND hwnd, DWORD dwFlags)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv))
- return;
- (*(pctx->fpSubclassDlgEx))(hwnd, dwFlags);
- }
- STDAPI_(void)
- CTL3D_AutoSubclass(LPVOID lpv, HINSTANCE hinst, BOOL FAR * lpfAuto)
- {
- LPCTX3D pctx;
- *lpfAuto = FALSE;
- if (!(pctx = (LPCTX3D) lpv) || !pctx->fpIsAutoSubclass)
- return;
- if (*lpfAuto = !pctx->fpIsAutoSubclass())
- pctx->fpAutoSubclass (hinst);
- return;
- }
- STDAPI_(BOOL)
- CTL3D_IsAutoSubclass(LPVOID lpv)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv) || !pctx->fpIsAutoSubclass)
- return FALSE;
- return pctx->fpIsAutoSubclass();
- }
- STDAPI_(void)
- CTL3D_CeaseAutoSubclass(LPVOID lpv, BOOL fAuto)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv) || !fAuto)
- return;
- pctx->fpUnAutoSubclass ();
- return;
- }
- STDAPI_(BOOL)
- CTL3D_ColorChange(LPVOID lpv)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv))
- return FALSE;
- return pctx->fpColorChange();
- }
- STDAPI_(BOOL)
- CTL3D_SubclassCtl(LPVOID lpv, HWND hwnd)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv))
- return FALSE;
- return pctx->fpSubclassCtl(hwnd);
- }
- STDAPI_(WORD)
- CTL3D_GetVer(LPVOID lpv)
- {
- LPCTX3D pctx;
- if (!(pctx = (LPCTX3D) lpv))
- return 0;
- return pctx->fpGetVer();
- }