MFC编辑框中怎么检测是否存在数据
时间: 2023-08-29 12:09:14 浏览: 150
在MFC中,可以通过以下步骤来检测编辑框中是否存在数据:
1. 获取编辑框的指针:首先,获取编辑框控件的指针。假设您已经在对话框类中声明了一个编辑框控件变量,例如`CEdit m_editBox`。
2. 获取编辑框文本:使用`GetWindowText`函数来获取编辑框中的文本内容,并将其存储在一个字符串变量中。
```cpp
CString strText;
m_editBox.GetWindowText(strText);
```
3. 检查文本内容:使用字符串变量的`IsEmpty`或`GetLength`函数来检查文本内容是否为空。
```cpp
if (strText.IsEmpty())
{
// 编辑框中没有数据
}
else
{
// 编辑框中有数据
}
```
4. 执行相应操作:根据需要,在条件分支中执行相应的操作,例如显示消息框、更新界面或进行其他处理。
这些步骤描述了在MFC中检测编辑框中是否存在数据的一般过程。请根据您的具体情况和代码结构进行相应的调整和实现。
相关问题
请详细指导如何在VS2010的MFC对话框应用程序中实现串口通信,并在对话框中集成组合框和编辑框以实现数据的输入与显示。
在VS2010中使用MFC开发串口通信应用,首先需要创建一个MFC对话框应用程序。开始之前,我建议您查看《VS2010 MFC入门:串口通信实战教程》,这本书将带领您一步步建立项目并添加所需的控件。
参考资源链接:[VS2010 MFC入门:串口通信实战教程](https://wenku.csdn.net/doc/6412b52cbe7fbd1778d42343?spm=1055.2569.3001.10343)
创建好MFC对话框项目后,您需要添加并配置用户界面元素,如组合框和编辑框。具体步骤如下:
1. 打开VS2010,选择创建新项目,然后选择MFC应用程序,并确保对话框模块被选中。
2. 在对话框编辑器中,添加组合框控件用于选择串口设备,添加编辑框控件用于输入和显示数据。
3. 为这些控件设置合适的ID,并在对话框类中为它们添加成员变量,以便在代码中进行操作。
4. 实现串口通信的关键是添加串口控件。这通常涉及到自定义串口控件类,继承自CWnd,并在其中封装串口操作相关的API函数。
5. 在对话框类中,编写打开串口的函数,调用WinAPI中的CreateFile、SetCommState、ReadFile和WriteFile等函数进行串口配置和数据传输。
6. 使用WM_COMMNOTIFY消息来监听串口事件,或者使用定时器轮询方式检测串口状态。
7. 在组合框中填充可用的串口列表,使用GetCommMaskers() API获取系统中存在的串口名称。
8. 最后,确保在用户点击打开串口按钮时,通过调用您自定义的串口操作函数来正确地打开串口,并在编辑框中显示接收到的数据。
通过以上步骤,您将能够在VS2010的MFC对话框应用程序中实现串口通信,并处理数据输入与显示。建议在完成本项目后,继续深入学习《VS2010 MFC入门:串口通信实战教程》中的高级内容,以进一步提升您的技能水平。
参考资源链接:[VS2010 MFC入门:串口通信实战教程](https://wenku.csdn.net/doc/6412b52cbe7fbd1778d42343?spm=1055.2569.3001.10343)
MFC,有一个主对话框Commodity_testDlg,和两个子对话框,分别为InputInfoDialog,ShowGoods 主对话框中有一个tree控件,存在如下节点: 录入商品库存信息 显示已录入商品库存信息 通过点击tree中的某一个节点,显示子对话框 要求使用clist以及迭代器相关知识 在子对话框InputIndoDialog中对四个编辑框IDC_ID、IDC_NAME、IDC_COUNT、IDCPRICE, 输入以下数据 商品ID 商品名称 商品数量 商品价格 同时需要对插入的数据,进行判断,不可以输入非法数据 同时存在一个插入的按钮,插入成功,提示“插入成功”,否则提示“插入失败” 然后可以在ShowGoods中用list control显示出来,ShowGoods当中只存在list control这一个控件 请给出一个完整的实例代码,以及代码注释,不可删减
以下是一个完整的实例代码,包括注释:
```
// Commodity_testDlg.h : 头文件
//
#pragma once
#include "InputInfoDialog.h"
#include "ShowGoods.h"
// CCommoditytestDlg 对话框
class CCommoditytestDlg : public CDialogEx
{
// 构造
public:
CCommoditytestDlg(CWnd* pParent = nullptr); // 标准构造函数
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_COMMODITY_TEST_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
CTreeCtrl m_TreeCtrl; // 树形控件变量
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
// 新增的函数
void InitTreeCtrl(); // 初始化树形控件
void OnNodeSelected(HTREEITEM hItem); // 树形控件节点被选中的处理函数
void InsertDataToList(CString strID, CString strName, CString strCount, CString strPrice); // 将数据插入到列表控件中
void ClearListData(); // 清空列表控件数据
// 声明子对话框变量
CInputInfoDialog m_InputInfoDlg;
CShowGoods m_ShowGoodsDlg;
public:
afx_msg void OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult);
};
```
```
// Commodity_testDlg.cpp : 实现文件
//
#include "pch.h"
#include "framework.h"
#include "Commodity_test.h"
#include "Commodity_testDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCommoditytestDlg 对话框
CCommoditytestDlg::CCommoditytestDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_COMMODITY_TEST_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CCommoditytestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TREE, m_TreeCtrl);
}
BEGIN_MESSAGE_MAP(CCommoditytestDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE, &CCommoditytestDlg::OnTvnSelchangedTree)
END_MESSAGE_MAP()
// CCommoditytestDlg 消息处理程序
BOOL CCommoditytestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将大括号拆分成两行,以便阅读
{
// 将图标设置为对话框的图标
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// 初始化树形控件
InitTreeCtrl();
}
// 将大括号拆分成两行,以便阅读
{
// 将子对话框居中
CRect rc;
GetClientRect(rc);
rc.DeflateRect(10, 60, 10, 10);
m_InputInfoDlg.MoveWindow(rc);
// 显示主对话框
ShowWindow(SW_SHOW);
// 显示子对话框
m_InputInfoDlg.ShowWindow(SW_SHOW);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CCommoditytestDlg::InitTreeCtrl()
{
// 获取根节点
HTREEITEM hRoot = m_TreeCtrl.InsertItem(_T("商品管理"));
// 添加子节点
HTREEITEM hItem = m_TreeCtrl.InsertItem(_T("录入商品库存信息"), hRoot);
m_TreeCtrl.InsertItem(_T("子节点1"), hItem);
m_TreeCtrl.InsertItem(_T("子节点2"), hItem);
hItem = m_TreeCtrl.InsertItem(_T("显示已录入商品库存信息"), hRoot);
m_TreeCtrl.InsertItem(_T("子节点3"), hItem);
m_TreeCtrl.InsertItem(_T("子节点4"), hItem);
// 展开根节点
m_TreeCtrl.Expand(hRoot, TVE_EXPAND);
}
void CCommoditytestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CCommoditytestDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CCommoditytestDlg::OnNodeSelected(HTREEITEM hItem)
{
// 获取节点的文本
CString strText = m_TreeCtrl.GetItemText(hItem);
// 根据节点的文本选择对应的子对话框
if (strText == _T("录入商品库存信息"))
{
m_InputInfoDlg.ShowWindow(SW_SHOW);
m_ShowGoodsDlg.ShowWindow(SW_HIDE);
}
else if (strText == _T("显示已录入商品库存信息"))
{
m_InputInfoDlg.ShowWindow(SW_HIDE);
m_ShowGoodsDlg.ShowWindow(SW_SHOW);
// 清空列表控件数据
ClearListData();
}
}
void CCommoditytestDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// 获取选中的节点
HTREEITEM hItem = m_TreeCtrl.GetSelectedItem();
// 处理选中的节点
OnNodeSelected(hItem);
*pResult = 0;
}
void CCommoditytestDlg::InsertDataToList(CString strID, CString strName, CString strCount, CString strPrice)
{
// 获取列表控件
CListCtrl* pListCtrl = m_ShowGoodsDlg.GetListCtrl();
// 添加行
int nItem = pListCtrl->GetItemCount();
pListCtrl->InsertItem(nItem, strID);
// 添加列
pListCtrl->SetItemText(nItem, 1, strName);
pListCtrl->SetItemText(nItem, 2, strCount);
pListCtrl->SetItemText(nItem, 3, strPrice);
}
void CCommoditytestDlg::ClearListData()
{
// 获取列表控件
CListCtrl* pListCtrl = m_ShowGoodsDlg.GetListCtrl();
// 清空所有行
pListCtrl->DeleteAllItems();
}
```
```
// InputInfoDialog.h : 头文件
//
#pragma once
// CInputInfoDialog 对话框
class CInputInfoDialog : public CDialogEx
{
DECLARE_DYNAMIC(CInputInfoDialog)
public:
CInputInfoDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CInputInfoDialog();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_INPUT_INFO_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
private:
CString m_strID;
CString m_strName;
CString m_strCount;
CString m_strPrice;
};
```
```
// InputInfoDialog.cpp : 实现文件
//
#include "pch.h"
#include "Commodity_test.h"
#include "InputInfoDialog.h"
#include "afxdialogex.h"
// CInputInfoDialog 对话框
IMPLEMENT_DYNAMIC(CInputInfoDialog, CDialogEx)
CInputInfoDialog::CInputInfoDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_INPUT_INFO_DIALOG, pParent)
{
}
CInputInfoDialog::~CInputInfoDialog()
{
}
void CInputInfoDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID, m_strID);
DDX_Text(pDX, IDC_NAME, m_strName);
DDX_Text(pDX, IDC_COUNT, m_strCount);
DDX_Text(pDX, IDC_PRICE, m_strPrice);
}
BEGIN_MESSAGE_MAP(CInputInfoDialog, CDialogEx)
ON_BN_CLICKED(IDOK, &CInputInfoDialog::OnBnClickedOk)
END_MESSAGE_MAP()
// CInputInfoDialog 消息处理程序
void CInputInfoDialog::OnBnClickedOk()
{
// 获取编辑框的值
UpdateData(TRUE);
// 进行数据校验
// ...
// 将数据插入到列表控件中
((CCommoditytestDlg*)GetParent())->InsertDataToList(m_strID, m_strName, m_strCount, m_strPrice);
// 插入成功,提示“插入成功”,否则提示“插入失败”
// ...
CDialogEx::OnOK();
}
```
```
// ShowGoods.h : 头文件
//
#pragma once
// CShowGoods 对话框
class CShowGoods : public CDialogEx
{
DECLARE_DYNAMIC(CShowGoods)
public:
CShowGoods(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CShowGoods();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_SHOW_GOODS };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_ListCtrl;
virtual BOOL OnInitDialog();
};
```
```
// ShowGoods.cpp : 实现文件
//
#include "pch.h"
#include "Commodity_test.h"
#include "ShowGoods.h"
#include "afxdialogex.h"
// CShowGoods 对话框
IMPLEMENT_DYNAMIC(CShowGoods, CDialogEx)
CShowGoods::CShowGoods(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_SHOW_GOODS, pParent)
{
}
CShowGoods::~CShowGoods()
{
}
void CShowGoods::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST, m_ListCtrl);
}
BEGIN_MESSAGE_MAP(CShowGoods, CDialogEx)
END_MESSAGE_MAP()
// CShowGoods 消息处理程序
BOOL CShowGoods::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置列表控件的样式和列标题
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0, _T("商品ID"), LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(1, _T("商品名称"), LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(2, _T("商品数量"), LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(3, _T("商品价格"), LVCFMT_LEFT, 100);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
```
阅读全文