< UpDown >

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

// atlctrls.h

typedef CUpDownCtrlT<ATL::CWindow>   CUpDownCtrl;

                      


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

¡¡WTL
ÀÇ CUpDownCtrlŬ·¡½º´Â MFCÀÇ CSpinButtonCtrlŬ·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CUpDownCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ ÀÔ´Ï´Ù.  RGB °¢°¢ÀÇ  updown ÄÁÆ®·ÑÀ» Á¶ÀÛÇØ »öÀ» ÀÛ¼ºÇÕ´Ï´Ù.

 

// 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 };

 

    CUpDownCtrl m_updown_r;   // [R]¿ë

    CUpDownCtrl m_updown_g;   // [G]¿ë

    CUpDownCtrl m_updown_b;   // [B]¿ë

 

    CRect m_rect;             // »ö Ç¥½Ã¿ë ±¸Çü

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_PAINT(OnPaint)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_HANDLER_EX(IDC_EDIT_R, EN_CHANGE, OnEditChangeR)

        COMMAND_HANDLER_EX(IDC_EDIT_G, EN_CHANGE, OnEditChangeG)

        COMMAND_HANDLER_EX(IDC_EDIT_B, EN_CHANGE, OnEditChangeB)

        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_updown_r = GetDlgItem(IDC_SPIN_R);

        m_updown_g = GetDlgItem(IDC_SPIN_G);

        m_updown_b = GetDlgItem(IDC_SPIN_B);

 

        m_updown_r.SetRange(0, 255);

        m_updown_g.SetRange(0, 255);

        m_updown_b.SetRange(0, 255);

 

        // »ö Ç¥½Ã¿ë ±¸ÇüÀ» Ãëµæ

        CStatic view = GetDlgItem(IDC_STATIC_VIEW);

        view.GetWindowRect(m_rect);

        ScreenToClient(m_rect);

 

        return TRUE;

    }

 

    void OnPaint(HDC /*hDC*/){

        CPaintDC dc(m_hWnd);

 

        CBrush brush;

        brush.CreateSolidBrush(RGB(m_updown_r.GetPos(),

            m_updown_g.GetPos(), m_updown_b.GetPos()));

 

        dc.FillRect(m_rect, brush);

    }

 

    void CheckAndUpdate(CUpDownCtrl& updown){

        if(updown.m_hWnd != NULL){

            // ¹üÀ§ üũ

            BOOL bError;

            updown.GetPos(&bError);

            if(bError)

                updown.SetPos(255);

        }

        InvalidateRect(m_rect);

    }

 

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

        CheckAndUpdate(m_updown_r);

    }

 

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

        CheckAndUpdate(m_updown_g);

    }

 

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

        CheckAndUpdate(m_updown_b);

    }

 

    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;

}

                      


¡¡
¿ì¼± ÀÚ¿øÀ» ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ½ºÅÂÆ½, ¿¡µðÆ®,  updown ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÏ°í ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© ¿¡µðÆ® ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼­´Â µðÆúÆ®¿¡ [¹øÈ£]¿¡ üũ¸¦ ³Ö¾î updown ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼­´Â µðÆúÆ®¿¡ [¹èÄ¡]·Î [¿ì´Ü]À» ¼±ÅÃÇÏ°í  [ÀÚµ¿ °ü·ÃÁþ°í], [¼öÄ¡ÀÇ ÀÚµ¿ Ç¥½Ã], [ÀÚ¸®¼ö ´Ü¶ôÁö¾î ÀÌ·ç¾î], [¿öµå·¦]¿¡ üũ¸¦ ³Ö½À´Ï´Ù. ¶ÇÇÑ »ö Ç¥½Ã¿ëÀÇ ½ºÅÂÆ½ ÄÁÆ®·ÑÀÇ ÇÁ·ÎÆÛƼ¿¡¼­´Â [°¡½Ã]ÀÇ Ã¼Å©¸¦ off ÇÕ´Ï´Ù.

ÄÁÆ®·Ñ ¸í

¸®¼Ò½ºID

