|
// mainfrm.h
class CMainFrame : public CFrameWindowImpl<CMainFrame>, public CUpdateUI<CMainFrame>,
public CMessageFilter,
public CIdleHandler, public CPrintJobInfo
{
CPrinter
m_printerCur; // ÇöÀçÀÇ ÇÁ¸°ÅÍ ÇÚµé
CDevMode
m_devmodeCur; // ÇöÀçÀÇ ÇÁ¸°ÅÍÀÇ ¼³Á¤
CPrintJob
m_job;
// Àμâ ÀÛ¾÷
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()
virtual bool IsValidPage(UINT
nPage){
// ÃÖÃÊÀÇ ÆäÀÌÁö¸¸ Àμâ
return (nPage == 0);
}
virtual bool PrintPage(UINT
nPage, HDC hDC){
// ÃÖÃÊÀÇ ÆäÀÌÁö¸¸ Àμâ
if(nPage >= 1)
return false;
CRect rect(0, 0,
::GetDeviceCaps(hDC,
HORZRES), ::GetDeviceCaps(hDC,
VERTRES));
Draw(hDC, rect);
return true;
}
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);
// Àμâ ÀÛ¾÷À» °³½Ã
m_job.StartPrintJob(false, m_printerCur,
m_devmodeCur, this,
_T("WTL¿¡ ÀÇÇÑ Àμâ Å×½ºÆ®"), 0, 0, (dlg.PrintToFile() != FALSE));
}
// ´ÙÀ̾ó·Î±×ÀÇ ÃʱâÈ·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ÇØ¹æ
::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);
}
};
|