< Pager >

WTLÀº °ø¿ë ÄÁÆ®·ÑÀÇ  pager ÄÁÆ®·ÑÀ» CPagerCtrlT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼­ ĸ½¶È­ Çϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸  ±× Ŭ·¡½º´Â CPagerCtrlT Ŭ·¡½ºÀÇ base class·Î¼­ »ç¿ëµË´Ï´Ù.  atlctrls.h Çì´õ¿¡¼­´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.

// atlctrls.h

typedef CPagerCtrlT<ATL::CWindow>   CPagerCtrl;

                      


À̰ÍÀº CPagerCtrl Ŭ·¡½º´Â CWindow Ŭ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

¡¡
ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CPagerCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ ÀÔ´Ï´Ù. ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇØ ±× Åø¹Ù¿¡ pager¸¦ »ç¿ëÇÕ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlctrls.h>  // ÄÁÆ®·Ñ¿ë Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ

#include <atlframe.h>

                      

 

// mainfrm.h

class CMainFrame : public CFrameWindowImpl<CMainFrame>,

    public CUpdateUI<CMainFrame>, public CMessageFilter, public CIdleHandler

{

public:

    DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)

 

    enum { IDC_PAGER_BAR = 1001 };

    CPagerCtrl m_pager_bar;

 

    CSize m_sizeToolbar;     // Åø¹ÙÀÇ »çÀÌÁî

 

    virtual BOOL PreTranslateMessage(MSG* pMsg){

        return CFrameWindowImpl<CMainFrame>::PreTranslateMessage(pMsg);

    }

 

    virtual BOOL OnIdle(){

        UIUpdateToolBar();

        return FALSE;

    }

 

    BEGIN_UPDATE_UI_MAP(CMainFrame)

        // ¿£Æ®¸® ¾øÀ½

    END_UPDATE_UI_MAP()

 

    BEGIN_MSG_MAP_EX(CMainFrame)

        MSG_WM_CREATE(OnCreate)

        NOTIFY_HANDLER_EX(IDC_PAGER_BAR, PGN_CALCSIZE, OnPagerCalcsize)

        NOTIFY_HANDLER_EX(IDC_PAGER_BAR, PGN_SCROLL, OnPagerScroll)

        COMMAND_ID_HANDLER_EX(ID_APP_EXIT, OnMenuExit)

        CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)

        CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)

    END_MSG_MAP()

 

    LRESULT OnCreate(LPCREATESTRUCT lpcs){

        // ¸®¹ö¸¦ ÀÛ¼º

        CreateSimpleReBar();

 

        // pager ÄÁÆ®·ÑÀ» ÀÛ¼º

        m_pager_bar.Create(m_hWndToolBar, NULL, NULL,

            WS_CHILD | WS_VISIBLE | PGS_HORZ, 0, IDC_PAGER_BAR);

 

        // Åø¹Ù¸¦ ÀÛ¼º

        HWND hWndToolBar = CreateSimpleToolBarCtrl(m_pager_bar.m_hWnd,

            IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);

        UIAddToolBar(hWndToolBar);

 

        // Åø¹ÙÀÇ »çÀÌÁ Ãëµæ

        ::SendMessage(hWndToolBar, TB_GETMAXSIZE, 0, (LPARAM)&m_sizeToolbar);

 

        m_pager_bar.MoveWindow(0, 0, m_sizeToolbar.cx, m_sizeToolbar.cy);

        m_pager_bar.SetChild(hWndToolBar);

        m_pager_bar.SetBkColor(RGB(240, 240, 255));

 

        AddSimpleReBarBand(m_pager_bar.m_hWnd, _T("pager ÷ºÎ Åø¹Ù"));

 

        // »óÅ ¹Ù¸¦ ÀÛ¼º

        CreateSimpleStatusBar();

 

        // ¸Þ½ÃÁö ·çÇÁ¿¡ ¸Þ¼¼Áö ÇÊÅÍ¿Í ¾ÆÀ̵¹ Çڵ鷯¸¦ Ãß°¡

        CMessageLoop* pLoop = _Module.GetMessageLoop();

        pLoop->AddMessageFilter(this);

        pLoop->AddIdleHandler(this);

 

        return 0;

    }

 

    LRESULT OnPagerCalcsize(LPNMHDR pnmh){

        LPNMPGCALCSIZE pCalcSize = (LPNMPGCALCSIZE)pnmh;

 

        switch(pCalcSize->dwFlag){

        case PGF_CALCWIDTH:

            pCalcSize->iWidth = m_sizeToolbar.cx;

            break;

        }

 

        return 0;

    }

 

    LRESULT OnPagerScroll(LPNMHDR pnmh){

        LPNMPGSCROLL pScroll = (LPNMPGSCROLL)pnmh;

 

        switch(pScroll->iDir){

        case PGF_SCROLLLEFT:

        case PGF_SCROLLRIGHT:

        case PGF_SCROLLUP:

        case PGF_SCROLLDOWN:

            pScroll->iScroll = 10;

            break;

        }

 

        return 0;

    }

 

    void OnMenuExit(UINT uNotifyCode, int nID, HWND hWndCtl){

        PostMessage(WM_CLOSE);

    }

};

                      

 

