我在VC中创建了一个SDK工程,然后用资源编辑器新建了一个对话框,并在上面放置了一个编辑框控件。现在我想在窗口的过程函数中识别在编辑框中的按键。但是却不知道该怎么写?参考书上说“编辑框通过向其父窗口发送WM_COMMAND消息通知应用程序用户的交互信息”,但是常用的通知码中没有与识别按键相关的!请问我该如何处理?窗口过程函数如下所示:
………………
BOOL CALLBACK TestDlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT        rect ; switch (message)
{
case WM_INITDIALOG :
 return FALSE ; case WM_COMMAND :
         if (LOWORD (wParam) == IDC_WORDEDIT)
 if (HIWORD (wParam) == EN_CHANGE)
              MessageBox (hDlg, "", szAppName, MB_OK | MB_ICONSTOP) ;
 break;

case WM_CLOSE :
 EndDialog(hDlg, 0) ;
 return TRUE ;
}
return FALSE ;
}

解决方案 »

  1.   

    子类化方法!~
    BOOL CALLBACK EditProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    case WM_CHAR :
     //做你想做的事
             break;
    }
    return DefWindowProc(hEdit, message, wParam, lParam);
    }
    SetWindowsLong(hEdit, GWL_WNDPROC, EditProc);
      

  2.   

    同意楼上的,用子类化。
    #include <windows.h>
    #include "resource.h"WNDPROC EditProc;
    LRESULT CALLBACK NewProc(HWND hEdit, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
    if (Msg == WM_KEYDOWN && wParam == VK_F1)
    MessageBox(GetParent(hEdit), "F1 Pressed!", "WM_CHAR", MB_OK);
      return CallWindowProc(EditProc, hEdit, Msg, wParam, lParam);
    }
    LRESULT CALLBACK ProcMain(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
      switch (Msg)
      {
      case WM_INITDIALOG:
        {
          EditProc = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_EDIT), GWL_WNDPROC, (LONG)NewProc); 
        }
        break;
      case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;
      case WM_DESTROY:
        PostQuitMessage(0);
        break;
      }
      return 0;
    }
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
      DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)ProcMain, 0);
      return 0;
    }
      

  3.   

    我刚学SDK,对“子类化”这个概念还不是太了解,书上也没有提到这个。不过,看了楼上两位大虾的代码。我想大概是把编辑框控件的消息处理单独写成一个窗口过程。是这样吧?我先编个例程学习学习……