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

运行程序

相关推荐
Larry_Yanan1 小时前
QML学习笔记(四十)QML的ApplicationWindow和StackView
c++·笔记·qt·学习·ui
Kratzdisteln4 小时前
【C语言】Dev-C++如何编译C语言程序?从安装到运行一步到位
c语言·c++
Dream it possible!5 小时前
LeetCode 面试经典 150_栈_有效的括号(52_20_C++_简单)(栈+哈希表)
c++·leetcode·面试··哈希表
kyle~5 小时前
C++--- override 关键字 强制编译器验证当前函数是否重写基类的虚函数
java·前端·c++
HY小海6 小时前
【C++】AVL树实现
开发语言·数据结构·c++
仰泳的熊猫6 小时前
LeetCode:701. 二叉搜索树中的插入操作
数据结构·c++·算法·leetcode
郝学胜-神的一滴7 小时前
Linux系统函数stat和lstat详解
linux·运维·服务器·开发语言·c++·程序人生·软件工程
owCode9 小时前
3-C++中类大小影响因素
开发语言·c++
程序猿Eason9 小时前
U587038 背包 题解
c++·算法·动态规划
爱吃芒果的蘑菇9 小时前
C++之WebSocket初体验
网络·c++·websocket·网络协议