// SampleProjectDialog.h
#pragma once
class CSampleProjectDialog :
public CAppStdDialogImpl<CSampleProjectDialog>,
public CUpdateUI<CSampleProjectDialog>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_APP_DLG_CLASS(NULL, IDR_MAINFRAME, L"Software\\WTL")
enum { IDD = IDD_MAINDLG };
CTreeViewCtrl m_tree_sysdir;
CStatic m_static_display; // フォルダパス表示用
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CWindow::IsDialogMessage(pMsg);
}
virtual BOOL OnIdle(){
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CSampleProjectDialog)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CSampleProjectDialog)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_DESTROY(OnDestroy)
NOTIFY_HANDLER_EX(IDC_TREE_SYSDIR, NM_CLICK, OnTreeClick)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_tree_sysdir = GetDlgItem(IDC_TREE_SYSDIR);
m_static_display = GetDlgItem(IDC_STATIC_DISPLAY);
HTREEITEM hSysDir =
m_tree_sysdir.InsertItem(_T("システムフォルダ"), TVI_ROOT, TVI_LAST);
m_tree_sysdir.SetItemData(hSysDir, -1);
HTREEITEM hItem;
hItem = m_tree_sysdir.InsertItem(_T("Windows"), hSysDir, TVI_LAST);
m_tree_sysdir.SetItemData(hItem, CSIDL_WINDOWS);
hItem = m_tree_sysdir.InsertItem(_T("Program Files"), hSysDir, TVI_LAST);
m_tree_sysdir.SetItemData(hItem, CSIDL_PROGRAM_FILES);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
SetMsgHandled(false);
return TRUE;
}
void OnDestroy(){
// メッセージループからメッセージフィルタとアイドルハンドラを削除
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
}
LRESULT OnTreeClick(LPNMHDR pnmh){
// タップされたアイテムハンドル取得
UINT uFlag;
CPoint pt(::GetMessagePos());
m_tree_sysdir.ScreenToClient(&pt);
HTREEITEM hItem = m_tree_sysdir.HitTest(pt, &uFlag);
if(hItem == NULL || !(uFlag & TVHT_ONITEM))
return 0;
DWORD dwData = m_tree_sysdir.GetItemData(hItem);
if(dwData != -1){
TCHAR szPath[MAX_PATH];
SHGetSpecialFolderPath(m_hWnd, szPath, dwData, 0);
m_static_display.SetWindowText(szPath);
}else{
m_static_display.SetWindowText(_T(""));
}
return 0;
}
};
|