MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC 您所在的位置:网站首页 纽约的英语单词怎么写 MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC

MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC

2023-06-19 12:50| 来源: 网络整理| 查看: 265

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); }; #endif

CAlphaEdit.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。

三、 尝试切换输入法:无效 // 切换到英文输入法 //::SendMessage(this->m_hWnd, WM_INPUTLANGCHANGEREQUEST, 1, 0); 加载默认输入法 //HKL layout = LoadKeyboardLayout(0, KLF_ACTIVATE); 切换到英文输入法 //layout = LoadKeyboardLayout("04090409", KLF_ACTIVATE); // 美国英语输入法 SetThreadInputLocale(MAKELCID(layout, SORT_DEFAULT)); ActivateKeyboardLayout(layout, KLF_ACTIVATE); UnloadKeyboardLayout(layout); //CString temp = ""; //GetKeyboardLayoutName(temp.GetBuffer(1000)); temp.ReleaseBuffer(); //logger.INFO_F(FUN_LINE+temp.GetBuffer());


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有