MFC工控项目实例二十一型号选择界面删除参数按钮禁用切换

承接专栏《MFC工控项目实例二十手动测试界面模拟量输入实时显示》

对于禁止使用的删除、参数按钮,在选中列表控件选项时切换为能够使用。

1、在TypDlg.h文件中添加代码

cpp 复制代码
#include "ShadeButtonST.h"
#include "BtnST.h"
class CTypDlg : public CDialog
{
public:
	...
	CShadeButtonST	m_bAdd;
	CShadeButtonST	m_bDel;
	CShadeButtonST	m_bParameter;
	CShadeButtonST	m_bReturn;
	CListCtrl	m_ctrlType;
  ...
  }	

2、在TypDlg.cpp文件中添加代码

cpp 复制代码
void CTypDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_ctrlType);
	DDX_Control(pDX, IDC_BUTTON1, m_bAdd);
	DDX_Control(pDX, IDC_BUTTON2, m_bDel);
    DDX_Control(pDX, IDC_BUTTON3, m_bParameter);
	DDX_Control(pDX, IDCANCEL, m_bReturn);
   }

BEGIN_MESSAGE_MAP(CTypDlg, CDialog)
	//{{AFX_MSG_MAP(CTypDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CTypDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_bAdd.SetShade(CShadeButtonST::SHS_HARDBUMP);
	m_bDel.SetShade(CShadeButtonST::SHS_HARDBUMP);
    m_bParameter.SetShade(CShadeButtonST::SHS_HARDBUMP);
	m_bReturn.SetShade(CShadeButtonST::SHS_HARDBUMP);
...
}

void CTypDlg::OnButton2() 
{
    if(m_nTypeIndex < theApp.m_nProductSel)
	theApp.m_nProductSel--;
	theApp.m_allPara.RemoveAt(m_nTypeIndex);
	m_ctrlType.DeleteItem(m_nTypeIndex);	
	GetDlgItem(IDC_BUTTON2)->EnableWindow(0);
    GetDlgItem(IDC_BUTTON3)->EnableWindow(0);
}

void CTypDlg::OnButton3() 
{
	CTypData dlg;
	dlg.m_pPara = &theApp.m_allPara[m_nTypeIndex];

	if(dlg.DoModal() == IDOK)
	{

    	LV_ITEM item;
		item.mask = LVIF_TEXT|LVIF_IMAGE;
		item.iItem = m_nTypeIndex;
		item.iSubItem = 0;
		item.pszText = theApp.m_allPara[m_nTypeIndex].m_strTypeName;
		item.iImage = 0;
		m_ctrlType.SetItem(&item);
		item.iSubItem = 1;
		item.pszText = theApp.m_allPara[m_nTypeIndex].m_strBrand;
		m_ctrlType.SetItem(&item);
		item.iSubItem = 2;
		item.pszText = theApp.m_allPara[m_nTypeIndex].m_strRemark;
		m_ctrlType.SetItem(&item);
	}	
	
}

void CTypDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	POSITION pos = m_ctrlType.GetFirstSelectedItemPosition();
	if(pos != NULL)
	{
		int nItem = m_ctrlType.GetNextSelectedItem(pos);
		if(m_nTypeIndex != nItem)
		{
			m_nTypeIndex = nItem;
		}
	}
	else
		m_nTypeIndex = -1;	
	*pResult = 0;
}

void CTypDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	    GetDlgItem(IDC_BUTTON2)->EnableWindow(true);
	    GetDlgItem(IDC_BUTTON3)->EnableWindow(true);
}

void CTypDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	
	
	OnButton3() ;
	*pResult = 0;
}

运行程序

相关推荐
martian66514 分钟前
深入解析C++驱动开发实战:优化高效稳定的驱动应用
开发语言·c++·驱动开发
hd51cc37 分钟前
MFC运行时
开发语言·mfc
FMRbpm39 分钟前
用队列实现栈
数据结构·c++·新手入门
wangjialelele1 小时前
git工作原理、个人使用到多人协作开发与git FLOW模型
c语言·c++·git·团队开发·个人开发
iCxhust1 小时前
__acrtused 是什么
c语言·c++·单片机·嵌入式硬件·微机原理
程序员zgh2 小时前
CMake 项目构建工具介绍
c语言·开发语言·c++·编辑器
量子炒饭大师2 小时前
一天一个计算机知识——【编程百度】向上取整
c语言·数据结构·c++·git·github
Dream it possible!2 小时前
LeetCode 面试经典 150_字典树_添加与搜索单词 - 数据结构设计(96_211_C++_中等)
c++·leetcode·面试·字典树
dragoooon342 小时前
[C++——lesson26.「多态」]
java·c++·学习方法·多态
爱吃KFC的大肥羊2 小时前
Redis 基础完全指南:从全局命令到五大数据结构
java·开发语言·数据库·c++·redis·后端