MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC | 您所在的位置:网站首页 › 纽约的英语单词怎么写 › MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC |
0、直接说最终解决方法:MFC禁用中文输入法
#include
// Function for Disabling IME 禁用中文输入法
void DisableIME(HWND hWnd)
{
HIMC m_hImc; // 全局或者成员变量
//HWND hWnd = pWnd->GetDlgItem(IDC_EDIT1)->m_hWnd;
if (hWnd && IsWindow(hWnd))
{
// Get input context for backup.
m_hImc = ImmGetContext(hWnd);
// Remove association the testing
if (m_hImc)
ImmAssociateContext(hWnd, NULL);
// Release input context
ImmReleaseContext(hWnd, m_hImc);
::SetFocus(hWnd);
}
}
调用 BOOL CLabelCmpDlg::OnInitDialog() { CDialogEx::OnInitDialog(); DisableIME(pWnd->GetDlgItem(IDC_EDIT1)->m_hWnd); //禁用中文输入法 一、C#是怎么做到的?C#文本框自带一个IMEMODE的属性。但MFC没有这个。怎么办呢?
但MFC edit control在接收扫码时如果当前为中文输入法或者全角就会出错。需要软件来限制。从根本上避免出错。默认只有数字限定。 我想要的是半角英文即Alpha,首先想想C#是怎么实现在的? 如果每个edit control都加上_KeyPress事件来处理,太费劲。 二、MFC-自定义控件Edit control。不能解决问题。用MFC 帮写个类,继承edit control类,只接受半角英文即ascii CAlphaEdit.h #pragma once #ifndef CALPHAEDIT_H #define CALPHAEDIT_H //只允许输入ascii class CAlphaEdit : public CEdit { DECLARE_DYNAMIC(CAlphaEdit) //public: // CAlphaEdit(); // virtual ~CAlphaEdit(); protected: DECLARE_MESSAGE_MAP() afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); }; #endifCAlphaEdit.cpp #include "../pch.h" #include "CAlphaEdit.h" #include IMPLEMENT_DYNAMIC(CAlphaEdit, CEdit) //CAlphaEdit::CAlphaEdit() //{ //} //CAlphaEdit::~CAlphaEdit() //{ //} BEGIN_MESSAGE_MAP(CAlphaEdit, CEdit) ON_WM_CHAR() END_MESSAGE_MAP() void CAlphaEdit ::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // 只接受半角英文或数字输入 if (!__isascii(nChar)) { //logger.ERROR_F("禁止输入非ASCII字符"); return; // 禁止输入非ASCII字符 } CEdit::OnChar(nChar, nRepCnt, nFlags); }调用。把CEdit改成CAlphaEdit即可。 上面的,限制输入只能为ascii码也不能解决问题。比如我是五笔中文,我sn为fx123456。我扫码输入fx1时,变成汉字坳,限制了汉字所以还是空,最后变成了23456。 |
CopyRight 2018-2019 实验室设备网 版权所有 |