// SampleProjectDialog.h
#pragma once
class CSampleProjectDialog :
public CAppStdDialogImpl<CSampleProjectDialog>,
public CUpdateUI<CSampleProjectDialog>,
public CMessageFilter, public CIdleHandler,
public CCustomDraw<CSampleProjectDialog>
{
public:
DECLARE_APP_DLG_CLASS(NULL, IDR_MAINFRAME, L"Software\\WTL")
enum { IDD = IDD_MAINDLG };
CListViewCtrl m_list_stripe;
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)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
CHAIN_MSG_MAP(CCustomDraw<CSampleProjectDialog>) // CCustomDrawへチェイン
END_MSG_MAP()
DWORD OnPrePaint(int nID, LPNMCUSTOMDRAW lpnmcd){
if(lpnmcd->hdr.idFrom == IDC_LIST_STRIPE)
return CDRF_NOTIFYITEMDRAW;
else
return CDRF_DODEFAULT;
}
DWORD OnItemPrePaint(int nID, LPNMCUSTOMDRAW lpnmcd){
if(lpnmcd->hdr.idFrom == IDC_LIST_STRIPE){
LPNMLVCUSTOMDRAW lpnmlv = (LPNMLVCUSTOMDRAW)lpnmcd;
if(lpnmcd->dwItemSpec % 2){
lpnmlv->clrText = RGB(255, 255, 255);
lpnmlv->clrTextBk = RGB(128, 128, 128);
}
}
return CDRF_DODEFAULT;
}
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_list_stripe = GetDlgItem(IDC_LIST_STRIPE);
m_list_stripe.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT);
CRect rcList;
m_list_stripe.GetWindowRect(rcList);
int nScrollWidth = GetSystemMetrics(SM_CXVSCROLL);
int nBorder = GetSystemMetrics(SM_CXBORDER);
m_list_stripe.InsertColumn(0, _T("名前"), LVCFMT_LEFT, 130, -1);
m_list_stripe.InsertColumn(1, _T("種類"), LVCFMT_LEFT,
rcList.Width() - 130 - nScrollWidth - nBorder * 2, -1);
// アプリケーションがあるフォルダパスを取得
TCHAR szAppRoot[_MAX_PATH];
::GetModuleFileName(NULL, szAppRoot, sizeof(szAppRoot) / sizeof(TCHAR));
::StringCbCopy(::_tcsrchr(szAppRoot, _T('\\')) + 1,
sizeof(szAppRoot), _T("*.*"));
CFindFile find;
if(find.FindFile(szAppRoot)){
do{
if(!find.IsDots()){
int nIndex = m_list_stripe.GetItemCount();
m_list_stripe.AddItem(nIndex, 0, find.GetFileName());
m_list_stripe.AddItem(nIndex, 1,
find.IsDirectory() ? _T("フォルダ") : _T("ファイル"));
}
}while(find.FindNextFile());
}
// メッセージループにメッセージフィルタとアイドルハンドラを追加
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);
}
};
|