⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_57107.htm

📁 vc
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>
序号:57107 发表者:最后一根稻草 发表日期:2003-10-22 21:50:53
<br>主题:如何看MFC源代码
<br>内容:最近看打印的问题,发现纸张设置类里没有自定义的形式,便想看看CPageSetupDialog在MFC中是怎样定义的,高手指点?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-10-23 09:29:37
<br>内容:Mfc很大部分源码都隐藏了,只能看到头文件。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:最后一根稻草 回复日期:2003-10-23 10:01:17
<br>内容:我的意思就是用什么办法能看到隐藏的代码,我想修改CPageSetupDialog类的使用方法,高手指点
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-10-23 10:11:15
<br>内容:全是lib,改不了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:jackyxio 回复日期:2003-10-23 10:11:49
<br>内容:想改的话,用继承就行了啊。重载。。。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-10-23 12:26:38
<br>内容:// This is a part of the Microsoft Foundation Classes C++ library.<BR>// Copyright (C) 1992-1998 Microsoft Corporation<BR>// All rights reserved.<BR>//<BR>// This source code is only intended as a supplement to the<BR>// Microsoft Foundation Classes Reference and related<BR>// electronic documentation provided with the library.<BR>// See these sources for detailed information regarding the<BR>// Microsoft Foundation Classes product.<BR><BR>#include &#34;stdafx.h&#34;<BR>#include &lt;dlgs.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // for standard control IDs for commdlg<BR><BR>#ifdef AFX_AUX_SEG<BR>#pragma code_seg(AFX_AUX_SEG)<BR>#endif<BR><BR>#ifdef _DEBUG<BR>#undef THIS_FILE<BR>static char THIS_FILE[] = __FILE__;<BR>#endif<BR><BR>#define new DEBUG_NEW<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// Page Setup dialog<BR><BR>CPageSetupDialog::CPageSetupDialog(DWORD dwFlags, CWnd* pParentWnd) :<BR>&nbsp;&nbsp;&nbsp;&nbsp;CCommonDialog(pParentWnd)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;m_psd, 0, sizeof(m_psd));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_psd.lStructSize = sizeof(m_psd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_psd.Flags = (dwFlags | PSD_ENABLEPAGESETUPHOOK | PSD_ENABLEPAGEPAINTHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!afxData.bWin4 &amp;&amp; AfxHelpEnabled())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_psd.Flags |= PSD_SHOWHELP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_psd.lpfnPageSetupHook = (COMMDLGPROC)_AfxCommDlgProc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_psd.lpfnPagePaintHook = (COMMDLGPROC)CPageSetupDialog::PaintHookProc;<BR>}<BR><BR>int CPageSetupDialog::DoModal()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_psd.Flags &amp; PSD_ENABLEPAGESETUPHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_psd.Flags &amp; PSD_ENABLEPAGEPAINTHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_psd.lpfnPageSetupHook != NULL); // can still be a user hook<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_psd.lpfnPagePaintHook != NULL); // can still be a user hook<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_psd.hwndOwner = PreModal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nResult = ::PageSetupDlg(&amp;m_psd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;PostModal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;return nResult ? nResult : IDCANCEL;<BR>}<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>// CPageSetupDialog attributes<BR><BR>LPDEVMODE CPageSetupDialog::GetDevMode() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.hDevMode == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPDEVMODE)::GlobalLock(m_psd.hDevMode);<BR>}<BR><BR>CString CPageSetupDialog::GetDriverName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_psd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wDriverOffset;<BR>}<BR><BR>CString CPageSetupDialog::GetDeviceName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_psd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wDeviceOffset;<BR>}<BR><BR>CString CPageSetupDialog::GetPortName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_psd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wOutputOffset;<BR>}<BR><BR>// Create an HDC from the devnames and devmode.<BR>HDC CPageSetupDialog::CreatePrinterDC()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return AfxCreateDC(m_psd.hDevNames, m_psd.hDevMode);<BR>}<BR><BR>void CPageSetupDialog::GetMargins(LPRECT lpRectMargins, LPRECT lpRectMinMargins) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (lpRectMargins != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(lpRectMargins, &amp;m_psd.rtMargin, sizeof(RECT));<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (lpRectMinMargins != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(lpRectMinMargins, &amp;m_psd.rtMinMargin, sizeof(RECT));<BR>}<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>// CPageSetupDialog diagnostics<BR><BR>#ifdef _DEBUG<BR>void CPageSetupDialog::Dump(CDumpContext&amp; dc) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog::Dump(dc);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;m_psd.hwndOwner = &#34; &lt;&lt; (UINT)m_psd.hwndOwner;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_psd.Flags = &#34; &lt;&lt; (LPVOID)m_psd.Flags;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_psd.ptPaperSize = &#34; &lt;&lt; m_psd.ptPaperSize;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_psd.rtMinMargin = &#34; &lt;&lt; m_psd.rtMinMargin;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_psd.rtMinMargin = &#34; &lt;&lt; m_psd.rtMinMargin;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.lpfnPageSetupHook == (COMMDLGPROC)_AfxCommDlgProc)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nsetup hook function set to standard MFC hook function&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nsetup hook function set to non-standard hook function&#34;;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_psd.lpfnPagePaintHook == (COMMDLGPROC)_AfxCommDlgProc)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nprint hook function set to standard MFC hook function&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nprint hook function set to non-standard hook function&#34;;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\n&#34;;<BR>}<BR>#endif //_DEBUG<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>// CPageSetupDialog hook<BR><BR>UINT CPageSetupDialog::PreDrawPage(WORD /*wPaperType*/, WORD /*wFlags*/,<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPPAGESETUPDLG)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//return 1 to prevent any more drawing<BR>}<BR><BR>UINT CPageSetupDialog::OnDrawPage(CDC*, UINT /*nMessage*/, LPRECT)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0; // do the default<BR>}<BR><BR>UINT CALLBACK CPageSetupDialog::PaintHookProc(HWND hWnd, UINT message, WPARAM wParam,<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (hWnd == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// Get our Window<BR>&nbsp;&nbsp;&nbsp;&nbsp;// assume it is already wired up to a permanent one<BR>&nbsp;&nbsp;&nbsp;&nbsp;// the hWnd is the HWND of a control in the page setup proc<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPageSetupDialog* pDlg = DYNAMIC_DOWNCAST(CPageSetupDialog,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd::FromHandlePermanent(::GetParent(hWnd)));<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (pDlg == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;switch (message)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_PAGESETUPDLG:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pDlg-&gt;PreDrawPage(LOWORD(wParam), HIWORD(wParam),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPPAGESETUPDLG) lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_FULLPAGERECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_MINMARGINRECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_MARGINRECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_GREEKTEXTRECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_ENVSTAMPRECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PSD_YAFULLPAGERECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pDlg-&gt;OnDrawPage(CDC::FromHandle((HDC)wParam), message, (LPRECT)lParam);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>}<BR><BR>/////////////////////////////////////////////////////////////////////////////<BR>// Print/Print Setup dialog<BR><BR>BEGIN_MESSAGE_MAP(CPrintDialog, CCommonDialog)<BR>&nbsp;&nbsp;&nbsp;&nbsp;//{{AFX_MSG_MAP(CPrintDialog)<BR>&nbsp;&nbsp;&nbsp;&nbsp;ON_COMMAND(psh1, OnPrintSetup) // print setup button when print is displayed<BR>&nbsp;&nbsp;&nbsp;&nbsp;//}}AFX_MSG_MAP<BR>END_MESSAGE_MAP()<BR><BR>CPrintDialog::CPrintDialog(BOOL bPrintSetupOnly,<BR>&nbsp;&nbsp;&nbsp;&nbsp;DWORD dwFlags, CWnd* pParentWnd)<BR>&nbsp;&nbsp;&nbsp;&nbsp;: m_pd(m_pdActual), CCommonDialog(pParentWnd)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;memset(&amp;m_pdActual, 0, sizeof(m_pdActual));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.lStructSize = sizeof(m_pdActual);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags = (dwFlags | PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!afxData.bWin4 &amp;&amp; AfxHelpEnabled())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags |= PD_SHOWHELP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.lpfnPrintHook = (COMMDLGPROC)_AfxCommDlgProc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.lpfnSetupHook = (COMMDLGPROC)_AfxCommDlgProc;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (bPrintSetupOnly)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nIDHelp = AFX_IDD_PRINTSETUP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags |= PD_PRINTSETUP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_nIDHelp = AFX_IDD_PRINT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags |= PD_RETURNDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags &amp;= ~PD_RETURNIC; // do not support information context<BR>}<BR><BR>// Helper ctor for AttachOnSetup<BR>CPrintDialog::CPrintDialog(PRINTDLG&amp; pdInit)<BR>&nbsp;&nbsp;&nbsp;&nbsp;: m_pd(pdInit), CCommonDialog(NULL)<BR>{<BR>}<BR><BR>// Function to keep m_pd in sync after user invokes Setup from<BR>// the print dialog (via the Setup button)<BR>// If you decide to handle any messages/notifications and wish to<BR>// handle them differently between Print/PrintSetup then override<BR>// this function and create an object of a derived class<BR>CPrintDialog* CPrintDialog::AttachOnSetup()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CPrintDialog* pDlgSetup;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDlgSetup = new CPrintDialog(m_pd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDlgSetup-&gt;m_hWnd = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDlgSetup-&gt;m_pParentWnd = m_pParentWnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDlgSetup-&gt;m_nIDHelp = AFX_IDD_PRINTSETUP;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return pDlgSetup;<BR>}<BR><BR>void CPrintDialog::OnPrintSetup()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CPrintDialog* pDlgSetup = AttachOnSetup();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(pDlgSetup != NULL);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxHookWindowCreate(pDlgSetup);<BR>&nbsp;&nbsp;&nbsp;&nbsp;Default();<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxUnhookWindowCreate();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;delete pDlgSetup;<BR>}<BR><BR>int CPrintDialog::DoModal()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_pd.Flags &amp; PD_ENABLEPRINTHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_pd.Flags &amp; PD_ENABLESETUPHOOK);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_pd.lpfnPrintHook != NULL); // can still be a user hook<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(m_pd.lpfnSetupHook != NULL); // can still be a user hook<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.hwndOwner = PreModal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nResult = ::PrintDlg(&amp;m_pd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;PostModal();<BR>&nbsp;&nbsp;&nbsp;&nbsp;return nResult ? nResult : IDCANCEL;<BR>}<BR><BR>// Create an HDC without calling DoModal.<BR>HDC CPrintDialog::CreatePrinterDC()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.hDC = AfxCreateDC(m_pd.hDevNames, m_pd.hDevMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return m_pd.hDC;<BR>}<BR><BR>int CPrintDialog::GetCopies() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(this);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.Flags &amp; PD_USEDEVMODECOPIES)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return GetDevMode()-&gt;dmCopies;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return m_pd.nCopies;<BR>}<BR><BR>LPDEVMODE CPrintDialog::GetDevMode() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.hDevMode == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPDEVMODE)::GlobalLock(m_pd.hDevMode);<BR>}<BR><BR>CString CPrintDialog::GetDriverName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_pd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wDriverOffset;<BR>}<BR><BR>CString CPrintDialog::GetDeviceName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_pd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wDeviceOffset;<BR>}<BR><BR>CString CPrintDialog::GetPortName() const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return afxEmptyString;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(m_pd.hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (LPCTSTR)lpDev + lpDev-&gt;wOutputOffset;<BR>}<BR><BR>// this function must not be in afxdlgs.inl because of DLL delay loading<BR>BOOL CPrintDialog::GetDefaults()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pd.Flags |= PD_RETURNDEFAULT;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return ::PrintDlg(&amp;m_pd);<BR>}<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>// CPrintDialog diagnostics<BR><BR>#ifdef _DEBUG<BR>void CPrintDialog::Dump(CDumpContext&amp; dc) const<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDialog::Dump(dc);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;m_pd.hwndOwner = &#34; &lt;&lt; (UINT)m_pd.hwndOwner;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.hDC != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.hDC = &#34; &lt;&lt; CDC::FromHandle(m_pd.hDC);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.Flags = &#34; &lt;&lt; (LPVOID)m_pd.Flags;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.nFromPage = &#34; &lt;&lt; m_pd.nFromPage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.nToPage = &#34; &lt;&lt; m_pd.nToPage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.nMinPage = &#34; &lt;&lt; m_pd.nMinPage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.nMaxPage = &#34; &lt;&lt; m_pd.nMaxPage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nm_pd.nCopies = &#34; &lt;&lt; m_pd.nCopies;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.lpfnSetupHook == (COMMDLGPROC)_AfxCommDlgProc)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nsetup hook function set to standard MFC hook function&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nsetup hook function set to non-standard hook function&#34;;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (m_pd.lpfnPrintHook == (COMMDLGPROC)_AfxCommDlgProc)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nprint hook function set to standard MFC hook function&#34;;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\nprint hook function set to non-standard hook function&#34;;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;dc &lt;&lt; &#34;\n&#34;;<BR>}<BR>#endif //_DEBUG<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>// AfxCreateDC<BR><BR>HDC AFXAPI AfxCreateDC(HGLOBAL hDevNames, HGLOBAL hDevMode)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (hDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVNAMES lpDevNames = (LPDEVNAMES)::GlobalLock(hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;LPDEVMODE&nbsp;&nbsp;lpDevMode = (hDevMode != NULL) ?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPDEVMODE)::GlobalLock(hDevMode) : NULL;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (lpDevNames == NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return NULL;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;HDC hDC = ::CreateDC((LPCTSTR)lpDevNames + lpDevNames-&gt;wDriverOffset,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPCTSTR)lpDevNames + lpDevNames-&gt;wDeviceOffset,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(LPCTSTR)lpDevNames + lpDevNames-&gt;wOutputOffset,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lpDevMode);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock(hDevNames);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (hDevMode != NULL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::GlobalUnlock(hDevMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return hDC;<BR>}<BR><BR>#ifdef AFX_INIT_SEG<BR>#pragma code_seg(AFX_INIT_SEG)<BR>#endif<BR><BR>IMPLEMENT_DYNAMIC(CPrintDialog, CDialog)<BR>IMPLEMENT_DYNAMIC(CPageSetupDialog, CDialog)<BR><BR>////////////////////////////////////////////////////////////////////////////<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -