1

ユーザーがコンボボックスでEnterキーを押したときにイベントをキャッチしたい。あなたを捕まえる方法。例: コンボボックスに「Nguyen Phong Sac」と入力します。Enter キーを押すと、「Nguyen Phong Sac」というメッセージが表示されます。ありがとうございます。

4

3 に答える 3

8

どんな種類のプログラムを書いているのか知りたいのですが、あなたが尋ねたように例を挙げます:

//Tested with Windows 7 x64, VS2012
//When Creating:
hWndComboBox = CreateWindow(WC_COMBOBOX, TEXT(""), 
               CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE,
               xpos, ypos, nwidth, nheight, hwndParent, NULL, HINST_THISCOMPONENT,
               NULL);

hWndEditBox = CreateWindow(WC_EDIT, TEXT(""), 
              CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE,
              xpos, ypos-30, nwidth, 30, hwndParent, NULL, HINST_THISCOMPONENT,
              NULL);

//Get hwnd of edit control in combobox created earlier.
HWND hwndEdit = GetWindow(hWndComboBox, GW_CHILD);
//Use SetWindowLong to create subclass, lpfnEditWndProc is original proc
lpfnEditWndProc = (WNDPROC) SetWindowLong(hwndEdit, GWL_WNDPROC, (DWORD) SubClassProc); 


//In Subclass Proc
LRESULT CALLBACK SubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
   switch (msg) 
   { 
    case WM_KEYDOWN: 
        switch (wParam) 
        {  
            case VK_RETURN: 
                                    //Get Text&Set Text
                LPTSTR buffer = new TCHAR[255];
                GetWindowText(hwnd, buffer, 255);
                SetWindowText(hWndEditBox, buffer);
            break;
        } 
        break; 

  } 

  return CallWindowProc(lpfnEditWndProc, hwnd, msg, wParam, lParam); 
} 
于 2013-03-27T09:10:23.903 に答える
0

2 遅れていることはわかっていますが、WndProc を使用できます

        protected override void WndProc(ref Message m)
        {
              if (m.Msg == 0x100 && (int)m.WParam == 13){
                    //Enter pressed
              }

              base.WndProc (ref m);
        }
于 2016-08-03T11:53:41.847 に答える