MFC没有IMEMode 想软件自动切换到英文状态以便扫码时不会变成汉字。 MFC-自定义控件Edit control。MFC禁用中文输入法

news2024/11/28 14:36:13

0、直接说最终解决方法:MFC禁用中文输入法

#include <Imm.h>
// 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 <cctype>
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());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg 编译android mac环境编译 或者centos

ndk版本:ndk21 (可使用android studio内部下载的ndk) /Users/XXXX/Library/Android/sdk/ndk/21.4.7075529 ffmpeg下载 ffmpeg6.0 1:git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2:或者直接点击下面按钮下载 http://ffmpeg.org/releases/ffmpeg-6.0.tar.xz 环…

极致呈现系列之:Echarts雷达图的魅力与价值

目录 什么是雷达图vue3中引入雷达图绘制简单的雷达图雷达图的数据处理什么是数据归一化处理对chartData的数据进行归一化将归一化后的数据应用到雷达图中 美化雷达图 什么是雷达图 雷达图是一种基于极坐标系的可视化图表&#xff0c;用于展示多维数据之间的关系。它通过设置不…

Cross-modal Moment Localization in Videos论文笔记

Cross-modal Moment Localization in Videos论文笔记 0.来源1.摘要2.介绍3.模型3.1语言-时间注意网络3.2损失函数3.2.1对齐损失3.2.2位置损失3.2.2损失函数 4.实验4.1数据集4.2性能比较4.3 ROLE的几种变体 5.未来工作 0.来源 2018年 Cross-modal Moment Localization in Video…

MFC-皮肤颜色集组合界面程序DlgSkinBase

虽然是小程序,编辑的源代码也很少&#xff0c;但其中的编程思想却是大型工程项目的配色经典基础。就如万丈高楼的基础中的钢筋般重要。 或者很多程序员一辈子也难接触到大型项目程序...还是那句话&#xff0c;既然缘分来了&#xff0c;不妨共享出来&#xff0c;希望能对有缘人有…

卖课软文怎么写,揭秘知识付费软文写作技巧

随着互联网的发展&#xff0c;知识付费已经成为了一种趋势。越来越多的人开始关注自我提升和职业发展&#xff0c;而知识付费也成为了他们获取知识和技能的重要途径。在这个背景下&#xff0c;卖课软文也成为了知识付费领域一种重要的推广方式。本文伯乐网络传媒将为大家揭秘卖…

hadoop本地化windows部署

文章目录 前言1. hadoop on windows1.1 安装jdk1.2 安装hadoop1.2.1 解压1.2.2 备用目录1.2.3 修改配置1.2.4 安装winutils-master1.2.5 格式化namenode1.2.6 启动hadoop1.2.7 web-ui登陆hadoop hdfs 2. spark on windows2.1 安装scala2.2 安装spark2.2.1 解压2.2.2 环境变量2.…

2年点工月薪10k,自学自动化年薪突破30W

我是农村出生的家庭&#xff0c;经济并不富裕&#xff0c;一个人奔波在大城市&#xff0c;总是很自卑。那段时间父亲身体不好&#xff0c;家里打电话说要花很多钱&#xff0c;于是我辞掉了一个月薪7k的功能测试&#xff0c;去了一个电子厂&#xff0c;每天加班加满月薪也能拿到…

【SpringCloud-3】Hystrix熔断器

通常情况下&#xff0c;一个请求可能会调用很多个服务。 如果下游某个服务异常&#xff0c;不能正常返回结果&#xff0c;导致上游所有服务等待&#xff0c;最终可能导致大量服务资源耗尽&#xff0c;造成雪崩。 说简单点&#xff0c;撸代码时&#xff0c;一定要保护好自己的服…

【vue3】vue3组件通信方式

一、props 可以实现父子组件通信&#xff0c;子组件通过defineProps获取父组件传递的数据&#xff0c;且在子组件内部不需要引入defineProps方法就可以直接使用&#xff01; 1、父组件给子组件传递数据 <Child hobby"学习" :money"money"></Chil…

