// 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 };
enum { IDC_INKX = 1200 };
CInkXCtrl m_inkx;
CComboBox m_combo_mode;
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_COMBO_MODE, CBN_SELCHANGE, OnComboSelChange)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_combo_mode = GetDlgItem(IDC_COMBO_MODE);
// ペンモードをコンボボックスアイテムとして設定
m_combo_mode.AddString(_T("MODE_PEN"));
m_combo_mode.SetItemData(0, MODE_PEN);
m_combo_mode.AddString(_T("MODE_SELECT"));
m_combo_mode.SetItemData(1, MODE_SELECT);
m_combo_mode.AddString(_T("MODE_SPACE"));
m_combo_mode.SetItemData(2, MODE_SPACE);
m_combo_mode.SetCurSel(0);
// InkXコントロールのサイズを作成
CRect rcWindow;
GetWindowRect(rcWindow);
CRect rcCombo;
m_combo_mode.GetWindowRect(rcCombo);
CRect rcInkX;
rcInkX.top = 10;
rcInkX.bottom =
rcCombo.top - rcWindow.top - ::GetSystemMetrics(SM_CYCAPTION) - 10;
rcInkX.left =
rcCombo.left - rcWindow.left - ::GetSystemMetrics(SM_CXBORDER);
rcInkX.right =
rcCombo.right - rcWindow.left - ::GetSystemMetrics(SM_CXBORDER);
// InkXコントロールを作成
m_inkx.Create(m_hWnd, rcInkX, NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER, 0, IDC_INKX);
m_inkx.ShowVoiceBar(TRUE);
m_inkx.GetRichInk().SetPenMode(MODE_PEN);
m_inkx.GetRichInk().SetViewStyle(VT_WRITINGVIEW);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
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);
}
void OnComboSelChange(UINT uNotifyCode, int nID, CWindow wndCtl){
int nIndex = m_combo_mode.GetCurSel();
if(nIndex != CB_ERR){
UINT mode = m_combo_mode.GetItemData(nIndex);
m_inkx.GetRichInk().SetPenMode(mode);
}
}
};
|