// MainDlg.h
#pragma once
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
enum {SHELL = 1, COMCTL, WINDIR, SYSDIR}; // ツリーアイテム識別子
CTreeViewCtrl m_tree_sysinfo;
CStatic m_static_display; // 情報表示用
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
NOTIFY_HANDLER_EX(IDC_TREE_SYSINFO, NM_CLICK, OnTreeClick)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
// スクリーンの中央に配置
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_tree_sysinfo = GetDlgItem(IDC_TREE_SYSINFO);
m_static_display = GetDlgItem(IDC_STATIC_DISPLAY);
HTREEITEM hSysInfo =
m_tree_sysinfo.InsertItem(_T("システム情報"), TVI_ROOT, TVI_LAST);
HTREEITEM hDllVer =
m_tree_sysinfo.InsertItem(_T("DLLバージョン"), hSysInfo, TVI_LAST);
HTREEITEM hItem;
hItem = m_tree_sysinfo.InsertItem(_T("shell32.dll"), hDllVer, TVI_LAST);
m_tree_sysinfo.SetItemData(hItem, SHELL);
hItem = m_tree_sysinfo.InsertItem(_T("comctl32.dll"), hDllVer, TVI_LAST);
m_tree_sysinfo.SetItemData(hItem, COMCTL);
HTREEITEM hSysDir =
m_tree_sysinfo.InsertItem(_T("ディレクトリ"), hSysInfo, TVI_LAST);
hItem = m_tree_sysinfo.InsertItem(_T("Windows"), hSysDir, TVI_LAST);
m_tree_sysinfo.SetItemData(hItem, WINDIR);
hItem = m_tree_sysinfo.InsertItem(_T("システム"), hSysDir, TVI_LAST);
m_tree_sysinfo.SetItemData(hItem, SYSDIR);
return TRUE;
}
LRESULT OnTreeClick(LPNMHDR pnmh){
// クリックされたアイテムハンドル取得
UINT uFlag;
CPoint pt(::GetMessagePos());
m_tree_sysinfo.ScreenToClient(&pt);
HTREEITEM hItem = m_tree_sysinfo.HitTest(pt, &uFlag);
if(hItem == NULL || !(uFlag & TVHT_ONITEM))
return 0;
// アイテムデータ取得
CString strInfo;
DWORD dwData = m_tree_sysinfo.GetItemData(hItem);
switch(dwData){
case SHELL:
{
// shell32.dllのバージョン取得
DWORD dwMajor, dwMinor;
AtlGetShellVersion(&dwMajor, &dwMinor);
strInfo.Format(_T("Version %d.%02d"), dwMajor, dwMinor);
break;
}
case COMCTL:
{
// comctl32.dllのバージョン取得
DWORD dwMajor, dwMinor;
AtlGetCommCtrlVersion(&dwMajor, &dwMinor);
strInfo.Format(_T("Version %d.%02d"), dwMajor, dwMinor);
break;
}
case WINDIR:
{
// Windowsフォルダパス取得
TCHAR szPath[MAX_PATH];
GetWindowsDirectory(szPath, MAX_PATH);
strInfo = szPath;
break;
}
case SYSDIR:
{
// システムフォルダパス取得
TCHAR szPath[MAX_PATH];
GetSystemDirectory(szPath, MAX_PATH);
strInfo = szPath;
break;
}
default:
break;
}
m_static_display.SetWindowText(strInfo);
return 0;
}
void OnOK(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl){
EndDialog(nID);
}
};
|