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