在一个对话框中有一个edit控件,想控制用户的输入,如果屏蔽键盘上的某些按钮,使用户按下不在edit中显示?

解决方案 »

  1.   

    可以用子类化实现,比如下边的例子就使edit只能接受a ~ z的字符:
    #include<windows.h>
    #include "resource.h"
    WNDPROC OldProc; // 原Edit窗口过程
    LRESULT CALLBACK ProcEdit(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
      if (Msg == WM_CHAR && (wParam >= 'z' || wParam <= 'a'))
        // 如果在允许范围之外,则屏蔽输入
        return TRUE;
      else
        return CallWindowProc(OldProc, hWnd, Msg, wParam, lParam);
    }
    LRESULT CALLBACK ProcMain(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
    {
      switch (Msg)
      {
      case WM_INITDIALOG:
        // 设置新的窗口过程
        OldProc = (WNDPROC)SetWindowLong(GetDlgItem(hDlg, IDC_EDIT), GWL_WNDPROC, (LONG)ProcEdit);
        break;
      case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;
      case WM_DESTROY:
        PostQuitMessage(0);
        break;
      }
      return 0;
    }
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevIstance,PSTR szCmdLine,int iCmdShow)
    {
      DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)ProcMain, 0);
      return 0;
    }
      

  2.   

    简单些可以重载WM_CHAR这个消息映谢