< ÅÇ >
¡¡
WTL¿¡¼ °ø¿ë ÄÁÆ®·ÑÀÇ ÅÇ ÄÁÆ®·ÑÀ» CTabCtrlT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼ ĸ½¶ÈÇϰí ÀÖ½À´Ï´Ù. ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸ ±× Ŭ·¡½º´Â CTabCtrlT Ŭ·¡½ºÀÇ base class·Î¼ »ç¿ëµË´Ï´Ù. atlctrls.h Çì´õ¿¡¼´Â typedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
// atlctrls.h typedef CTabCtrlT<ATL::CWindow> CTabCtrl; |
À̰ÍÀº CTabCtrl Ŭ·¡½º´Â CWindowŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.
¡¡WTLÀÇ CTabCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CTabCtrl Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. ù°ÀÇ ÅÇ¿¡´Â ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀÏ À϶÷À» Ç¥½ÃÇÏ´Â ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ¼³Á¤ÇØ µÑ°ÀÇ ÅÇ¿¡´ÂDLLÀÇ ¹öÁ¯ Á¤º¸¸¦ Ç¥½ÃÇÏ´Â ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ¼³Á¤ÇÕ´Ï´Ù.


|
// 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 }; CTabCtrl
m_tab_display; // ÅÇ CListViewCtrl
m_list_file;
// [ÆÄÀÏ]¸®½ºÆ®ºä CListViewCtrl
m_list_info;
// [DLLÁ¤º¸]¸®½ºÆ®ºä // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
NOTIFY_HANDLER_EX(IDC_TAB_DISPLAY, TCN_SELCHANGING, OnTabSelChanging)
NOTIFY_HANDLER_EX(IDC_TAB_DISPLAY, TCN_SELCHANGE, OnTabSelChange)
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_tab_display = GetDlgItem(IDC_TAB_DISPLAY); m_list_file = GetDlgItem(IDC_LIST_FILE); m_list_info = GetDlgItem(IDC_LIST_INFO); // ÅÇ ÄÜÆ®·ÑÀÇ ¹èÄ¡ CRect rcClient; GetClientRect(rcClient); int nPaddingX = GetSystemMetrics(SM_CXDLGFRAME); int nPaddingY = GetSystemMetrics(SM_CYDLGFRAME); m_tab_display.SetWindowPos(HWND_BOTTOM,
rcClient.left + nPaddingX,
rcClient.top + nPaddingY,
rcClient.Width() - nPaddingX
* 2, rcClient.Height() - nPaddingY
* 2,
SWP_SHOWWINDOW); // ÅÇ ¾ÆÀÌÅÛ »ðÀÔ
TCITEM ti; ti.mask = TCIF_TEXT | TCIF_PARAM; ti.pszText = _T("ÆÄÀÏ"); ti.lParam = (LPARAM)m_list_file.m_hWnd; m_tab_display.InsertItem(0, &ti);
ti.pszText = _T("DLLÁ¤º¸"); ti.lParam = (LPARAM)m_list_info.m_hWnd; m_tab_display.InsertItem(1, &ti); // ÅÇ ÄÜÆ®·ÑÀÇ Ç¥½Ã ¿µ¿ª Ãëµæ CRect rcTabClient; m_tab_display.GetClientRect(rcTabClient); m_tab_display.AdjustRect(FALSE, rcTabClient); rcTabClient.OffsetRect(nPaddingX,
nPaddingY); // [ÆÄÀÏ]¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ ¹èÄ¡ m_list_file.MoveWindow(rcTabClient); m_list_file.SetExtendedListViewStyle(LVS_EX_INFOTIP |
LVS_EX_FULLROWSELECT); CRect rcList; m_list_file.GetWindowRect(rcList); int nScrollWidth = GetSystemMetrics(SM_CXVSCROLL); int n3DEdge = GetSystemMetrics(SM_CXEDGE); m_list_file.InsertColumn(0,
_T("À̸§"), LVCFMT_LEFT,
rcList.Width() - nScrollWidth
- n3DEdge * 2, -1); CFindFile find; if(find.FindFile()){
do{
if(!find.IsDots()
&& !find.IsDirectory()){
int nIndex = m_list_file.GetItemCount();
m_list_file.AddItem(nIndex,
0, find.GetFileName());
}
}while(find.FindNextFile()); } // [DLLÁ¤º¸]¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ
¹èÄ¡ m_list_info.MoveWindow(rcTabClient); m_list_info.SetExtendedListViewStyle(LVS_EX_INFOTIP |
LVS_EX_FULLROWSELECT); m_list_info.InsertColumn(0,
_T("DLL¸í"), LVCFMT_LEFT, 220, -1); m_list_info.InsertColumn(1,
_T("¹öÁ¯"), LVCFMT_LEFT,
rcList.Width() - 220 - nScrollWidth
- n3DEdge * 2, -1);
DWORD dwMajor, dwMinor; CString strInfo; AtlGetShellVersion(&dwMajor,
&dwMinor); strInfo.Format(_T("%d.%02d"),
dwMajor, dwMinor); m_list_info.AddItem(0, 0, _T("shell32.dll")); m_list_info.AddItem(0, 1, strInfo); AtlGetCommCtrlVersion(&dwMajor,
&dwMinor); strInfo.Format(_T("%d.%02d"),
dwMajor, dwMinor); m_list_info.AddItem(1, 0, _T("comctl32.dll")); m_list_info.AddItem(1, 1, strInfo); return TRUE; } void SwitchWindow(bool bShow){ int nIndex = m_tab_display.GetCurSel();
TCITEM ti; ti.mask = TCIF_PARAM; m_tab_display.GetItem(nIndex,
&ti); CWindow win = (HWND)ti.lParam; win.ShowWindow(bShow ? SW_SHOW : SW_HIDE); if(bShow)
win.SetFocus(); } LRESULT OnTabSelChanging(LPNMHDR pnmh){ SwitchWindow(false); return FALSE; } LRESULT OnTabSelChange(LPNMHDR pnmh){ SwitchWindow(true); 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); hRes
= _Module.Init(NULL, hInstance); ATLASSERT(SUCCEEDED(hRes)); int nRet = 0; // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà { CMainDlg dlgMain; nRet = dlgMain.DoModal(); } _Module.Term(); ::CoUninitialize(); return nRet; } |
¡¡¿ì¼± ÀÚ¿øÀ» ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ÅÇ ÄÁÆ®·Ñ°ú ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ ÀÚ¿øID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© 2°³ÀÇ ¸®½ºÆ® ºä ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ] ¿¡¼´Â µðÆúÆ®¿¡ [Ç¥½Ã]·Î [¸®Æ÷Æ®]¸¦ ¼±ÅÃÇϰí [¼±ÅÃÀ» Ç×»ó Ç¥½Ã]¿¡ üũ¸¦ ³Ö½À´Ï´Ù. °Ô´Ù°¡ [DLLÁ¤º¸]¿ë ¸®½ºÆ® ºä ÄÁÆ®·Ñ¸¸ [ÀϹÝ]ÀÇ [°¡½Ã]ÀÇ Ã¼Å©¸¦ ¶Á´Ï´Ù.
|
ÄÁÆ®·Ñ¸í |
ÀÚ¿øID |
|
ÅÇ |
IDC_TAB_DISPLAY |
|
¸®½ºÆ®ºä([ÆÄÀÏ]¿ë) |
IDC_LIST_FILE |
|
¸®½ºÆ®ºä([DLLÁ¤º¸]¿ë) |
IDC_LIST_INFO |
¡¡´ÙÀ½¿¡ stdafx.h ¾È¿¡¼´Â CTabCtrl Ŭ·¡½º³ª CListViewCtrl Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ atlctrls.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.
¡¡CMainDlgŬ·¡½º¿¡¼´Â ÅÇ ÄÁÆ®·Ñ ¿ëÀ¸·Î CTabCtrlŬ·¡½º ¸®½ºÆ® ºä ÄÁÆ®·Ñ ¿ëÀ¸·Î CListViewCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰͵éÀ» »ç¿ëÇϱâ À§Çؼ´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ WM_INITDIALOG
¸Þ¼¼Áö Çڵ鷯·Î °¢ ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÕ´Ï´Ù. ¿ì¼± ÅÇ ÄÁÆ®·ÑÀ» ´ÙÀ̾ó·Î±×º¸´Ù nPaddingX ¿Í nPaddingYÀÇ ºÐ(margin) ¸¸Å ÀÛ°Ô ¹èÄ¡ÇÕ´Ï´Ù. ±×¸®°í ÅÇ¿¡ 2°³ÀÇ ¾ÆÀÌÅÛ([ÆÄÀÏ]°ú[DLLÁ¤º¸])¸¦ »ðÀÔÇÕ´Ï´Ù. ÀÌ ¶§ 2°³ÀÇ ¸®½ºÆ® ºä ÄÁÆ®·ÑÀÇ ÇÚµéÀ» °¢°¢ TCITEM ±¸Á¶Ã¼ÀÇ lParam À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
±× ÈÄ , ÅÇ ÄÜÆ®·ÑÀÇ Ç¥½Ã ¿µ¿ª(ÅÇ ÄÜÆ®·ÑÀÇ ÅÇ ºÎºÐÀ» Á¦¿ÜÇÑ ±¸Çü) À» ÃëµæÇØ , ±× ¿µ¿ª¿¡ ¸Âµµ·Ï(µíÀÌ) 2°³ÀÇ ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ ¹èÄ¡ÇÕ´Ï´Ù.
¡¡´ÙÀ½¿¡ , ÅëÁö Äڵ尡TCN_SELCHANGINGÀÇ ÅÇ ÄÜÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ ¸Þ¼¼Áö Çڵ鷯´Â ÅÇÀÌ ¹Ù²î±â Á÷Àü¿¡ ºÒ·Á °©´Ï´Ù¸¸ , ¿©±â¿¡¼´ÂGetCurSel()¿¡ ÀÇÇØ ¹Ù²î±â Á÷ÀüÀÇ ÅÇÀÇ À妽º¸¦ ÃëµæÇØ , ±× À妽ºÀÇ ÅÇ ¾ÆÀÌÅÛÀ¸·ÎºÎÅÍ ¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ À©µµ¿ì ÇÚµéÀ» ÃëµæÇØ , ±× ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ ºÒ°¡½Ã·Î Çϰí ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ , ÅëÁö Äڵ尡TCN_SELCHANGEÀÇ ÅÇ ÄÜÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ ¸Þ¼¼Áö Çڵ鷯´Â ÅÇÀÌ ¹Ù²ï Á÷ÈÄ¿¡ ºÒ·Á °©´Ï´Ù¸¸ , ¿©±â¿¡¼´ÂGetCurSel()¿¡ ÀÇÇØ ¹Ù²ï Á÷ÈÄÀÇ ÅÇÀÇ À妽º¸¦ ÃëµæÇØ , ±× À妽ºÀÇ ÅÇ ¾ÆÀÌÅÛÀ¸·ÎºÎÅÍ ¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ À©µµ¿ì ÇÚµéÀ» ÃëµæÇØ , ±× ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ °¡½Ã·Î Çϰí ÀÖ½À´Ï´Ù.