// 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 };
CTrackBarCtrl m_track_size;
int nSize; // フォントサイズ
CRect m_rect; // 文字表示用矩形
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_PAINT(OnPaint)
MSG_WM_HSCROLL(OnHScroll)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_DESTROY(OnDestroy)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
END_MSG_MAP()
void OnPaint(CDCHandle /*dc*/){
CPaintDC dc(m_hWnd);
// 白い矩形を描画
CBrush brush;
brush.CreateSolidBrush(RGB(255, 255, 255));
dc.FillRect(m_rect, brush);
// テキスト色を青に設定
dc.SetTextColor(RGB(0, 0, 255));
CFont font;
font.CreatePointFont(nSize * 10, _T("Courier New"));
HFONT hOldFont = dc.SelectFont(font);
// 文字列を描画
dc.DrawText(_T("WTL"), -1,
m_rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
// 元のフォントを選択
dc.SelectFont(hOldFont);
}
void OnHScroll(UINT nSBCode, UINT nPos, CTrackBarCtrl pTrackBar){
nSize = pTrackBar.GetPos();
InvalidateRect(m_rect, FALSE);
}
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_track_size = GetDlgItem(IDC_SLIDER_SIZE);
// 文字サイズ
nSize = 25;
// 文字表示用矩形を取得
CStatic view = GetDlgItem(IDC_STATIC_VIEW);
view.GetWindowRect(m_rect);
ScreenToClient(m_rect);
m_track_size.SetRange(1, 50);
m_track_size.SetTicFreq(1);
m_track_size.SetPageSize(10);
m_track_size.SetLineSize(1);
m_track_size.SetPos(nSize);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
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);
}
};
|