DLL中的页面设置对话框 /* 单独使用这个函数就可以实现 1 系统设置的信息(DEVMODE *lpDevMode),反映在页面设置对话框中 2 页面设置对话框中的信息,自动反映到系统信息中(DEVMODE *lpDevMode) 3 通过调用API来弹出页面设置对话框 4 CWinApp中的调用代码如下 BOOL bRet; PRINTDLG pd; pd.lStructSize = (DWORD) sizeof(PRINTDLG); // 取得系统打印设置 if (GetPrinterDeviceDefaults(&pd)) { // Lock memory handle. DEVMODE FAR* pDevMode = (DEVMODE FAR*)::GlobalLock(m_hDevMode); if (pDevMode) { RECT rtMargin; ApiSetPageDlg(NULL, pDevMode,&rtMargin); } ::GlobalUnlock(m_hDevMode); } */ BOOL CComOptDrawDlgPrintSetup::ApiSetPageDlg(HWND hwnd, DEVMODE *lpDevMode, LPRECT lprtMargin) { //m_psd.hDevMode = m_hMODE; HINSTANCE hOld = AfxGetResourceHandle(); HMODULE hDllHandle = AfxLoadLibrary(_T("ComOptDrawBase.dll")); AfxSetResourceHandle(hDllHandle); PAGESETUPDLG psd; HRESULT hResult; if(!lpDevMode && !lprtMargin) return FALSE; SecureZeroMemory(&psd,sizeof(psd)); psd.lStructSize = sizeof(psd); psd.hwndOwner = hwnd; psd.hInstance = hDllHandle; psd.lpPageSetupTemplateName = MAKEINTRESOURCE(IDD_DLG_PRINT_SETUP); psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS|PSD_ENABLEPAGESETUPTEMPLATE; psd.Flags = PSD_INHUNDREDTHSOFMILLIMETERS; if(lprtMargin) { psd.Flags |= PSD_MARGINS; psd.rtMargin = *lprtMargin; } if(lpDevMode) { psd.hDevMode = GlobalAlloc(GMEM_MOVEABLE,sizeof(DEVMODE)); if(!psd.hDevMode) return FALSE; CopyMemory(GlobalLock(psd.hDevMode),lpDevMode,sizeof(DEVMODE)); GlobalUnlock(psd.hDevMode); } //DoModal(); if(hResult = PageSetupDlg(&psd)) { if(psd.hDevMode && lpDevMode) { CopyMemory(lpDevMode,GlobalLock(psd.hDevMode),sizeof(DEVMODE)); GlobalUnlock(psd.hDevMode); } if(lprtMargin) *lprtMargin = psd.rtMargin; } if(psd.hDevMode) GlobalFree(psd.hDevMode); if(psd.hDevNames) GlobalFree(psd.hDevNames); // BOOL bRet = CDialog::Create(IDD_DLG_SHOW_PICTURE, pParentWnd); AfxSetResourceHandle(hOld); AfxFreeLibrary(hDllHandle); return hResult; }