Visualization Tool Kit(VTK)など

×
ダイアログ上でエディットボックスとスライダーの両方でパラメータをいじれる時に、エディットボックス上でEnterを押すことでスライダーや内部データに値を反映させたかったので作成しました。
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
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニュー

チュートリアル

アルゴリズム(数学)

並列計算

STL

#include<memory> #include<string> #include<sstream> #include<algorithm> #include<functional> #include<numeric>

Media Foundation

【メニュー編集】
Wiki記法ガイド

メンバーのみ編集できます

広告募集中