prnsetupDlg.cpp
上传用户:jubilation
上传日期:2007-01-03
资源大小:18k
文件大小:7k
源码类别:

打印编程

开发平台:

Visual C++

  1. // prnsetupDlg.cpp : Implementierungsdatei
  2. //
  3. #include "stdafx.h"
  4. #include "prnsetup.h"
  5. #include "prnsetupDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CPrnsetupDlg Dialogfeld
  13. CPrnsetupDlg::CPrnsetupDlg(CWnd* pParent /*=NULL*/)
  14. : CDialog(CPrnsetupDlg::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CPrnsetupDlg)
  17. m_prn_filename1 = _T("");
  18. m_prn_filename2 = _T("");
  19. m_prn1 = _T("");
  20. m_prn2 = _T("");
  21. //}}AFX_DATA_INIT
  22. // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf ben鰐igt
  23. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  24. }
  25. void CPrnsetupDlg::DoDataExchange(CDataExchange* pDX)
  26. {
  27. CDialog::DoDataExchange(pDX);
  28. //{{AFX_DATA_MAP(CPrnsetupDlg)
  29. DDX_Control(pDX, IDC_LIST1, m_list);
  30. DDX_Text(pDX, IDC_PRN_FILENAME1, m_prn_filename1);
  31. DDX_Text(pDX, IDC_PRN_FILENAME2, m_prn_filename2);
  32. DDX_Text(pDX, IDC_PRN1, m_prn1);
  33. DDX_Text(pDX, IDC_PRN2, m_prn2);
  34. //}}AFX_DATA_MAP
  35. }
  36. BEGIN_MESSAGE_MAP(CPrnsetupDlg, CDialog)
  37. //{{AFX_MSG_MAP(CPrnsetupDlg)
  38. ON_WM_PAINT()
  39. ON_WM_QUERYDRAGICON()
  40. ON_BN_CLICKED(IDC_CHOOSE_PRN1, OnChoosePrn1)
  41. ON_BN_CLICKED(IDC_CHOOSE_PRN2, OnChoosePrn2)
  42. ON_BN_CLICKED(IDC_SAVE_PRN1, OnSavePrn1)
  43. ON_BN_CLICKED(IDC_SAVE_PRN2, OnSavePrn2)
  44. ON_BN_CLICKED(IDC_LOAD_PRN1, OnLoadPrn1)
  45. ON_BN_CLICKED(IDC_LOAD_PRN2, OnLoadPrn2)
  46. ON_BN_CLICKED(IDC_PRINT_SAMPLE_PRN1, OnPrintSamplePrn1)
  47. ON_BN_CLICKED(IDC_PRINT_SAMPLE_PRN2, OnPrintSamplePrn2)
  48. ON_BN_CLICKED(IDC_GLOBAL_PRINTER, OnGlobalPrinter)
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CPrnsetupDlg Nachrichten-Handler
  53. BOOL CPrnsetupDlg::OnInitDialog()
  54. {
  55. // Get MFC's default printer
  56. m_prn_setting1.CopyDefaultMfcPrinter();
  57. m_prn_setting2.CopyDefaultMfcPrinter();
  58. m_prn1 = m_prn_setting1.GetPrinterName();
  59. m_prn2 = m_prn_setting2.GetPrinterName();
  60. CDialog::OnInitDialog();
  61. ShowMessage("printer 1 " + m_prn_setting1.GetPrinterName());
  62. ShowMessage("printer 2 " + m_prn_setting1.GetPrinterName());
  63. // Symbol f黵 dieses Dialogfeld festlegen. Wird automatisch erledigt
  64. //  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
  65. SetIcon(m_hIcon, TRUE); // Gro遝s Symbol verwenden
  66. SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
  67. // ZU ERLEDIGEN: Hier zus鋞zliche Initialisierung einf黦en
  68. return TRUE;  // Geben Sie TRUE zur點k, au遝r ein Steuerelement soll den Fokus erhalten
  69. }
  70. // Wollen Sie Ihrem Dialogfeld eine Schaltfl鋍he "Minimieren" hinzuf黦en, ben鰐igen Sie 
  71. //  den nachstehenden Code, um das Symbol zu zeichnen. F黵 MFC-Anwendungen, die das 
  72. //  Dokument/Ansicht-Modell verwenden, wird dies automatisch f黵 Sie erledigt.
  73. void CPrnsetupDlg::OnPaint() 
  74. {
  75. if (IsIconic())
  76. {
  77. CPaintDC dc(this); // Ger鋞ekontext f黵 Zeichnen
  78. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  79. // Symbol in Client-Rechteck zentrieren
  80. int cxIcon = GetSystemMetrics(SM_CXICON);
  81. int cyIcon = GetSystemMetrics(SM_CYICON);
  82. CRect rect;
  83. GetClientRect(&rect);
  84. int x = (rect.Width() - cxIcon + 1) / 2;
  85. int y = (rect.Height() - cyIcon + 1) / 2;
  86. // Symbol zeichnen
  87. dc.DrawIcon(x, y, m_hIcon);
  88. }
  89. else
  90. {
  91. CDialog::OnPaint();
  92. }
  93. }
  94. void CPrnsetupDlg::ShowMessage(CString msg)
  95. {
  96. m_list.AddString(msg);
  97. m_list.SetCurSel( m_list.GetCount() - 1);
  98. }
  99. HCURSOR CPrnsetupDlg::OnQueryDragIcon()
  100. {
  101. return (HCURSOR) m_hIcon;
  102. }
  103. void CPrnsetupDlg::OnChoosePrn1() 
  104. {
  105. m_prn_setting1.PrinterSetup(this);
  106. m_prn1 = m_prn_setting1.GetPrinterName();
  107. UpdateData(FALSE);
  108. ShowMessage("printer 1 " + m_prn_setting1.GetPrinterName());
  109. }
  110. void CPrnsetupDlg::OnChoosePrn2() 
  111. {
  112. m_prn_setting2.PrinterSetup(this);
  113. m_prn2 = m_prn_setting2.GetPrinterName();
  114. UpdateData(FALSE);
  115. ShowMessage("printer 2 " + m_prn_setting2.GetPrinterName());
  116. }
  117. void CPrnsetupDlg::OnSavePrn1() 
  118. {
  119. UpdateData();
  120. if(m_prn_filename1.IsEmpty()) {
  121. ShowMessage("filename for printer 1 is empty");
  122. return;
  123. }
  124. NO_ERROR == m_prn_setting1.Save( m_prn_filename1) 
  125. ? ShowMessage("Save Printer1 ok for " + m_prn_filename1) 
  126. : ShowMessage("Save Printer1 error for " + m_prn_filename1);
  127. }
  128. void CPrnsetupDlg::OnSavePrn2() 
  129. {
  130. UpdateData();
  131. if(m_prn_filename2.IsEmpty()) {
  132. ShowMessage("filename for printer 2 is empty");
  133. return;
  134. }
  135. NO_ERROR == m_prn_setting2.Save( m_prn_filename2) 
  136. ? ShowMessage("Save Printer2 ok for " + m_prn_filename2) 
  137. : ShowMessage("Save Printer2 error for " + m_prn_filename2);
  138. }
  139. void CPrnsetupDlg::OnLoadPrn1() 
  140. {
  141. UpdateData();
  142. if(m_prn_filename1.IsEmpty()) {
  143. ShowMessage("filename for printer 1 is empty");
  144. return;
  145. }
  146. // load settings, store them in m_prn_settings1
  147. (NO_ERROR == m_prn_setting1.Load( m_prn_filename1)) 
  148. ? ShowMessage("Load Printer1 ok for " + m_prn_filename1) 
  149. : ShowMessage("Load Printer1 error for " + m_prn_filename1);
  150. m_prn1 = m_prn_setting1.GetPrinterName();
  151. UpdateData(FALSE);
  152. ShowMessage("printer 1 " + m_prn_setting1.GetPrinterName());
  153. }
  154. void CPrnsetupDlg::OnLoadPrn2() 
  155. {
  156. UpdateData();
  157. if(m_prn_filename2.IsEmpty()) {
  158. ShowMessage("filename for printer 2 is empty");
  159. return;
  160. }
  161. // load settings, store them in m_prn_settings2
  162. NO_ERROR == m_prn_setting2.Load( m_prn_filename2) 
  163. ? ShowMessage("Load Printer2 ok for " + m_prn_filename2) 
  164. : ShowMessage("Load Printer2 error for " + m_prn_filename2);
  165. m_prn2 = m_prn_setting2.GetPrinterName();
  166. UpdateData(FALSE);
  167. ShowMessage("printer 2 " + m_prn_setting2.GetPrinterName());
  168. }
  169. void CPrnsetupDlg::OnPrintSamplePrn1() 
  170. {
  171. // make m_prn_setting1 the MFC standard printer
  172. m_prn_setting1.SetThisPrinter();
  173. // Get DC of actual standard printer
  174. CDC dc;
  175. AfxGetApp()->CreatePrinterDC(dc);
  176. DOCINFO di;
  177. ZeroMemory(&di,sizeof(DOCINFO));
  178. di.cbSize = sizeof(DOCINFO);
  179. di.lpszDocName = "OnPrintSamplePrn1";
  180. dc.StartDoc(&di);
  181. dc.StartPage();
  182. dc.TextOut(42,42,"hello world for printer 1");
  183. dc.EndPage();
  184. dc.EndDoc();
  185. // Restore former printer
  186. m_prn_setting1.RestorePrinter();
  187. }
  188. void CPrnsetupDlg::OnPrintSamplePrn2() 
  189. {
  190. // make m_prn_setting2 the MFC standard printer
  191. m_prn_setting2.SetThisPrinter();
  192. // Get DC of actual standard printer
  193. CDC dc;
  194. AfxGetApp()->CreatePrinterDC(dc);
  195. DOCINFO di;
  196. ZeroMemory(&di,sizeof(DOCINFO));
  197. di.cbSize = sizeof(DOCINFO);
  198. di.lpszDocName = "OnPrintSamplePrn2";
  199. dc.StartDoc(&di);
  200. dc.StartPage();
  201. dc.TextOut(42,42,"hello world for printer 2");
  202. dc.EndPage();
  203. dc.EndDoc();
  204. // Restore former printer
  205. m_prn_setting2.RestorePrinter();
  206. }
  207. void CPrnsetupDlg::OnGlobalPrinter() 
  208. {
  209. if( !m_prn_setting1.ValidDevMode()) {
  210. ShowMessage("Printer1 not set");
  211. return;
  212. }
  213. if(m_prn_setting1.SetPrinterDevice(m_prn_setting1.GetPrinterName()) )
  214. ShowMessage("Global settings for printer1 changed!");
  215. else
  216. ShowMessage("Error changing global printer1 settings");
  217. }