// 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 };
CListBox m_list_font; // フォント名表示用
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)
COMMAND_HANDLER_EX(IDC_LIST_FONT, LBN_DBLCLK, OnListDblClick)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_list_font = GetDlgItem(IDC_LIST_FONT);
// 使用可能なフォント名列挙
CClientDC dc(m_hWnd);
EnumFontFamilies(dc, NULL,
(FONTENUMPROC)FontProc, (LPARAM)m_list_font.m_hWnd);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
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);
}
static int CALLBACK FontProc(ENUMLOGFONT *lpelf,
NEWTEXTMETRIC *lpntm, int nFontType, LPARAM lParam)
{
CListBox list = (HWND)lParam;
list.AddString(lpelf->elfLogFont.lfFaceName);
return 1;
}
void OnListDblClick(UINT uNotifyCode, int nID, CWindow wndCtl){
// 現在選択されているアイテムを取得して表示
int nIndex = m_list_font.GetCurSel();
if(nIndex != LB_ERR){
CString strText;
m_list_font.GetText(nIndex, strText);
MessageBox(strText);
}
}
};
|