< IP ÁÖ¼Ò >

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

// atlctrls.h

typedef CIPAddressCtrlT<ATL::CWindow>   CIPAddressCtrl;

                      


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

¡¡WTL
ÀÇ CIPAddressCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CIPAddressCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

 

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

 

    CIPAddressCtrl m_ip_show;

    CStatic m_static_show;    // IPÁÖ¼Ò Ç¥½Ã¿ë

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        NOTIFY_HANDLER_EX(IDC_IPADDRESS_SHOW, IPN_FIELDCHANGED, OnIPFieldChanged)

        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_ip_show = GetDlgItem(IDC_IPADDRESS_SHOW);

        m_static_show = GetDlgItem(IDC_STATIC_SHOW);

 

        m_ip_show.SetAddress(MAKEIPADDRESS(192, 168, 1, 1));

 

        return TRUE;

    }

 

    LRESULT OnIPFieldChanged(LPNMHDR pnmh){

        DWORD dwIP;

        m_ip_show.GetAddress(&dwIP);

 

        CString strMsg;

        strMsg.Format(_T("IPÁÖ¼Ò: %d.%d.%d.%d"),

            FIRST_IPADDRESS(dwIP),

            SECOND_IPADDRESS(dwIP),

            THIRD_IPADDRESS(dwIP),

            FOURTH_IPADDRESS(dwIP));

        m_static_show.SetWindowText(strMsg);

 

        return 0;

    }

 

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

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

    // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼±  ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ IPÁÖ¼Ò ÄÁÆ®·Ñ°ú ½ºÅÂÆ½ ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ  ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù.

ÄÁÆ®·Ñ ¸í

¸®¼Ò½º ID

IPÁÖ¼Ò

IDC_IPADDRESS_SHOW

½ºÅÂÆ½(IPÁÖ¼Ò Ç¥½Ã¿ë)

IDC_STATIC_SHOW


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

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

¡¡
´ÙÀ½À¸·Î WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î IPÁÖ¼Ò ÄÁÆ®·ÑÀÇ Ãʱ⠻óŸ¦ SetAddress()¿¡ ÀÇÇØ 192.168.1.1·Î ¼³Á¤ÇÕ´Ï´Ù. µ¡ºÙ¿© 4°³ÀÇ Çʵå(BYTE°ª)·ÎºÎÅÍ SetAddress()¿¡ °Ç³×ÁÖ±â À§ÇÑ DWORD °ªÀ» ¾ò±â À§Çؼ­´Â MAKEIPADDRESS ¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù.

¡¡
´ÙÀ½À¸·Î ÅëÁö Äڵ尡 IPN_FIELDCHANGEDÀÇ ÀϽà ÁöÁ¤ ÄÁÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯´Â IP ÁÖ¼Ò ÄÁÆ®·ÑÀÇ Çʵ尡 º¯°æµÇ¾úÀ» ¶§¿¡ ºÒ·Á °©´Ï´Ù¸¸ , ¿©±â¿¡¼­´Â ÀÔ·ÂµÈ IPÁÖ¼Ò¸¦ GetAddress()¿¡ ÀÇÇØ ÃëµæÇØ ¸ÅÅ©·Î·Î °¢ Çʵå Ä¡¸¦ ÃëµæÇÏ°í ³ª¼­ ½ºÅÂÆ½ ÄÁÆ®·Ñ¿¡ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î _tWinMain() ¿¡¼­ ICC_INTERNET_CLASSES Ç÷¡±×¸¦ ÁöÁ¤ÇØ AtlInitCommonControls()¸¦ È£ÃâÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ IPÁÖ¼Ò ÄÁÆ®·ÑÀÌ »ç¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù. µ¡ºÙ¿© ºñ±³Àû »ç¿ë ºóµµ°¡ ³ô´Ù°í »ý°¢µÇ´Â ICC_COOL_CLASSES Ç÷¡±×¿Í ICC_WIN95_CLASSES Ç÷¡±×µµ µ¿½Ã¿¡ ÁöÁ¤ÇØ ÀÖ½À´Ï´Ù¸¸ À̹ø ¿¹ ¿¡¼­´Â ÀÌ µÎ °³ÀÇ Ç÷¡±×´Â ¾ø¾îµµ ±¦Âú½À´Ï´Ù.