// maindlg.h内
class CMainDlg : public CDialogImpl<CMainDlg>
{
public:
enum { IDD = IDD_MAINDLG };
CListBox m_list_font; // フォント名表示用
// メッセージマップ
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_HANDLER_EX(IDC_LIST_FONT, LBN_DBLCLK, OnListDblClick)
COMMAND_ID_HANDLER_EX(IDOK, OnOK)
COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
END_MSG_MAP()
LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){
// スクリーンの中央に配置
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_list_font = GetDlgItem(IDC_LIST_FONT);
// 使用可能なフォント名列挙
CClientDC dc(m_hWnd);
EnumFontFamilies(dc, NULL,
(FONTENUMPROC)FontProc, (LPARAM)m_list_font.m_hWnd);
return TRUE;
}
static int CALLBACK FontProc(ENUMLOGFONT *lpelf,
NEWTEXTMETRIC *lpntm, int nFontType, LPARAM lParam)
{
CListBox list = (HWND)lParam;
// TrueTypeフォント名のみリストに追加
if(nFontType & TRUETYPE_FONTTYPE)
list.AddString(lpelf->elfLogFont.lfFaceName);
return 1;
}
void OnListDblClick(UINT uNotifyCode, int nID, HWND hWndCtl){
// 現在選択されているアイテムを取得して表示
int nIndex = m_list_font.GetCurSel();
if(nIndex != LB_ERR){
CString strText;
m_list_font.GetText(nIndex, strText);
MessageBox(strText);
}
}
void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){
EndDialog(nID);
}
void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){
EndDialog(nID);
}
};
|