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

运行程序

相关推荐
uyeonashi26 分钟前
【Boost搜索引擎】构建Boost站内搜索引擎实践
开发语言·c++·搜索引擎
Smile丶凉轩3 小时前
Qt 界面优化(绘图)
开发语言·数据库·c++·qt
small_wh1te_coder5 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
hjjdebug7 小时前
constexpr 关键字的意义(入门)
c++·constexpr
虾球xz8 小时前
游戏引擎学习第282天:Z轴移动与摄像机运动
c++·学习·游戏引擎
.小墨迹9 小时前
Apollo学习——planning模块(3)之planning_base
linux·开发语言·c++·学习·自动驾驶
龙湾开发9 小时前
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(一)过程式凹凸贴图
c++·笔记·学习·3d·图形渲染
德亦周9 小时前
如何在Mac电脑上的VScode去配置C/C++环境
c++·vscode·macos
XiaoyaoCarter9 小时前
每日一道leetcode(新学数据结构版)
数据结构·c++·算法·leetcode·职场和发展·哈希算法·前缀树
八月的雨季 最後的冰吻10 小时前
SIP协议栈--osip源码梳理
linux·服务器·网络·c++·网络协议