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

📄 allgroupnode.h

📁 非常不错的财政管理系统
💻 H
字号:
#ifndef __AllGroupNODE_H__
#define __AllGroupNODE_H__

#include "GroupNode.h"


class CAllGroupNode : public CBaseNodeItem<CAllGroupNode>
{
	std::vector<CGroupNode*> m_vecItems;
public:
	CAllGroupNode():m_threadId(0), m_thread(NULL), 
m_running(false), m_bViewUpdated(false)
	{
		memset(&m_scopeDataItem, 0, sizeof(SCOPEDATAITEM));
		m_scopeDataItem.mask = SDI_STR | SDI_IMAGE | SDI_OPENIMAGE | SDI_PARAM | SDI_CHILDREN;
		m_scopeDataItem.displayname = MMC_CALLBACK;
		m_scopeDataItem.nImage = 0; 		
		m_scopeDataItem.nOpenImage = 1;
		m_scopeDataItem.lParam = (LPARAM) this;
		
		memset(&m_resultDataItem, 0, sizeof(RESULTDATAITEM));

        InitializeCriticalSection(&m_critSect);

       //InitChildren();


	}
	
	~CAllGroupNode()
	{
		StopThread();
		for(int i=0; i<m_vecItems.size(); i++)
			delete m_vecItems[i];

		DeleteCriticalSection(&m_critSect);
	}


	STDMETHOD(GetResultViewType)(LPOLESTR *ppViewType,long *pViewOptions)
	{
		*ppViewType = NULL;
		*pViewOptions = MMC_VIEW_OPTIONS_NONE;
		return S_FALSE;
	}


	STDMETHOD(QueryPagesFor)(DATA_OBJECT_TYPES type)
	{
		if (type == CCT_SCOPE || type == CCT_RESULT)
			return S_OK;
		return S_FALSE;
	}

	HRESULT OnSelect(IConsole *spConsole, IComponent* pComponent)
	{
		IConsoleVerb *pConsoleVerb;
		HRESULT hr = spConsole->QueryConsoleVerb(&pConsoleVerb);
		_ASSERT(SUCCEEDED(hr));
	//	hr = pConsoleVerb->SetVerbState(MMC_VERB_REFRESH, ENABLED, TRUE);
	//	_ASSERT(SUCCEEDED(hr));
	//	hr = pConsoleVerb->SetVerbState(MMC_VERB_PROPERTIES, ENABLED, TRUE);
	//	_ASSERT(SUCCEEDED(hr));
		pConsoleVerb->Release();
		
		return S_OK;
	}

	LPOLESTR GetResultPaneColInfo(int nCol)
	{
	   switch (nCol)
	   {
	   case 0:
		  return m_bstrDisplayName;

	   }

	   return OLESTR("Override GetResultPaneColInfo");
	}


	HRESULT OnShow(IConsole *pConsole, BOOL bShow)
	{
		HRESULT hr = S_FALSE;
		if(bShow)
		{        
			CComQIPtr<IResultData, &IID_IResultData> spResultData(pConsole);
			CComQIPtr<IHeaderCtrl, &IID_IHeaderCtrl> spHeaderCtrl(pConsole);
			//spResultData->SetDescBarText(OLESTR("Bleh"));
			//spResultData->SetViewMode(LVS_LIST);
			HRESULT hr = spResultData->DeleteAllRsltItems();
			/*
			CComPtr<IDataObject, &IID_IDataObject> spDataObject;
			GetDataObject(&spDataObject, CCT_SCOPE);
			pConsole->UpdateAllViews(spDataObject, 0, 0);
			*/
			hr = spHeaderCtrl->InsertColumn( 0, L"组名", 0,  MMCLV_AUTO);
				_ASSERT( SUCCEEDED(hr) );
			hr = spHeaderCtrl->InsertColumn( 1, L"描述", 0,  MMCLV_AUTO);
				_ASSERT( SUCCEEDED(hr) );
			hr = spHeaderCtrl->InsertColumn( 2, L"全局标识(GUID)", 0,  MMCLV_AUTO);
				_ASSERT( SUCCEEDED(hr) );


/*
		    for(int i=0; i<m_vecItems.size(); i++)
			{
				hr=spResultData->InsertItem(&m_vecItems[i]->m_resultDataItem);
				_ASSERT( SUCCEEDED(hr) );
			}

  */
		}
		return S_FALSE;
	}	 





	HRESULT OnExpand(BOOL bExpand, IConsole *pConsole, HSCOPEITEM parent);

private:
    //停止线程
	void StopThread();
    //启动线程
	void StartThread();

    //线程主过程
    static DWORD WINAPI ThreadProc(
      LPVOID lpParameter   // thread data
    );

    //保存该指针,便于线程使用,插入子节点时需要
	//控制台名字空间对象,插入子节点需要调用其方法
	IConsoleNameSpace *m_pConsoleNameSpace;
	//父节点句柄
    HSCOPEITEM m_scopeitem;
	//保存新产生的线程的ID值
    DWORD m_threadId;
	//线程句柄
    HANDLE m_thread;
	//线程是否正在运行
    bool m_running;
    //数据是否被刷新
	bool m_bViewUpdated;
	//临届区
	CRITICAL_SECTION m_critSect;
	//初始话子节点,该过程可能需要比较长的时间
	BOOL InitChildren();

};
#endif //__AllGroupNODE_H__

⌨️ 快捷键说明

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