½ºÅÂÆ½([R]¶óº§¿ë)

IDC_STATIC(µðÆúÆ®)

½ºÅÂÆ½([G]¶óº§¿ë)

IDC_STATIC(µðÆúÆ®)

½ºÅÂÆ½([B]¶óº§¿ë)

IDC_STATIC(µðÆúÆ®)

¿¡µðÆ®([R]¿ë)

IDC_EDIT_R

¿¡µðÆ®([G]¿ë)

IDC_EDIT_G

¿¡µðÆ®([B]¿ë)

IDC_EDIT_B

updown([R]¿ë)

IDC_SPIN_R

updown([G]¿ë)

IDC_SPIN_G

updown([B]¿ë)

IDC_SPIN_B

½ºÅÂÆ½(»ö Ç¥½Ã¿ë)

IDC_STATIC_VIEW


updown
ÄÁÆ®·ÑÀÇ [ÀÚµ¿ °ü·ÃÁþ°í]¿¡ üũ ÇÏ´Â °ÍÀ¸·Î  Z¿À´õ¸¦ ±âº»À¸·Î updown ÄÁÆ®·ÑÀÇ Á÷ÀüÀÇ ÄÁÆ®·Ñ¿¡ ÀÚµ¿ÀûÀ¸·Î °ü·Ã ÁöÀ» ¼ö ÀÖ½À´Ï´Ù. À̹ø ¿¹¿¡¼­´Â [R]¿ë ¿¡µðÆ® ÄÁÆ®·Ñ ´ÙÀ½¿¡ [R]¿ë updown ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÏ´Â °ÍÀ¸·Î  [R]¿ë ¿¡µðÆ® ÄÁÆ®·Ñ°ú [R]¿ë updown ÄÁÆ®·ÑÀ» °ü·Ã ÁöÀ» ¼ö ÀÖ½À´Ï´Ù.  °°ÀÌ [G]³ª [B] ÀÇ ÄÁÆ®·Ñµµ Â÷·Ê·Î ¹èÄ¡ÇÕ´Ï´Ù.

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

¡¡
CMainDlgŬ·¡½º¿¡¼­´Â ¿ì¼± updown ÄÁÆ®·Ñ¿ëÀ¸·Î CUpDownCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ­´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×¸®°í »öÀ» Ç¥½ÃÇÏ´Â ±¸ÇüÀ» ³ªÅ¸³»´Â CRect Ŭ·¡½ºÀÇ ÀνºÅϽºµµ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇØ µÓ´Ï´Ù.

¡¡
´ÙÀ½¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î updown ÄÁÆ®·ÑÀÇ ¹üÀ§¸¦ ¼³Á¤ÇÕ´Ï´Ù. ±×¸®°í »ö Ç¥½Ã¿ëÀÇ ½ºÅÂÆ½ ±¸ÇüÀ» ÃëµæÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ÅëÁö Äڵ尡 EN_CHANGEÀÇ ¿¡µðÆ® ÄÁÆ®·Ñ¿ë Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ [R][G][B] °¢°¢ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯´Â ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ³»¿ëÀÌ º¯°æµÇ¾úÀ» ¶§ (Á÷Á¢Ä¡¸¦ ÀÔ·ÂÇßÀ» ¶§¿Í updown ÄÁÆ®·Ñ·Î °ªÀ» º¯°æÇßÀ» ¶§ ) ¿¡ È£Ã⠵Ǿî Áý´Ï´Ù. ÀÌ Çڵ鷯¿¡¼­´Â CheckAndUpdate() À̶ó°í ÇÏ´Â µ¶ÀÚÀûÀÎ ÇÔ¼ö¸¦ È£ÃâÇØ  GetPos()¿¡ ÀÇÇØ °ªÀÇ ¹üÀ§°¡ Á¤´çÇÑÁö ¾î¶²Áö üũÇÏ°í ³ª¼­ »ö Ç¥½Ã¿ë ±¸ÇüÀ» °»½ÅÇÕ´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î WM_PAINT ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇØ  »öÀ» ¹¦È­ ÇÕ´Ï´Ù.