よろしくおねがいします。
WindowsXP, eVC++3.0, WindowsCE, MFC, ダイアログベースで
ハンディターミナルの開発をしています。
コンボボックスで、下記のようなデータがリストにあった場合、
01:バラ
02:ケース
03:キロ
1:リストから選択するのと、[01:バラ]が表示される。
2:"01"と入力すると[01:バラ]が、表示される。
というような、2通りで選択したいんです。
現在、PreTranslateMessageで、キーが押下された時に、
どこにフォーカスがあるか調べて、
それによって処理をしています。
エディットボックスならうまくいくのですが、
コンボボックスだとうまくいきません。
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
int ret;
switch (pMsg->message)
{
case WM_KEYDOWN:
switch (pMsg->wParam)
{
case VK_RETURN:
if (GetFocus() == GetDlgItem(IDC_DTP_NOUHIN)){ //日付時間
m_edit_tokcd.SetFocus(); return true;
}
if (GetFocus() == GetDlgItem(IDC_EDIT_TOKCD)){ //エディット
tokcdCheck(); return true;
}
if (GetFocus() == GetDlgItem(IDC_EDIT_KUBUN)){ //エディット
kubunCheck(); return true;
}
if (GetFocus() == GetDlgItem(IDC_COMBO_HANTANI)){ //コンボ
hantaniCheck(); return true;
}
//MessageBox(_T("test"), _T("test"), MB_OK);
return true;
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CTestDlg::hantaniCheck()
{
CString check_hantani;
int nIndex = 0;
CComboBox* pmyComboBox1=(CComboBox*)GetDlgItem(IDC_COMBO_HANTANI);
pmyComboBox1->GetWindowText(check_hantani);
check_hantani += _T(":");
nIndex = pmyComboBox1->SelectString(0, check_hantani);
}
IDC_DTP_NOUHINだとフォーカスが移動してくれます。
IDC_EDIT_TOKCDだとtokcdCheck()が実行されます。
IDC_COMBO_HANTANIだとhantaniCheck()を実行してくれません。
コンボボックスにフォーカスがあるか
判定してくれてない感じです。
ちなみに、
//MessageBox(_T("test"), _T("test"), MB_OK);のコメントをはずして、
コンボボックスでEnterキーを押した場合、メッセージが表示されます。
コンボボックスは、なにか違うことがあるのでしょうか?
ながながと書きましたが、よろしくお願いします。
コンボボックスって確か単純なコントロールじゃなかった様な・・
今は eVC環境が無いので余り細かい事は言えないのですが、
取りあえず通常のMSDNで CComboBoxのクラス概要を見てもらえば分かるとおり、
WM_KEYDOWN でなんかやろうと思ったら、エディットコントロールを取得して操作してやらないとダメだと思います。
エンターをキックにしなくて良いなら、別のアプローチで行った方が面倒が無くて良いと思います。
(例えば、01と入力された時点若しくは:をキックにデータを固定して良いなら・・・)
if(::GetParent(pMsg->hwnd) == GetDlgItem(IDC_COMBO1)->m_hWnd) {
こんなのとか
みなさんありがとうございます。
Toshiさん
>エンターをキックにしなくて良いなら、別のアプローチで行った方が面倒が無くて良いと思います。
>(例えば、01と入力された時点若しくは:をキックにデータを固定して良いなら・・・)
一応ほかの方法でやろうと思い、コンボボックスのエディットボックス部分の変更があった時に、
内容を見て数字2桁だったら、SelectStringで選択させるようにしたら、うまくいきました。
OKと思っていたら・・・他のキーも判定したかったんです、んーどうしょって感じでした。
(こんな方法のことだったんでしょうか?)
そこで、とさん
>if(::GetParent(pMsg->hwnd) == GetDlgItem(IDC_COMBO1)->m_hWnd) {
でやってみたらできました。おーすごい。
みなさんの、アドバイスのおかげでできました。
感謝感謝です。
ありがとうございます。
ツイート | ![]() |