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

运行程序

相关推荐
TNTLWT38 分钟前
单例模式(C++)
javascript·c++·单例模式
水饺编程44 分钟前
Windows 命令行:cd 命令3,当前目录,父目录,根目录
c语言·c++·windows·visual studio
kyle~44 分钟前
C/C++---动态内存管理(new delete)
c语言·开发语言·c++
m0_552200821 小时前
《UE5_C++多人TPS完整教程》学习笔记49 ——《P50 应用瞄准偏移(Applying Aim Offset)》
c++·游戏·ue5
m0_552200821 小时前
《UE5_C++多人TPS完整教程》学习笔记50 ——《P51 多人游戏中的俯仰角(Pitch in Multiplayer)》
c++·游戏·ue5
ChindongX2 小时前
CStringArray 和 CStringList
mfc
The Chosen One9853 小时前
C++ : AVL树-详解
开发语言·c++
zzyzxb3 小时前
std::enable_shared_from_this
c++
SNAKEpc121383 小时前
QML和Qt Quick
c++·qt
hansang_IR3 小时前
【题解】洛谷 P4286 [SHOI2008] 安全的航线 [递归分治]
c++·数学·算法·dfs·题解·向量·点积