当前位置: 首页 > news >正文

MFC序列号输入框

在MFC(Microsoft Foundation Classes)中创建一个对话框的过程,该对话框用于输入序列号(SN),并具有一些特定的行为,比如自动聚焦到输入框、验证输入规则以及根据输入情况关闭对话框。以下是步骤说明和一些代码示例:

步骤 1: 创建对话框资源

  1. 使用MFC的资源编辑器添加一个新的对话框资源。
  2. 在对话框中添加一个编辑控件(IDC_EDIT1),用于输入SN。
  3. 设置编辑控件的文本对齐属性为居中(Align Text 属性设为 Center)。

步骤 2: 设置对话框类

  1. 为对话框创建一个类,继承自CDialog
  2. 在对话框类的构造函数中,创建一个自定义字体并设置为输入框的字体。
CYourDialog::CYourDialog(UINT nIDTemplate, CWnd* pParentWnd): CDialog(nIDTemplate, pParentWnd)
{// 从系统中检索当前图标标题使用的字体设置SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lf, 0);lf.lfWeight = FW_NORMAL;lf.lfHeight = 50; // 设置字体大小为50像素m_hFont = CreateFontIndirect(&lf);
}CYourDialog::~CYourDialog()
{DeleteObject(m_hFont);if (m_hIMC)ImmAssociateContext(GetSafeHwnd(), m_hIMC);
}

步骤 3: 初始化对话框

  1. 重写OnInitDialog函数,设置输入框的字体并聚焦。
BOOL CYourDialog::OnInitDialog()
{CDialog::OnInitDialog();CWnd* pwnd = GetDlgItem(IDC_EDIT1);if (pwnd){pwnd->SendMessage(WM_SETFONT, (WPARAM)m_hFont, 0);pwnd->SetFocus();// 关闭输入法m_hIMC = ::ImmAssociateContext(pwnd->GetSafeHwnd(), NULL);}return TRUE;
}

步骤 4: 监控输入情况

  1. 通过处理EN_UPDATE通知消息来监控输入框的内容变化。
  2. 如果输入不符合规则,清空输入框;如果符合规则,设置一个定时器用于自动关闭对话框。
void CYourDialog::OnEnChangeEdit1()
{CWnd* pwnd = GetDlgItem(IDC_EDIT1);if (pwnd){pwnd->GetWindowText(m_strSN);}if (!m_strSN.IsEmpty()){if (!m_bTimer){m_bTimer = TRUE;SetTimer(TIMER_CHECKSTRING, 200, NULL);m_strOld = m_strSN; }}
}void CYourDialog::OnTimer(UINT_PTR nIDEvent)
{if (nIDEvent == TIMER_CHECKSTR){CWnd* pwnd = GetDlgItem(IDC_EDIT1);if (pwnd){pwnd->GetWindowText(m_strSN);}if (m_strSN != m_strOld){if (!CheckSN()){pwnd->SetWindowText(L"");}else{SetTimer(TIMER_CLOSE, m_nDeadTime, NULL); // m_nDeadTime为自动关闭前的等待时间}m_bTimer = FALSE;}}else if (nIDEvent == TIMER_DEAD_CLOSE ){KillTimer(TIMER_DEAD_CLOSE );KillTimer(TIMER_CLOSE);EndDialog(IDOK);}
}

步骤 5: 实现SN验证逻辑

  1. 实现CheckSN函数,根据你的业务规则验证SN的合法性。
BOOL CYourDialog::CheckSN()
{// 实现SN验证逻辑// 返回TRUE表示SN合法,FALSE表示不合法
}

步骤 6: 注册消息和添加控件变量

  1. 在对话框类的头文件中,添加消息映射和控件变量。
enum { IDD = IDD_YOURDIALOG };
enum { IDC_EDIT1 = 1000 };BEGIN_MESSAGE_MAP(CYourDialog, CDialog)// ...ON_EN_CHANGE(IDC_EDIT1, &CYourDialog::OnEnChangeEdit1)ON_WM_TIMER()
END_MESSAGE_MAP()private:CFont m_hFont;HIMC m_hIMC;BOOL m_bTimer;CString m_strSN, m_strOld;const UINT TIMER_CHECKSTR = 1;const UINT TIMER_DEAD_CLOSE = 2;UINT m_nDeadTime; // 自动关闭前的等待时间

相关文章:

  • 一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案
  • K-Means 算法详解
  • 游戏中的寻路算法研究
  • 解决内核模块加载使用-f参数无法加载的问题
  • 为什么要学Java?
  • Linux驱动开发(二)--字符设备驱动开发提升 LED驱动开发实验
  • 18个机器学习核心算法模型总结
  • 2025计算机毕业设计选题题目推荐-毕设题目汇总大全
  • 智慧校园综合管理系统:打造高效智慧的学校管理平台
  • 契约锁电子签章平台 add 远程命令执行漏洞复现(XVE-2023-23720)
  • 关于面试被面试官暴怼:“几年研究生白读” 的前因后果
  • React获取DOM节点
  • 【Android】基于webView打造富文本编辑器(H5)
  • 网络故障排查-TCP标志位
  • VB.net调用VC DLL(二)
  • [译] 怎样写一个基础的编译器
  • “大数据应用场景”之隔壁老王(连载四)
  • 【个人向】《HTTP图解》阅后小结
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • js面向对象
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 简单实现一个textarea自适应高度
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 算法之不定期更新(一)(2018-04-12)
  • 最近的计划
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ‌Excel VBA进行间比法设计
  • #《AI中文版》V3 第 1 章 概述
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)UDP基本编程步骤
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 表达式计算:Expression Evaluator
  • .net对接阿里云CSB服务
  • .NET和.COM和.CN域名区别
  • .net下的富文本编辑器FCKeditor的配置方法
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @我的前任是个极品 微博分析
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angular] 笔记 18:Angular Router
  • [Bugku]密码???[writeup]
  • [bzoj 3534][Sdoi2014] 重建
  • [C++初阶]string类的详解
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [git] windows系统安装git教程和配置