ダイアログ上でエディットボックスとスライダーの両方でパラメータをいじれる時に、エディットボックス上でEnterを押すことでスライダーや内部データに値を反映させたかったので作成しました。
EditBox上でEnterを押すと親に通知してくれる(SendMessage)するEditBoxです。
他のイベントの通知と同様に作成します。一般にコントロール側からの通知はWM_COMMANDで通知されます。WPARAMの上位がイベントIDで下位がコントロールのIDになります。
EditBox上でEnterを押すと親に通知してくれる(SendMessage)するEditBoxです。
他のイベントの通知と同様に作成します。一般にコントロール側からの通知はWM_COMMANDで通知されます。WPARAMの上位がイベントIDで下位がコントロールのIDになります。
//ヘッダー部
#define EN_ENTER 0x0310 //このIDで不具合が生じないかはわかりません
#define ON_EN_ENTER(id, memberFxn) \
ON_CONTROL(EN_ENTER, id, memberFxn)
class CEnterNotifyEdit : public CEdit
{
//抜粋
virtual BOOL PreTranslateMessage(MSG* pMsg);
}
//ソース部
BOOL CEnterNotifyEdit::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
DWORD H = DWORD( EN_ENTER) << 16;
DWORD L = DWORD( this->GetDlgCtrlID() );
WPARAM wParam = H + L;
this->GetParent()->SendMessage(WM_COMMAND, wParam, (LPARAM)this->GetSafeHwnd());
}
return CEdit::PreTranslateMessage(pMsg);
}
//サンプル
//独自イベントなのでリソースエディタから追加することはできません。
//手書きで通知を受け取る親に追記してください。
//親ウインドウ CParentDialog
//コントロール変数 CEnterNotifyEdit m_EnterEdit
//エディットボックスのID IDC_ENTER_EDIT
BEGIN_MESSAGE_MAP(CParentDialog, CDialog)
ON_EN_ENTER(IDC_ENTER_EDIT, &CParentDialog::OnEnterEditEntered)
END_MESSAGE_MAP
void CParentDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//サブクラス化
DDX_Control(pDX, IDC_ENTER_EDIT, m_EnterEdit);
}
void CParentDialog::OnEnterEditEntered()
{
//To do: Add your control notification handler code here
}

コメントをかく