< Progress bar >


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

// atlctrls.h

typedef CProgressBarCtrlT<ATL::CWindow>   CProgressBarCtrl;

                      


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

¡¡WTL
ÀÇ CProgressBarCtrlŬ·¡½º´Â MFCÀÇ CProgressCtrlŬ·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CProgressBarCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. 100¹Ð¸® ¼¼ÄÁµå ¸¶´Ù ¹Ù¸¦ ÁøÇà½Ãŵ´Ï´Ù. ³¡±îÁö ÁøÇàµÇ´Âµ¥ ¾à 1ÃÊ °É¸³´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

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

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    CProgressBarCtrl m_progress_sec;

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDC_BUTTON_START, OnButtonStart)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ¼³Á¤

        m_progress_sec = GetDlgItem(IDC_PROGRESS_SEC);

 

        m_progress_sec.SetRange(0, 10);

        m_progress_sec.SetPos(0);

 

        return TRUE;

    }

 

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

        for(int i=0; i<=10; i++){

            m_progress_sec.SetPos(i);

            Sleep(100);

        }

    }

 

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

        EndDialog(nID);

    }

 

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

        EndDialog(nID);

    }

};

                      

 

// Control.cpp

#include "stdafx.h"

 

#include "resource.h"

 

#include "maindlg.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: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼±  ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡  progress bar ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ  ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© progress bar ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼­´Â µðÆúÆ®¿¡ [½º¹«µå]¿¡ üũ¸¦ ³Ö½À´Ï´Ù.

ÄÁÆ®·Ñ¸í

¸®¼Ò½ºID

progress bar

IDC_PROGRESS_SEC


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

¡¡
CMainDlg Ŭ·¡½º¿¡¼­´Â ¿ì¼± progress bar ÄÁÆ®·Ñ ¿ëÀ¸·Î CProgressBarCtrlŬ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ­´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

¡¡
´ÙÀ½À¸·Î WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î progress bar ÄÁÆ®·ÑÀÇ ¹üÀ§¿Í Ãʱâ À§Ä¡¸¦ ¼³Á¤ÇÕ´Ï´Ù.
¡¡
¹öư ÄÁÆ®·Ñ¿ë Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ±× Çڵ鷯¿¡¼­´ÂSetPos()¿¡ ÀÇÇØ ¹Ù¸¦ 1/10µÎ °³ ÁøÇàÇÕ´Ï´Ù. µ¡ºÙ¿© Sleep()¿¡ ÀÇÇØ100¹Ð¸® ¼¼ÄÁµå¸¶´Ù ÁøÇàÇϱ⠶§¹®¿¡  ³¡±îÁö ÁøÇàµÇ´Âµ¥ ¾à 1ÃÊ °É¸³´Ï´Ù.

¡¡
À§ÀÇ ¿¹¿¡¼­´Â ¹Ù¸¦ ÁøÇà½Ã۱â À§Çؼ­(¶§¹®¿¡)SetPos()¸¦ »ç¿ëÇß½À´Ï´Ù¸¸ , progress bar ÄÁÆ®·ÑÀº , ¹Ù¸¦ ÁøÇà½Ã۱â À§Çؼ­(¶§¹®¿¡) ´Ù¸¥ 2°³ÀÇ ¹æ¹ýÀ» ÁغñÇØ ÀÖ½À´Ï´Ù.

¡¡
ù°ÀÇ ¹æ¹ýÀº OffsetPos()À» »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.  OffsetPos()´Â ¹ÙÀÇ À§Ä¡¸¦ ÇöÀçÀÇ À§Ä¡¿¡ ´ëÇØ¼­ »ó´ëÀûÀÎ À§Ä¡·Î ¼³Á¤ÇÕ´Ï´Ù.

for(int i=0; i<10; i++)
{

    m_progress_sec.OffsetPos(1);  // ÇöÀçÀÇ À§Ä¡¿¡ ´ëÇØ¼­ 1 ÁøÇàÇÑ´Ù

    Sleep(100);

}

                      


¡¡
µÑ°ÀÇ ¹æ¹ýÀº StepIt()À» »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.  StepIt()À» »ç¿ëÇÏ´Â °æ¿ì´Â ¹Ì¸® SetStep()·Î ÁõºÐÄ¡¸¦ ¼³Á¤ÇÕ´Ï´Ù. ±× ÈÄ StepIt()¸¦ È£ÃâÇÒ ¶§¸¶´Ù ÁõºÐÄ¡ÀÇ ºÐ ¸¸Å­ ¹Ù°¡ ÁøÇàµË´Ï´Ù.

m_progress_sec.SetStep(1);

 

for(int i=0; i<10; i++){

    m_progress_sec.StepIt();

    Sleep(100);

}