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;
}

运行程序

相关推荐
t***5448 分钟前
Dev-C++中哪些选项可以设置
开发语言·c++
2301_803554521 小时前
C++ 并发核心:std::promise、std::future、std::async 超详细全解
开发语言·c++
EverestVIP1 小时前
C++ 成员函数的指针
c++
俺不要写代码1 小时前
线程启动、结束,创建线程多法、join,detach,线程的移动语义
服务器·开发语言·网络·c++
思麟呀1 小时前
应用层协议HTTP
linux·服务器·网络·c++·网络协议·http
小徐不徐说2 小时前
面试C++易错点总结
开发语言·c++·面试·职场和发展·程序设计·工作
xier_ran3 小时前
【C++】“内部”、“外部”、“派生类”、“友元“类
java·开发语言·c++
熬夜敲代码的猫3 小时前
C/C++:内存管理
c语言·c++·动态内存管理
故事和你913 小时前
洛谷-数据结构1-2-二叉树1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
大橘3 小时前
【qml-5.1】qml与c++交互(QML_ELEMENT/QML_SINGLETON)
开发语言·c++·qt·交互·qml