MFC序列号输入框

2024-06-13 19:44
文章标签 mfc 输入框 序列号

本文主要是介绍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; // 自动关闭前的等待时间

这篇关于MFC序列号输入框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058251

相关文章

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

控制台和MFC中内存泄露工具vld的使用

最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。    vld资源:    1)、大家可以移步下边的网址下载:     http://vld.codeplex.com/releases/view/82311    2

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

几种MFC对话框的隐藏方法

修改CXXAPP中的InitInstance函数,将原来的模态对话框改为非模态对话框,及修改 [cpp]  view plain copy INT_PTR nResponse = dlg.DoModal();     为 [cpp]  view plain copy dlg.Create(CModalHideDlg::IDD);

序列号SYN+确认号ACK

处于对于wireshark中的SYN和ACK如何计算出来的疑惑 找的这篇译文! From:  http://blog.csdn.net/a19881029/article/details/38091243 原文见:http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/

MFC首先要知道的--程序执行顺序

MFC的程序执行顺序 很多刚学MFC的人都会被MFC给弄的晕头转向。以前传统的C语言中的main()不见了,window sdk api 中的WinMain()函数也不见了,到底用MFC编写的程序是如何开始运行的呢?到底MFC有没有遵从最基本的C++的标准呢?到底MFC的代码运行的顺序又是怎么样的呢?那么多个文件,那么多函数,到底哪一个先运行,哪一个后运行,哪一个调用哪一个,哪一个又被哪一个调用

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使

控制台、win32 、mfc 、QT区别

控制台程序主要用于早期dos(disk operate system)编程。win32 在windows95系统以前,c++还未流行起来,面向c语言(面向过程)的窗口编程,c语言直接使用API进行开发,大多数API都需带入windows句柄作为参数。mfc基于win32添加了c++特性,基于面向对象编程,实际是对windows 大多API的封装库,但内容复杂混乱。包涵一个应用程序的框架,为减少