none
MFC中如何用 屏蔽编辑控件(OLE定制控件) 限定字符输入 RRS feed

答案

  • 处理WM_CHAR消息,自己过滤掉非法的字符


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年3月18日 2:08
    版主
  • 例如在父窗口中PreTranslateMessage()虚函数中处理
    BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
    {
     // TODO: Add your specialized code here and/or call the base class
     if(WM_CHAR == pMsg->message)
     {
      HWND hWnd = pMsg->hwnd;
      TCHAR szClassName[MAX_PATH] = {0};
      GetClassName(hWnd, szClassName, MAX_PATH);
      if(0 == _tcscmp(szClassName, _T("Edit")))
      {
       CWnd pWnd;
       VERIFY(pWnd.Attach(hWnd));
       
       int nID = pWnd.GetDlgCtrlID();
       switch(nID)
       {
       case IDC_EDIT1:
        AfxMessageBox(_T("1"));
        break;

       case IDC_EDIT2:
        AfxMessageBox(_T("2"));
        break;

       case IDC_EDIT3:
        AfxMessageBox(_T("3"));
        break;

       case IDC_EDIT4:
        AfxMessageBox(_T("4"));
        break;

       default:
        break;
       }
       pWnd.Detach();
      }
     }
     return CDialog::PreTranslateMessage(pMsg);
    }

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年3月18日 5:59
    版主

全部回复

  • 处理WM_CHAR消息,自己过滤掉非法的字符


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年3月18日 2:08
    版主
  • 处理WM_CHAR消息,自己过滤掉非法的字符


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

        如果有多个 不同要求种类的 编辑框 怎么区分是限定的哪个呀
    2011年3月18日 3:20
  • 例如在父窗口中PreTranslateMessage()虚函数中处理
    BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
    {
     // TODO: Add your specialized code here and/or call the base class
     if(WM_CHAR == pMsg->message)
     {
      HWND hWnd = pMsg->hwnd;
      TCHAR szClassName[MAX_PATH] = {0};
      GetClassName(hWnd, szClassName, MAX_PATH);
      if(0 == _tcscmp(szClassName, _T("Edit")))
      {
       CWnd pWnd;
       VERIFY(pWnd.Attach(hWnd));
       
       int nID = pWnd.GetDlgCtrlID();
       switch(nID)
       {
       case IDC_EDIT1:
        AfxMessageBox(_T("1"));
        break;

       case IDC_EDIT2:
        AfxMessageBox(_T("2"));
        break;

       case IDC_EDIT3:
        AfxMessageBox(_T("3"));
        break;

       case IDC_EDIT4:
        AfxMessageBox(_T("4"));
        break;

       default:
        break;
       }
       pWnd.Detach();
      }
     }
     return CDialog::PreTranslateMessage(pMsg);
    }

     


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.
    2011年3月18日 5:59
    版主
  • Hi lililove,

    >>就是如何 在编辑框中 只获取 限定的 合法字符

    如果您的编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新的创建标志ES_NUMBERS, 该标志限制 编辑控件只能获取数字字符。

    如果您需要复杂的编辑控件,可以使用Microsoft 的屏蔽编辑控件,它是一个很有用的OLE定制控件。

    如果您不想用这个控件,可以像VisualEleven所说的派生一个CEdit类并处理WM_CHAR消息,然后从编辑控件中过滤出特定的字符。

    >>如果有多个 不同要求种类的 编辑框 怎么区分是限定的哪个呀

    同样像VisualEleven提议的,在Windows下的程序中,所有的资源都是有唯一标号的,使每个资源对象能唯一的区别于其他资源,所以我们可以通过资源ID来对编辑框做出区别,使之完成各自的响应处理

    我们可以通过"View"菜单的"ID= Resource Symboles…"查到指定ID的资源标识号的实际数值,然后通过API函数::GetDlgCtrlID()根据这个句柄返回此窗口资源的ID 号,该ID号是动态获取的,使之同预先查看好的编辑框的ID作下比较即可区分出是需要哪个编辑框作出响应

     

    如果您的问题解决了,请把有用的回答标记为答案!

     

    谢谢,

    Lucy


    Lucy Liu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月21日 3:44
    版主