< ¸®¹Ù >

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

// atlctrls.h

typedef CReBarCtrlT<ATL::CWindow>   CReBarCtrl;

                      


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

¡¡WTL
ÀÇ CReBarCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CReBarCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇØ ¸®¹Ù¸¦ Ãß°¡ÇÏ°í ±× ¸®¹ÙÀÇ ¹êµå¿¡ Åø¹Ù¿Í combobox ÄÁÆ®·ÑÀ» Ãß°¡ÇÕ´Ï´Ù. ¸®¹ÙÀÇ ¹êµå¿¡ Ãß°¡µÈ Åø¹Ù´Â Ç¥½Ã/ºñÇ¥½Ã¸¦ º¯È¯µÇµµ·Ï ÇÕ´Ï´Ù.

 

// 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_COMBO_REBAR = 1001 };

    CComboBox m_combo_rebar;

 

    virtual BOOL PreTranslateMessage(MSG* pMsg){

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

    }

 

    virtual BOOL OnIdle(){

        UIUpdateToolBar();

        return FALSE;

    }

 

    BEGIN_UPDATE_UI_MAP(CMainFrame)

        UPDATE_ELEMENT(ID_MENUITEM_TOOLBAR, UPDUI_MENUPOPUP)

    END_UPDATE_UI_MAP()

 

    BEGIN_MSG_MAP_EX(CMainFrame)

        MSG_WM_CREATE(OnCreate)

        COMMAND_ID_HANDLER_EX(ID_MENUITEM_TOOLBAR, OnMenuToolbar)

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

 

        // Åø¹Ù¸¦ ÀÛ¼ºÇØ ¹êµå¿¡ Ãß°¡

        HWND hToolBar = CreateSimpleToolBarCtrl(m_hWnd,

            IDR_MAINFRAME, FALSE, ATL_SIMPLE_TOOLBAR_PANE_STYLE);

        AddSimpleReBarBand(hToolBar);

 

        UIAddToolBar(hToolBar);

        UISetCheck(ID_MENUITEM_TOOLBAR, 1);

 

        // combobox¸¦ ÀÛ¼ºÇØ ¹êµå¿¡ Ãß°¡

        m_combo_rebar.Create(m_hWnd, CRect(0, 0, 100, 100), NULL,

            WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST, 0, IDC_COMBO_REBAR);

        m_combo_rebar.SetFont(AtlGetDefaultGuiFont());

        m_combo_rebar.AddString(_T("¾ÆÀÌÅÛ 1"));

        m_combo_rebar.AddString(_T("¾ÆÀÌÅÛ 2"));

        AddSimpleReBarBand(m_combo_rebar);

 

        // ¸®¹öÀÇ »çÀÌÁ Á¶Á¤

        SizeSimpleReBarBands();

 

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

        CMessageLoop* pLoop = _Module.GetMessageLoop();

        pLoop->AddMessageFilter(this);

        pLoop->AddIdleHandler(this);

 

        return 0;

    }

 

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

        static BOOL bVisible = TRUE;

        bVisible = !bVisible;

        CReBarCtrl rebar = m_hWndToolBar;

        int nBandIndex = rebar.IdToIndex(ATL_IDW_BAND_FIRST);

        rebar.ShowBand(nBandIndex, bVisible);

        UISetCheck(ID_MENUITEM_TOOLBAR, bVisible);

        UpdateLayout();

    }

 

    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_MENUITEM_TOOLBAR ¶ó°í ÇÏ´Â ID¸¦ ¼³Á¤ÇÕ´Ï´Ù.



¡¡
´ÙÀ½À¸·Î stdafx.h ¿¡¼­´Â CReBarCtrl Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ atlctrls.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.

¡¡
CMainFrame Ŭ·¡½º¿¡¼­´Â ÀϹÝÀûÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÀÛ¼ºÇÕ´Ï´Ù. WM_CREATE ¸Þ¼¼Áö Çڵ鷯¿¡¼­´Â ¿ì¼± CreateSimpleReBar()À» È£ÃâÇØ ¸®¹Ù¸¦ ÀÛ¼ºÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ  ÇÁ·¹ÀÓ À©µµ¿ìÀÇ ¸â¹ö º¯¼öÀÎ m_hWndToolBar¿¡ ¸®¹ÙÀÇ ÇÚµéÀÌ ¼³Á¤µË´Ï´Ù. ´ÙÀ½¿¡ Åø¹Ù ÄÁÆ®·Ñ°ú  combobox ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÏ°í °¢°¢ ¸®¹öÀÇ ¹êµå¿¡ Ãß°¡ÇÕ´Ï´Ù.

¡¡
´ÙÀ½À¸·Î ¸Þ´º ¾ÆÀÌÅÛ [Åø¹Ù](ID£ºID_MENUITEM_TOOLBAR) ¿ëÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯¿¡¼­´Â Á¤Àû º¯¼ö bVisible¿¡ ÀÇÇØ Åø¹ÙÀÇ °¡½Ã »óŸ¦ º¸°ü À¯ÁöÇϸç CReBarCtrl Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öÀÎ ShowBand()·Î °¡½Ã »óŸ¦ »õ·Î ¹Ù²Ù°í ÀÖ½À´Ï´Ù.  µ¡ºÙ¿© ÀÌ Çڵ鷯ÀÇ ÄÚµå´Â ATL/WTL AppWizard ÀÌ Ãâ·ÂÇÏ´Â °Í°ú °ÅÀÇ °°½À´Ï´Ù.

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