MFC序列号输入框

devtools/2024/10/18 14:17:48/

在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; // 自动关闭前的等待时间

http://www.ppmy.cn/devtools/50994.html

相关文章

Redis 数据持久化策略和数据过期策略

01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 : 使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些业务数据 , 例如 : 验证码 , 用户信息 , 用户行为数据 , 数据计算结果 , 排行榜数据等 使用Redis实…

修改SubVI的LabVIEW默认搜索路径

在启动顶级VI后&#xff0c;LabVIEW可能会遇到找不到subVI的情况。这通常是由于subVI的路径发生了变化或没有被正确配置。 LabVIEW默认搜索路径 默认情况下&#xff0c;LabVIEW会按以下顺序搜索文件位置&#xff08;*表示LabVIEW将搜索子目录&#xff09;&#xff1a; <t…

论文阅读笔记:DepGraph: Towards Any Structural Pruning

论文阅读笔记&#xff1a;DepGraph: Towards Any Structural Pruning 1 背景2 创新点3 方法4 模块4.1 分组4.2 依赖图4.3 网络分解4.4 依赖建模4.4 组级剪枝 5 效果 论文&#xff1a;https://arxiv.org/pdf/2301.12900 代码&#xff1a;https://github.com/VainF/Torch-Prunin…

[数据分析与可视化] 基于Python绘制简单动图

动画是一种高效的可视化工具&#xff0c;能够提升用户的吸引力和视觉体验&#xff0c;有助于以富有意义的方式呈现数据可视化。本文的主要介绍在Python中两种简单制作动图的方法。其中一种方法是使用matplotlib的Animations模块绘制动图&#xff0c;另一种方法是基于Pillow生成…

ACM算法学习路线、清单

入门 模拟、暴力、贪心、高精度、排序 图论 搜索 BFS、DFS、IDDFS、IDA*、A*、双向BFS、记忆化 最短路 SPFA、bellman-fort(队列优化)、Dijkstra(堆优化)、Johnson、Floyd、差分约束、第k短路 树 树的重心和直径、dfs序、树链刨分与动态树、LCA、Prufer编码及Cayley定理…

2024最新!最全!面试必看!!!【Redis面经】

文章目录 Redis是什么&#xff1f;为什么要使用它&#xff1f;Redis为什么这么快Redis的存储结构有哪些&#xff1f;有哪些应用场景&#xff1f;Redis分布式锁是什么&#xff1f;实现方式Redis分布式锁的特征 redis跳表是什么&#xff1f;为什么不用b树而选择跳表&#xff1f;R…

禁止methtype联网

mathtype断网_如何禁止mathtype联网-CSDN博客https://blog.csdn.net/qq_41060221/article/details/128144783

【Android面试八股文】Android中操作多线程的方式有哪些?

文章目录 1. 使用 `Thread` 和 `Runnable`2. `AsyncTask`3. `Handler` 和 `Looper`4. `HandlerThread`5. `ThreadPoolExecutor`6. `IntentService`7. `RxJava`8. `Coroutine`(协程)9. `WorkManager`在Android开发中,有多种方式可以进行多线程操作。以下是主要的几种方式: 1…