< Àμâ ÇÁ·ÓÆÛƼ
½ÃÆ® >
Windows 2000 ÀÌÈÄ¿¡¼´Â Àμ⠴ÙÀ̾ó·Î±× ´ë½Å¿¡ Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. WTLÀº Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®¸¦ CPrintDialogExImpl À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â ATLÀÇ CDialogImpl Ŭ·¡½º¿Í °°ÀÌ base
class·Î¼ º¸°í »ç¿ëÇÕ´Ï´Ù. atldlgs.h Çì´õ¿¡¼´Â CPrintDialogExImpl Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º·Î¼ CPrintDialogEx Ŭ·¡½º°¡ Á¤ÀÇ µÇ°í ÀÖ½À´Ï´Ù.
|
// atldlgs.h class CPrintDialogEx : public CPrintDialogExImpl<CPrintDialogEx> { ... ... |
¡¡WTLÀÇ CPrintDialogEx Ŭ·¡½ºÀÇ »ç¿ë¹ýÀº CPrintDialog Ŭ·¡½º¿Í °ÅÀÇ °°½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº Àüȸ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥À» °íÃÄ ½á CPrintDialogEx Ŭ·¡½º·ÎºÎÅÍ ÇÁ¸°ÅÍ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// stdafx.h #define WINVER 0x0500 #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlframe.h> #include <atldlgs.h> // CPrintDialogExŬ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ(¶§¹®¿¡) #include <atlprint.h> |
|
// mainfrm.h class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler { CPrinter
m_printerCur; // ÇöÀçÀÇ ÇÁ¸°ÅÍ ÇÚµé CDevMode
m_devmodeCur; // ÇöÀçÀÇ ÇÁ¸°ÅÍÀÇ ¼³Á¤ public:
DECLARE_FRAME_WND_CLASS_EX(_T("WTL:PrintSample"),
IDR_MAINFRAME, CS_HREDRAW
| CS_VREDRAW | CS_DBLCLKS, COLOR_WINDOW) // constructor¡¡ ¡¡ CMainFrame(){ // µðÆúÆ® ÇÁ¸°Å͸¦ ¿ÀÇ m_printerCur.OpenDefaultPrinter(); m_devmodeCur.CopyFromPrinter(m_printerCur); } virtual BOOL
PreTranslateMessage(MSG* pMsg){ return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg); } virtual
BOOL OnIdle(){ return FALSE; } BEGIN_UPDATE_UI_MAP(CMainFrame) // ¿£Æ®¸® ¾øÀ½ END_UPDATE_UI_MAP() BEGIN_MSG_MAP_EX(CMainFrame)
MSG_WM_PAINT(OnPaint)
MSG_WM_CREATE(OnCreate)
COMMAND_ID_HANDLER_EX(ID_FILE_PRINT, OnFilePrint)
COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnMenuExit)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>) CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>) END_MSG_MAP() void
Draw(HDC hDC, CRect& rect){ CDCHandle dc(hDC); dc.DrawText(_T("Hello, ATL/WTL"), -1,
rect, DT_CENTER | DT_VCENTER |
DT_SINGLELINE); } void OnPaint(HDC /*hDC*/){ CPaintDC dc(m_hWnd); CRect rect; GetClientRect(rect);
Draw(dc, rect); } LRESULT OnCreate(LPCREATESTRUCT lpcs){ // ¸Þ½ÃÁö ·çÇÁ¿¡ ¸Þ¼¼Áö ÇÊÅÍ¿Í
¾ÆÀ̵¹ Çڵ鷯¸¦ Ãß°¡ CMessageLoop* pLoop = _Module.GetMessageLoop(); pLoop->AddMessageFilter(this); pLoop->AddIdleHandler(this); return 0; } void OnFilePrint(UINT uNotifyCode, int nID, HWND hWndCtl){ CPrintDialogEx dlg; // ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈ dlg.m_pdex.hDevMode = m_devmodeCur.CopyToHDEVMODE(); dlg.m_pdex.hDevNames = m_printerCur.CopyToHDEVNAMES(); if(SUCCEEDED(dlg.DoModal())){
// [Àμâ]¹öư ¶Ç´Â[Àû¿ë]¹öưÀ»
´·¶À» °æ¿ì
if(dlg.m_pdex.dwResultAction
== PD_RESULT_PRINT ||
dlg.m_pdex.dwResultAction ==
PD_RESULT_APPLY)
{
// ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸
m_devmodeCur.CopyFromHDEVMODE(dlg.m_pdex.hDevMode);
// ÇöÀçÀÇ ÇÁ¸°ÅÍ ÇÚµéÀ» Ŭ·Î¿ìÁî ÇØ , »õ·Î¿î ÇÚµéÀ» ¿ÀÇÂ
m_printerCur.ClosePrinter();
m_printerCur.OpenPrinter(dlg.m_pdex.hDevNames,
m_devmodeCur);
}
// [Àμâ]¹öưÀ» ´·¶À» °æ¿ì
if(dlg.m_pdex.dwResultAction
== PD_RESULT_PRINT){
CPrinterDC dc(m_printerCur,
m_devmodeCur);
DOCINFO di = {sizeof(di), _T("WTL¿¡ ÀÇÇÑ Àμâ Å×½ºÆ®")};
if(dc.StartDoc(&di) > 0){
if(dc.StartPage()
> 0){
CRect rect(0, 0,
dc.GetDeviceCaps(HORZRES), dc.GetDeviceCaps(VERTRES));
Draw(dc, rect);
if(dc.EndPage()
> 0)
dc.EndDoc();
}
}
} } // ´ÙÀ̾ó·Î±×ÀÇ ÃʱâÈ·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ÇØ¹æ ::GlobalFree(dlg.m_pdex.hDevMode); ::GlobalFree(dlg.m_pdex.hDevNames); } void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){ PostMessage(WM_CLOSE); } }; |
|
// app.cpp #include "stdafx.h" #include "resource.h" #include "mainfrm.h" CAppModule _Module; int WINAPI _tWinMain(HINSTANCE
hInstance, HINSTANCE, LPTSTR lpCmdLine,
int nCmdShow) { HRESULT hRes = ::CoInitialize(NULL); ATLASSERT(SUCCEEDED(hRes)); ::DefWindowProc(NULL,
0, 0, 0L); AtlInitCommonControls(ICC_COOL_CLASSES
| ICC_WIN95_CLASSES); hRes
= _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); int nRet = 0; // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà { CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); CMainFrame wnd; wnd.CreateEx(); wnd.ShowWindow(nCmdShow); wnd.UpdateWindow(); nRet = theLoop.Run(); _Module.RemoveMessageLoop(); } _Module.Term(); ::CoUninitialize(); return nRet; } |
¡¡¿ì¼± stdafx.h ¿¡¼´Â CPrintDialogEx Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ WINVER¸¦ 0x0500¿¡ Á¤ÀÇÇÏ°í ³ª¼ atldlgs.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ¸Þ´º ¾ÆÀÌÅÛ [Àμâ](ID£ºID_FILE_PRINT) ¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ º¯°æÇÕ´Ï´Ù. ÀÌ Çڵ鷯 ¿¡¼´Â ¿ì¼± CPrintDialogEx Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù. CPrintDialogEx Ŭ·¡½ºÀÇ constructorÀμö´Â ¸ðµÎ »ý·« ÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸ , Á¦1Àμö¿¡´Â Ç÷¡±×, Á¦2Àμö¿¡´Â ºÎ¸ð À©µµ¿ìÀÇ ÇÚµéÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀνºÅϽº¸¦ ÀÛ¼ºÇÑ ÈÄ ´Â ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈ ÇÕ´Ï´Ù.
Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®¸¦ Ç¥½ÃÇϱâ À§Çؼ´Â DoModal()À» »ç¿ëÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö°¡ ¼º°øÇßÀ» °æ¿ì´Â ¹Ýȯ °ªÀ¸·Î¼ S_OK°¡ µ¹¾Æ°¡ Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®·Î ´©¸¥ ¹öư¿¡ ÀÇÇØ PRINTDLGEX
ÇüÅÂÀÇ ¸â¹ö º¯¼ö m_pdexÀÇ dwResultAction ¸â¹ö¿¡ ´ÙÀ½ÀÇ °ªÀÌ ¼³Á¤µË´Ï´Ù.
|
¹öư¸í |
dlg.m_pdex.dwResultActionÀÇ °ª |
|
[Àμâ] |
PD_RESULT_PRINT |
|
[ĵ½½] |
PD_RESULT_CANCEL |
|
[Àû¿ë]À» ´©¸£°í ³ª¼[ĵ½½] |
PD_RESULT_APPLY |
À̹ø ¿¹ ¿¡¼´Â [Àμâ] ¹öưÀ» ´·¯ Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®¸¦ ´Ý¾ÒÀ» °æ¿ì´Â ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸ÇÏ°í ³ª¼ »õ·Î¿î ÇÁ¸°ÅÍ ÇÚµéÀ» ¿ÀÇÂÇÏ¿© ÇÑÃþ ´õ ÇÁ¸°ÅÍ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇØ Àμ⸦ °³½ÃÇÕ´Ï´Ù. [Àû¿ë] ¹öưÀ» ´©¸£°í ³ª¼ [ĵ½½] ¹öưÀ» ´·¯ Àμâ ÇÁ·ÓÆÛƼ ½ÃÆ®¸¦ ´Ý¾ÒÀ» °æ¿ì´Â ´ÜÁö ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸ÇØ »õ·Î¿î ÇÁ¸°ÅÍ ÇÚµéÀ» ¿ÀÇ Çϰí ÀÖ½À´Ï´Ù.