Sui Builder House首尔站精彩集锦

6月3–4日&#xff0c;超过400人参加了Sui Builder House首尔站活动&#xff0c;近距离地了解了Sui网络的最新情况和路线图中提供的相关计划。作为主网推出后的第一个Builder House活动&#xff0c;参与者在现场体验了Sui的实现。 此次活动在首尔江南区举行&#xff0c;共设有…

分享一个玉质按钮

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>* {-webkit-box-sizing: border-box;-moz-box-sizing: border-box;bo…

SpringBoot用线程池ThreadPoolExecutor处理百万级数据

SpringBoot用线程池ThreadPoolExecutor处理百万级数据 更多优秀文章&#xff0c;请扫码关注个人微信公众号或搜索“程序猿小杨”添加。 一、背景&#xff1a; 使用JDK线程池ThreadPoolExecutor多线程异步执行批量插入、更新等操作方法&#xff0c;提高百万级数据插入效率。 二…

Paper: Attention Is All You Need

目录 Abstract1 Introduction2 Background3 Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Multi-Head Attention3.2.3 Applications of Attention in our Model 3.3 Position-wise Feed-Forward Networks3.4 Embedd…

4.4网络模型 4.5协议 4.6网络通信的过程

4.4网络模型 OSI七层参考模型 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xff09;参考模型&#xff0c;即开放式系统互联。参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;…

DDR-SDRAM技术原理总结

DDR SDRAM 全称&#xff1a; Double Date Rate Synchronous Dynamic Random Access Memory 先说RAM&#xff08;Random Access Memory&#xff09;&#xff0c;字面意思&#xff1a;随机访问存储器&#xff0c;其特点是可任意访问一个内存地址&#xff0c;其访问时间是一样的&…

怎样在前端项目中使用MySQL模块操作数据库?

要想在项目中操作数据库&#xff0c; 首先要安装操作 MySQL 数据库的第三方模块(mysql)&#xff0c; 借助mysql 模块连接到 MySQL 数据库&#xff0c; 执行 SQL 语句&#xff0c;具体的流程如下图所示。 安装与配置 mysql 模块 安装 mysql 模块 mysql 模块是托管于 npm 上的第…

继承—JavaSE

文章目录 1.基础知识1.1继承的概念1.2语法 2子类对从父类继承下来的成员的访问2.1对成员变量的访问2.2对成员方法的访问 3.super关键字3.1访问父类的成员变量&#xff08;super.变量&#xff09;3.2访问父类的成员方法&#xff08;super.方法&#xff09;3.3调用父类的构造方法…

手把手教学Android游戏--轮船大战小游戏(文末有代码)

目录 1.1课程设计的目的 1.2本选题的内容要求 1.3 软件开发运行环境 2.1设计思路 2.2软件总体结构图 2.3主要功能模块的设计 3.1 开始界面模块 3.1.1进入游戏设计 3.1.2退出游戏设计 3.1.3开始界面主要代码 3.2 游戏主界面显示模块 3.2.1游戏界面设计 3.2.2游戏界面鱼雷、炸弹、…

【C++---面向对象预备】

C---面向对象预备 一 、内存的分区&#xff1a;1.1 代码区&#xff1a;1.2 全局区&#xff1a;1.3 栈区&#xff1a;1.4 堆区&#xff1a; 二 、引用&#xff1a;2.1、引用注意事项&#xff1a;2.2、引用作函数参数&#xff1a;2.3、引用作函数的返回值&#xff1a;2.4、引用的…

explain | 索引优化的这把绝世好剑,你真的会用吗?

对于互联网公司来说&#xff0c;随着用户量和数据量的不断增加&#xff0c;慢查询是无法避免的问题。 一般情况下如果出现慢查询&#xff0c;意味着接口响应慢、接口超时等问题&#xff0c;如果是高并发的场景&#xff0c;可能会出现数据库连接被占满的情况&#xff0c;直接导…