< ÆäÀÌÁö ¼³Á¤ ´ÙÀ̾ó·Î±× >
CPrintDialog Ŭ·¡½ºÀÇ constructorÀÇ Á¦ 1Àμö¿¡ TRUE¸¦ ÁöÁ¤Çϸé [ÇÁ¸°ÅÍÀÇ ¼³Á¤] ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸ MSDN¿¡ ÀÇÇϸé [ÆäÀÌÁö ¼³Á¤] ´ÙÀ̾ó·Î±×ÀÇ »ç¿ëÀ» ÃßõÇÒ ¼ö ÀÖ°í ÀÖ½À´Ï´Ù. WTLÀº ÆäÀÌÁö ¼³Á¤ ´ÙÀ̾ó·Î±×¸¦ CPageSetupDialogImpl À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â ATLÀÇCDialogImpl Ŭ·¡½º¿Í °°ÀÌ base
class·Î¼ º¸°í »ç¿ëÇÕ´Ï´Ù. atldlgs.h Çì´õ¿¡¼´Â CPageSetupDialogImpl Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½º·Î¼ CPageSetupDialog Ŭ·¡½º°¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
|
// atldlgs.h class CPageSetupDialog : public CPageSetupDialogImpl<CPageSetupDialog> { ... ... |
¡¡WTLÀÇ CPageSetupDialog Ŭ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ÀÌÀü ÀÛ¼ºÇÑ Àμ⠴ÙÀ̾ó·Î±×¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡ ÆäÀÌÁö ¼³Á¤ ´ÙÀ̾ó·Î±×¸¦ ¿©´Â ±â´ÉÀ» Ãß°¡ÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlframe.h> #include <atldlgs.h> // CPrintDialog,CPageSetupDialogŬ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ(¶§¹®¿¡) #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_FILE_PRINT_SETUP,
OnFilePrintSetup)
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){ CPrintDialog dlg; // ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈ dlg.m_pd.hDevMode = m_devmodeCur.CopyToHDEVMODE(); dlg.m_pd.hDevNames = m_printerCur.CopyToHDEVNAMES(); if(dlg.DoModal() == IDOK){
// ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸
m_devmodeCur.CopyFromHDEVMODE(dlg.m_pd.hDevMode);
// ÇöÀçÀÇ ÇÁ¸°ÅÍ ÇÚµéÀ» Ŭ·Î¿ìÁî ÇØ , »õ·Î¿î ÇÚµéÀ» ¿ÀÇÂ
m_printerCur.ClosePrinter();
m_printerCur.OpenPrinter(dlg.m_pd.hDevNames,
m_devmodeCur);
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_pd.hDevMode); ::GlobalFree(dlg.m_pd.hDevNames); } void OnFilePrintSetup(UINT uNotifyCode,
int nID, HWND hWndCtl){ CPageSetupDialog dlg; // ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈ dlg.m_psd.hDevMode = m_devmodeCur.CopyToHDEVMODE(); dlg.m_psd.hDevNames = m_printerCur.CopyToHDEVNAMES(); if(dlg.DoModal() == IDOK){
// ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸
m_devmodeCur.CopyFromHDEVMODE(dlg.m_psd.hDevMode);
// ÇöÀçÀÇ ÇÁ¸°ÅÍ ÇÚµéÀ» Ŭ·Î¿ìÁî ÇØ , »õ·Î¿î ÇÚµéÀ» ¿ÀÇÂ
m_printerCur.ClosePrinter();
m_printerCur.OpenPrinter(dlg.m_psd.hDevNames,
m_devmodeCur); } // ´ÙÀ̾ó·Î±×ÀÇ ÃʱâÈ·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ÇØ¹æ ::GlobalFree(dlg.m_psd.hDevMode); ::GlobalFree(dlg.m_psd.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; } |
¡¡¿ì¼± µµ±¸¸ðÀ½ ÀÚ¿øÀÇ [ÆÄÀÏ] ÀÌÇÏ¿¡ [ÆäÀÌÁö ¼³Á¤] ¸Þ´º ¾ÆÀÌÅÛÀ» Ãß°¡ÇØ ID·Î ID_FILE_PRINT_SETUP¸¦ ¼³Á¤ÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ ÀÌ ID¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯 ¿¡¼´Â ¿ì¼± CPageSetupDialog Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù. CPageSetupDialog Ŭ·¡½ºÀÇ constructorÀÇ Àμö´Â ¸ðµÎ »ý·« ÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸ Á¦ 1Àμö¿¡´Â Ç÷¡±×,
Á¦ 2Àμö¿¡´Â ºÎ¸ð À©µµ¿ìÀÇ ÇÚµéÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀνºÅϽº¸¦ ÀÛ¼ºÇÑ ÈÄ ´Â ´ÙÀ̾ó·Î±×¸¦ ÃʱâÈÇÕ´Ï´Ù.
ÆäÀÌÁö ¼³Á¤ ´ÙÀ̾ó·Î±×¸¦ Ç¥½ÃÇϱâ À§Çؼ´Â DoModal()À» »ç¿ëÇÕ´Ï´Ù. [OK] ¹öưÀ» ´·¯ ÆäÀÌÁö ¼³Á¤ ´ÙÀ̾ó·Î±×¸¦ ´Ý¾ÒÀ» °æ¿ì´Â ¹Ýȯ °ªÀ¸·Î¼
IDOK°¡ [ĵ½½]À» ´·¯ ´Ý¾ÒÀ» °æ¿ì´Â IDCANCELÀÌ µÇµ¹¾Æ ¿É´Ï´Ù.
IDOK°¡ µÇµ¹¾Æ ¿ÔÀ» °æ¿ì´Â GetPaperSize()À» È£ÃâÇØ ¿ëÁö »çÀÌÁ ÃëµæÇϰųª GetMargins()¸¦ È£ÃâÇØ ¸¶ÁøÀÇ ¼³Á¤À» ÃëµæÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. À̹ø ¿¹ ¿¡¼´Â ´ÜÁö ÇÁ¸°ÅÍÀÇ ¼³Á¤À» º¸Á¸ÇØ »õ·Î¿î ÇÁ¸°ÅÍ ÇÚµéÀ» ¿ÀÇ Çϰí ÀÖ½À´Ï´Ù.