< ÇÁ¸°Æ® µð¹ÙÀ̽º ÄÁÅØ½ºÆ® >

WTLÀº ÇÁ¸°ÅÍ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ CPrinterDC Ŭ·¡½º¿¡¼­ ĸ½¶È­Çϰí ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½º´Â ´Ù¸¥ µð¹ÙÀ̽º ÄÁÅØ½ºÆ® Ŭ·¡½º¿Í °°°Ô CDC Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýÇϰí ÀÖ½À´Ï´Ù.

¡¡
ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CPrinterDC Ŭ·¡½º¸¦ »ç¿ëÇØ µðÆúÆ® ÇÁ¸°ÅÍÀÇ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇÏ¿© ¿ëÁöÀÇ Áß¾Ó¿¡  ¡¸Hello, ATL/WTL¡¹ À̶ó°í Çϴ ij¸¯ÅÍ ¶óÀÎÀ» ÀμâÇÏ´Â ¿¹ ÀÔ´Ï´Ù.  ¸Þ´º·ÎºÎÅÍ [Àμâ]¸¦ ½ÇÇàÇϸé Àμ⸦ °³½ÃÇÕ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlframe.h>

#include <atlprint.h>  // CPrinterDCŬ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ(¶§¹®¿¡)

                      

 

// mainfrm.h

class CMainFrame : public CFrameWindowImpl<CMainFrame>,

    public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler

{

public:

    DECLARE_FRAME_WND_CLASS_EX(_T("WTL:PrintSample"), IDR_MAINFRAME,

        CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, COLOR_WINDOW)

 

    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){

        CPrinterDC dc;

 

        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();

            }

        }

    }

 

    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¸¦ ¼³Á¤ÇÕ´Ï´Ù.

¡¡
´ÙÀ½À¸·Î stdafx.h ¿¡¼­´Â CPrinterDC Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ atlprint.h Çì´õ¸¦ ÀÎŬ·çµå ÇÕ´Ï´Ù.

¡¡
CMainFrame Ŭ·¡½º¿¡¼­´Â ÀϹÝÀûÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇÏ¿©  WM_PAINT ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇØ Å¬¶óÀÌ¾ðÆ® ¿µ¿ªÀÇ Áß¾Ó¿¡ ij¸¯ÅÍ ¶óÀÎÀ» ¹¦È­ ÇÕ´Ï´Ù. ÀÌ ¶§  ¹¦È­ Äڵ带 Draw() ¶ó°í ÇÏ´Â µ¶ÀÚÀûÀÎ ÇÔ¼ö·Î Á¤¸®ÇÕ´Ï´Ù.  Draw()´Â Àμâ ÄÚµå¿Í °ø¿ëÇÕ´Ï´Ù.

¡¡
¸Þ´º ¾ÆÀÌÅÛ [Àμâ](ID£ºID_FILE_PRINT) ¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯¿¡¼­´Â CPrinterDC Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇØ µðÆúÆ® ÇÁ¸°ÅÍÀÇ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇÏ¿© Draw()¸¦ È£ÃâÇØ ¿ëÁöÀÇ Áß¾Ó¿¡ ij¸¯ÅÍ ¶óÀÎÀ» ÀμâÇÕ´Ï´Ù.

¡¡
ÀÌ¿Í °°ÀÌ CPrinterDC Ŭ·¡½ºÀÇ µðÆúÆ® constructorÀ» È£ÃâÇÏ¸é µðÆúÆ® ÇÁ¸°ÅÍÀÇ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÑÆí CPrinterDC Ŭ·¡½º´Â ÁöÁ¤ÇÑ ÇÁ¸°ÅÍÀÇ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇϱâ À§Çؼ­ Àμö ÀÖ¾î constructorÀ» ÁغñÇØ ÀÖ½À´Ï´Ù.

// atlprint.h

// CPrinterDCÀÇ Àμö ÀÖ¾î constructor¡¡ ¡¡

CPrinterDC(HANDLE hPrinter, const DEVMODE* pdm = NULL)

{

    CPrinterHandle p;

    p.Attach(hPrinter);

    Attach(p.CreatePrinterDC(pdm));

    ATLASSERT(m_hDC != NULL);

}

                      


ÀÌ constructorÀº ÇÁ¸°ÅÍÀÇ ÇÚµéÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù.  WTLÀº ÇÁ¸°ÅÍÀÇ ÇÚµéÀ» CPrinterT ¶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼­ ĸ½¶È­Çϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö´Â bool °ªÀ¸·Î trueÀÇ °æ¿ì´Â ¼Ò¸êÀÚ·Î ClosePrinter()¸¦ È£ÃâÇØ falseÀÇ °æ¿ì´Â È£ÃâÇÏÁö ¾Ê½À´Ï´Ù. atlprint.hÇì´õ¿¡¼­´Âtypedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.

// atlprint.h

typedef CPrinterT<false>  CPrinterHandle;

typedef CPrinterT<true>   CPrinter;

                      


¡¡
ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CPrinter Ŭ·¡½º¸¦ »ç¿ëÇØ ÇÁ¸°ÅÍÀÇ ÇÚµéÀ» ÃëµæÇÏ¿© ±× ÇÁ¸°ÅÍÀÇ ÇÚµé·ÎºÎÅÍ µð¹ÙÀ̽º ÄÁÅØ½ºÆ®¸¦ ÃëµæÇØ ÀμâÇÏ´Â ¿¹ÀÔ´Ï´Ù.  À̹ø¿¡ ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ OnFilePrint()¸¦ ´ÙÀ½°ú °°ÀÌ °íÃÄ ¾¹´Ï´Ù.

// ÁöÁ¤ÇÑ À̸§ÀÇ ÇÁ¸°ÅÍ ÇÚµéÀ» Ãëµæ

CPrinter printer;

if(!printer.OpenPrinter(_T("EPSON MJ-800C ESC/P R"))){

    MessageBox(_T("ÇÁ¸°ÅÍ ÇÚµéÀÇ Ãëµæ¿¡ ½ÇÆÐÇß½À´Ï´Ù. "));

    return;

}

 

// ÁöÁ¤ÇÑ ÇÁ¸°ÅÍÀÇ ÇÁ¸°ÅÍ µð¹ÙÀ̽º ÄÜÅØ½ºÆ®¸¦ Ãëµæ

CPrinterDC dc(printer);

 

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();

    }

}

                      


¡¡
ÀÌ¿Í °°ÀÌ CPrinterDC Ŭ·¡½º³ª CPrinter Ŭ·¡½º¸¦ »ç¿ëÇÏ¸é µð¹ÙÀ̽º ÄÁÅØ½ºÆ®³ª ÇÁ¸°ÅÍÀÇ ÇÚµéÀ» ¸í½ÃÀûÀ¸·Î »èÁ¦Çϰųª ´Ý°Å³ª ÇÒ Çʿ䰡 ¾ø¾îÁö¹Ç·Î Æí¸®ÇÕ´Ï´Ù.