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

📄 allusernode.h

📁 财务管理软件,很好的,适合小型企业试用,欢迎下载
💻 H
字号:
#ifndef __AllUserNODE_H__
#define __AllUserNODE_H__

#include "UserNode.h"


class CAllUserNode : public CBaseNodeItem<CAllUserNode>
{
	std::vector<CUserNode*> m_vecItems;
public:
	CAllUserNode():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();

	}
	
	~CAllUserNode()
	{    //停止线程
		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");
	}
	//当MMC需要显示该节点信息时,在结果视图中初始化标题头
	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"全名", 0,  MMCLV_AUTO);
				_ASSERT( SUCCEEDED(hr) );
			hr = spHeaderCtrl->InsertColumn( 3, L"描述", 0,  MMCLV_AUTO);
				_ASSERT( SUCCEEDED(hr) );

			hr = spHeaderCtrl->InsertColumn( 4, L"全局标识(GUID)", 0,  MMCLV_AUTO);
				_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 //__AllUserNODE_H__

⌨️ 快捷键说明

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