Exemplo n.º 1
0
//寻找树项
HTREEITEM CUserCompanionList::SearchCompanionInfo(HTREEITEM hRootTreeItem, tagCompanionItem * pCompanionInfo)
{
	//获取父项
	if (hRootTreeItem==NULL) hRootTreeItem=m_hItemRoot;
	if (hRootTreeItem==NULL) return NULL;

	//变量定义
	HTREEITEM hTreeItemTemp=NULL;
	DWORD_PTR dwBindParam=(DWORD_PTR)pCompanionInfo;

	//循环查找
	do
	{
		//绑定判断
		if (GetItemData(hRootTreeItem)==dwBindParam) return hRootTreeItem;

		//子项搜索
		hTreeItemTemp=GetChildItem(hRootTreeItem);
		if (hTreeItemTemp!=NULL)
		{
			hTreeItemTemp=SearchCompanionInfo(hTreeItemTemp,pCompanionInfo);
			if (hTreeItemTemp!=NULL) return hTreeItemTemp;
		}

		//下一树项
		hRootTreeItem=GetNextItem(hRootTreeItem,TVGN_NEXT);

	} while (hRootTreeItem!=NULL);

	return NULL;
}
Exemplo n.º 2
0
//插入通知
bool __cdecl CUserCompanionList::OnCompanionInsert(tagCompanionItem * pCompanionInfo)
{
	//获取树项
	ASSERT(pCompanionInfo!=NULL);
	HTREEITEM hTreeItem=SearchCompanionInfo(NULL,pCompanionInfo);

	//事件处理
	if (hTreeItem==NULL) InsertCompanionInfo(pCompanionInfo);
	else UpdateCompanionInfo(hTreeItem,pCompanionInfo);

	return true;
}
Exemplo n.º 3
0
//删除关系
bool CUserCompanionList::DeleteCompanionInfo(tagCompanionItem * pCompanionInfo)
{
	//搜索树项
	HTREEITEM hTreeItem=SearchCompanionInfo(NULL,pCompanionInfo);

	//删除树项
	if (hTreeItem!=NULL)
	{
		DeleteItem(hTreeItem);
		return true;
	}

	return false;
}
Exemplo n.º 4
0
//更新通知
bool __cdecl CUserCompanionList::OnCompanionUpdate(tagCompanionItem * pCompanionInfo)
{
    //获取树项
    ASSERT(pCompanionInfo!=NULL);
    HTREEITEM hTreeItem=SearchCompanionInfo(NULL,pCompanionInfo);

    //事件处理
    if (hTreeItem==NULL) InsertCompanionInfo(pCompanionInfo);
    else
    {
        tagCompanionItem * pCurrCompanion=(tagCompanionItem *)GetItemData(hTreeItem);
        UpdateCompanionInfo(hTreeItem,pCompanionInfo);
    }

    //更新界面
    Invalidate(FALSE);
    UpdateWindow();

    return true;
}
Exemplo n.º 5
0
//删除关系
bool CUserCompanionList::DeleteCompanionInfo(tagCompanionItem * pCompanionInfo)
{
    //搜索树项
    HTREEITEM hTreeItem=SearchCompanionInfo(NULL,pCompanionInfo);

    //删除树项
    if (hTreeItem!=NULL)
    {
        //获取数据
        tagCompanionItem * pCompanionItemTreeData=(tagCompanionItem *)GetItemData(hTreeItem);

        //删除关系
        if (pCompanionItemTreeData!=NULL) DeleteCompanionItem(pCompanionItemTreeData);

        //删除子项
        DeleteItem(hTreeItem);
        return true;
    }

    return false;
}
Exemplo n.º 6
0
//设置关系
tagCompanionInfo * CUserInformation::InsertCompanionInfo(IClientUserItem * pIClientUserItem, BYTE cbCompanion)
{
	//效验参数
	ASSERT(pIClientUserItem!=NULL);
	if (pIClientUserItem==NULL) return NULL;

	//用户搜索
	DWORD dwUserID=pIClientUserItem->GetUserID();
	tagCompanionInfo * pCompanionInfo=SearchCompanionInfo(dwUserID);

	//设置信息
	if (pCompanionInfo==NULL)
	{
		//创建对象
		pCompanionInfo=CreateCompanionItem();
		if (pCompanionInfo==NULL) return NULL;

		//设置信息
		pCompanionInfo->cbCompanion=cbCompanion;
		pCompanionInfo->dwGameID=pIClientUserItem->GetGameID();
		pCompanionInfo->dwUserID=pIClientUserItem->GetUserID();
		lstrcpyn(pCompanionInfo->szNickName,pIClientUserItem->GetNickName(),CountArray(pCompanionInfo->szNickName));
		lstrcpyn(pCompanionInfo->szUserNote,pIClientUserItem->GetUserNoteInfo(),CountArray(pCompanionInfo->szUserNote));

		//插入通知
		if (m_pIUserCompanionSink!=NULL) m_pIUserCompanionSink->OnCompanionInsert(pCompanionInfo);
	}
	else
	{
		//修改判断
		bool bModify=false;
		if (pCompanionInfo->cbCompanion!=cbCompanion) bModify=true;
		if ((bModify==false)&&(lstrcmp(pCompanionInfo->szNickName,pIClientUserItem->GetNickName())!=0)) bModify=true;
		if ((bModify==false)&&(lstrcmp(pCompanionInfo->szUserNote,pIClientUserItem->GetUserNoteInfo())!=0)) bModify=true;

		//修改判断
		if (bModify=false) return pCompanionInfo;

		//设置信息
		pCompanionInfo->cbCompanion=cbCompanion;
		pCompanionInfo->dwGameID=pIClientUserItem->GetGameID();
		pCompanionInfo->dwUserID=pIClientUserItem->GetUserID();
		lstrcpyn(pCompanionInfo->szNickName,pIClientUserItem->GetNickName(),CountArray(pCompanionInfo->szNickName));
		lstrcpyn(pCompanionInfo->szUserNote,pIClientUserItem->GetUserNoteInfo(),CountArray(pCompanionInfo->szUserNote));

		//更新通知
		if (m_pIUserCompanionSink!=NULL) m_pIUserCompanionSink->OnCompanionUpdate(pCompanionInfo);
	}

	//变量定义
	IStream * pIStreamSub=NULL;
	IStorage * pIStorageSub=NULL;
	IStorage * pIStorageRoot=NULL;

	//写入数据
	try
	{
		//构造名字
		WCHAR szStorageName[16]=L"";
		_snwprintf(szStorageName,CountArray(szStorageName),L"%ld",dwUserID);

		//工作目录
		TCHAR szDirectory[MAX_PATH]=TEXT("");
		CWHService::GetWorkDirectory(szDirectory,CountArray(szDirectory));

		//打开文件
		WCHAR szInfomationFile[MAX_PATH]=L"";
		_snwprintf(szInfomationFile,CountArray(szInfomationFile),L"%s\\%s",(LPCWSTR)(CT2CW(szDirectory)),INFORMATION_FILE);

		//打开文件
		StgOpenStorage(szInfomationFile,NULL,STGM_READWRITE|STGM_SHARE_EXCLUSIVE,0,0,&pIStorageRoot);
		if (pIStorageRoot==NULL) StgCreateDocfile(szInfomationFile,STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE,0,&pIStorageRoot);

		//错误判断
		if (pIStorageRoot==NULL) throw TEXT("StgCreateDocfile Create pIStorageRoot Error");

		//打开存储
		pIStorageRoot->CreateStorage(szStorageName,STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&pIStorageSub);
		if (pIStorageSub==NULL) pIStorageRoot->CreateStorage(szStorageName,STGM_CREATE|STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&pIStorageSub);

		//错误处理
		if (pIStorageSub==NULL) throw TEXT("CreateStorage Create pIStorageSub Error");

		//创建数据
		pIStorageSub->CreateStream(STREAM_COMPANION,STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&pIStreamSub);
		if (pIStreamSub==NULL) pIStorageSub->CreateStream(STREAM_COMPANION,STGM_CREATE|STGM_WRITE|STGM_SHARE_EXCLUSIVE,0,0,&pIStreamSub);

		//错误处理
		if (pIStreamSub==NULL) throw TEXT("CreateStream Create pIStreamSub Error");

		//写入数据
		ULONG cbWriteCount=0L;
		pIStreamSub->Write(pCompanionInfo,sizeof(tagCompanionInfo),&cbWriteCount);

		//释放接口
		SafeRelease(pIStreamSub);
		SafeRelease(pIStorageSub);
		SafeRelease(pIStorageRoot);

		return pCompanionInfo;
	}
	catch (...)
	{
		//错误断言
		ASSERT(FALSE);

		//释放接口
		SafeRelease(pIStreamSub);
		SafeRelease(pIStorageSub);
		SafeRelease(pIStorageRoot);
	}

	return NULL;
}