// SampleProjectFrame.h
#pragma once
class CSampleProjectFrame :
public CFrameWindowImpl<CSampleProjectFrame>,
public CUpdateUI<CSampleProjectFrame>,
public CAppWindow<CSampleProjectFrame>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_APP_FRAME_CLASS(NULL, IDR_MAINFRAME, L"Software\\WTL")
enum { IDC_DOCLIST = 1200 };
CDocListCtrl m_doc_list;
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CFrameWindowImpl<CSampleProjectFrame>::PreTranslateMessage(pMsg);
}
virtual BOOL OnIdle(){
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CSampleProjectFrame)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CSampleProjectFrame)
MSG_WM_CREATE(OnCreate)
MSG_WM_DESTROY(OnDestroy)
CHAIN_MSG_MAP(CAppWindow<CSampleProjectFrame>)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CSampleProjectFrame>)
END_MSG_MAP()
int OnCreate(LPCREATESTRUCT lpCreateStruct){
// メニューバー作成
CreateSimpleCEMenuBar(0, SHCMBF_EMPTYBAR);
// DocListコントロールを作成
TCHAR szPath[MAX_PATH];
SHGetSpecialFolderPath(m_hWnd, szPath, CSIDL_PERSONAL, 0);
m_hWndClient = m_doc_list.Create(m_hWnd,
IDC_DOCLIST, szPath, _T("ヘッダファイル\0*.h\0"));
m_doc_list.Refresh();
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
return 0;
}
void OnDestroy(){
// メッセージループからメッセージフィルタとアイドルハンドラを削除
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
SetMsgHandled(false);
}
};
|