// Control.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_PAGESCROLLER_CLASS);

 

    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 ¿¡¼­´Â CPagerCtrl Ŭ·¡½º¿Í ÇÁ·¹ÀÓ À©µµ¿ì¸¦ »ç¿ëÇϱâ À§Çؼ­ atlctrls.h Çì´õ¿Í atlframe.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.

¡¡
CMainFrame Ŭ·¡½º¿¡¼­´Â ÀϹÝÀûÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇÏ´Â °Í¿¡ ´õÇØ pager ÄÁÆ®·Ñ¿ëÀ¸·Î ID(IDC_PAGER_BAR) ¸¦ Á¤ÀÇÇØ CPagerCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ­´Â WM_CREATE ¸Þ¼¼Áö Çڵ鷯·Î Create()¸¦ È£ÃâÇØ ÀÛ¼ºÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×¸®°í  Åø¹ÙÀÇ »çÀÌÁ ³ªÅ¸³»´Â CSize Ŭ·¡½ºÀÇ ÀνºÅϽºµµ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇØ µÓ´Ï´Ù.

¡¡
´ÙÀ½¿¡ WM_CREATE ¸Þ¼¼Áö Çڵ鷯·Î ¿ì¼± CreateSimpleReBar()À» È£ÃâÇØ ¸®¹ö¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ½¿¡ ¸®¹ö¸¦ ºÎ¸ð·Î¼­ Áï Create()ÀÇ Á¦1Àμö¿¡ ¸®¹öÀÇ ÇÚµém_hWndToolBarÀ» ÁöÁ¤ÇØ pager ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÕ´Ï´Ù. °Ô´Ù°¡ pager ÄÁÆ®·ÑÀ» ºÎ¸ð·Î¼­ Åø¹Ù¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÀÌ ¶§ ½ºÅ¸ÀϷμ­ CCS_NORESIZE¸¦ ÁöÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. (ATL_SIMPLE_TOOLBAR_PANE_STYLE ¿¡´Â CCS_NORESIZE ½ºÅ¸ÀÏÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.)  ´ÙÀ½À¸·Î pager ÄÁÆ®·ÑÀÇ »çÀÌÁ Åø¹Ù¿Í °°Àº »çÀÌÁî·Î ÇØ SetChild()¿¡ Åø¹ÙÀÇ ÇÚµéÀ» ÁöÁ¤ÇÏ´Â °Í¿¡ µû¶ó  Åø¹Ù¸¦ pager ÄÁÆ®·ÑÀÇ ÀÚ½ÄÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù. ±×¸®°í SetBkColor¿¡ ÀÇÇØ pager ÄÁÆ®·ÑÀÇ »öÀ» ÁöÁ¤ÇØ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÀÛ¼ºÇÑ pager ÄÁÆ®·ÑÀ»AddSimpleReBarBand¿¡ ÀÇÇØ ¸®¹ö¿¡ Ãß°¡ÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ÅëÁö Äڵ尡 PGN_CALCSIZEÀÇ  pager ÄÁÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯¿¡¼­´Â pager ÄÁÆ®·ÑÀÇ »çÀÌÁ Åø¹ÙÀÇ Æø°ú °°Àº »çÀÌÁî·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ Çڵ鷯´Â ÇʼöÀÔ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ÅëÁö Äڵ尡 PGN_SCROLLÀÇ  pager ÄÁÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯¿¡¼­´Â pager ÄÁÆ®·ÑÀÇ ½ºÅ©·ÑÄ¡¸¦ ¼³Á¤ÇÕ´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î _tWinMain()¿¡¼­ ICC_PAGESCROLLER_CLASS Ç÷¡±×¸¦ ÁöÁ¤ÇØ AtlInitCommonControls()¸¦ È£ÃâÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ pager ÄÁÆ®·ÑÀÌ »ç¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù.