⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 templatemfcdlg.cpp

📁 Visual C++下的界面设计
💻 CPP
字号:
// TemplateMFCDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TemplateMFC.h"
#include "TemplateMFCDlg.h"
#include "ComGUID.hpp"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

using JetByteTools::CComGUID;


ListItemProcessor::ListItemProcessor(
   JetByteTools::CGUIDRegistryList &regList,
   JetByteTools::TComGUIDListBox<JetByteTools::CGUIDRegistryList::iterator, JetByteTools::CComGUID> &listBox,
	bool bAddItem)
	:  m_bAddItem(bAddItem),
		m_regList(regList),
      m_listBox(listBox)
{
}

void ListItemProcessor::ProcessSelectedItem(
   const int /* nIndex */,                      
   const CString &description,              
   void *pData,                           
   JetByteTools::CJBListBox::PostProcessAction_e &action)
{
   // This should be type safe anyway, pData should come in as a CComGUID
   // This means more template work...

   CComGUID *pGuid = (CComGUID*)pData;

	if (m_bAddItem)
	{
		// We're called to add an item to the list...
		if (!m_regList.HasItem(*pGuid))
      {
			m_regList.Add(*pGuid);
			m_listBox.AddItem(description, new CComGUID(*pGuid));

			action = JetByteTools::CJBListBox::Unselect;
      }
      else
      {
         ::MessageBox(NULL, _T("Item already present in list"), _T("Error"), MB_ICONSTOP);
      }
	}
	else
	{
		// Remove item from list box and registry list

		m_regList.Remove(*pGuid);
		
	   action = JetByteTools::CJBListBox::Delete;
	}
}

/////////////////////////////////////////////////////////////////////////////
// CTemplateMFCDlg dialog

CTemplateMFCDlg::CTemplateMFCDlg(
	JetByteTools::CGUIDRegistryList &list, 
	JetByteTools::CIterateGUID &catStart,
	const JetByteTools::CIterateGUID &catEnd,
	CWnd* pParent /*=NULL*/)
	:	CDialog(CTemplateMFCDlg::IDD, pParent),
		m_list(list),
		m_RegistryList(list.Begin(), list.End()),
		m_CategoryContentsList(catStart, catEnd),
		m_removeProcessor(m_list, m_RegistryList, false),
		m_addProcessor(m_list, m_RegistryList, true)
{
	//{{AFX_DATA_INIT(CTemplateMFCDlg)
	//}}AFX_DATA_INIT
}

void CTemplateMFCDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTemplateMFCDlg)
	DDX_Control(pDX, IDC_CAT_LIST, m_CategoryContentsList);
	DDX_Control(pDX, IDC_REGISTRY_LIST, m_RegistryList);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTemplateMFCDlg, CDialog)
	//{{AFX_MSG_MAP(CTemplateMFCDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTemplateMFCDlg message handlers

BOOL CTemplateMFCDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Clicking the remove button OR double clicking an item in the registry
	// list causes it to be removed...

	m_RegistryList.AssociateButton(
      IDC_REMOVE, &m_removeProcessor);
	
	m_RegistryList.SetDefaultProcessor(&m_removeProcessor);

	// Clicking the add button OR double clicking the item in the category
	// list causes the object to be added to the registry list

	m_CategoryContentsList.AssociateButton(
      IDC_ADD, &m_addProcessor);
	
	m_CategoryContentsList.SetDefaultProcessor(&m_addProcessor);


	return TRUE;  // return TRUE  unless you set the focus to a control
}

//put these in item processors and do it properly for both clicks in the list and button clicks

/*
void CTemplateMFCDlg::OnAdd() 
{
	// add item that's selected in category list to registry list and list box
	
	int nIndex = m_CategoryContentsList.GetCurSel();

	if (LB_ERR != nIndex)
	{		
		CString description;
	
		m_CategoryContentsList.GetText(nIndex, description);

		CComGUID *pGuid = m_CategoryContentsList.GetItemData(nIndex);
	
		if (!m_list.HasItem(*pGuid))
      {
			m_list.Add(*pGuid);
			m_RegistryList.AddItem(description, new CComGUID(*pGuid));
      }
      else
      {
         MessageBox( _T("Item already present in list"), _T("Error"), MB_ICONSTOP);
      }
	}
}
*/
/*void CTemplateMFCDlg::OnRemove() 
{
	// Remove item from list box and registry list

	int nIndex = m_RegistryList.GetCurSel();

	if (LB_ERR != nIndex)
	{		
		CComGUID *pGuid = m_RegistryList.GetItemData(nIndex);

		m_list.Remove(*pGuid);
		
		m_RegistryList.DeleteItem(nIndex);
	}
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -