Exemplo n.º 1
0
void CMetadataTree::AddMenuInfo(CMenu* pPopup,HTREEITEM hParentItem,int &nPos)
{
	if(nPos>10)
		return;
	CTreeCtrl *pCtrl=&GetTreeCtrl();
	HTREEITEM CurItem=pCtrl->GetChildItem(hParentItem);
	while(CurItem)
	{
		CObjectData data=dataMetaObj[CurItem];
		if(data.bGroup==0)
		if(data.nType==OBJ_FORM || data.nType==OBJ_MAKET || data.nType==OBJ_MODULE || data.nType==OBJ_DOC)
		{
			nPos++;
			aMenuItem.SetAtGrow(nPos,CurItem);
			CString csRes=CString("Открыть: \"")+pCtrl->GetItemText(CurItem)+"\"";
			int nID=MENU_START_ID2+nPos;
		    pPopup->InsertMenu(nPos, MF_BYPOSITION, nID, csRes);

			if(data.nType==OBJ_FORM)
				SetMBitmap(nID,IDB_EDIT_FORM)
			else
			if(data.nType==OBJ_MAKET)
				SetMBitmap(nID,IDB_EDIT_MAKET)
			else
			if(data.nType==OBJ_MODULE)
				SetMBitmap(nID,IDB_EDIT_MODULE)
			else
			if(data.nType==OBJ_DOC)
				SetMBitmap(nID,IDB_EDIT_DOC)

		}
		AddMenuInfo(pPopup,CurItem,nPos);
		CurItem=pCtrl->GetNextSiblingItem(CurItem);
	}
DWORD CInfoTalkEventMENU::ReadElementData(
	PBYTE pSrc,		/* [in] データの読み込み元 */
	int nNo)		/* [in] 要素番号 */
{
	int i, nCount;
	DWORD dwSize;
	PBYTE pDst, pDataTmp;
	PSTTALKEVENTMENUINFO pInfo;

	pDst	= NULL;
	dwSize	= 0;

	if (nNo < m_nElementCountBase) {
		return CInfoTalkEventBase::ReadElementData (pSrc, nNo);
	}

	pDataTmp = pSrc;
	nCount	 = m_aMenuInfo.GetSize ();

	nNo -= m_nElementCountBase;
	switch (nNo) {
	case 0:			/* 項目数 */
		DeleteAllMenuInfo ();
		nCount = 0;
		CopyMemoryRenew (&nCount, pDataTmp, sizeof (nCount), pDataTmp);
		for (i = 0; i < nCount; i ++) {
			AddMenuInfo (0, NULL);
		}
		dwSize = (pDataTmp - pSrc);
		break;
	case 1:			/* ジャンプ先ページ番号 */
		for (i = 0; i < nCount; i ++) {
			pInfo = m_aMenuInfo[i];
			CopyMemoryRenew (&pInfo->nPage, pDataTmp, sizeof (pInfo->nPage), pDataTmp);
		}
		dwSize = (pDataTmp - pSrc);
		break;
	case 2:			/* 項目名 */
		for (i = 0; i < nCount; i ++) {
			pInfo = m_aMenuInfo[i];
			StoreRenew (pInfo->strName, (LPCSTR)pDataTmp, pDataTmp);
		}
		dwSize = (pDataTmp - pSrc);
		break;
	}

	if (pDst) {
		CopyMemory (pDst, pSrc, dwSize);
	}

	return dwSize;
}
void CInfoTalkEventMENU::Copy(CInfoTalkEventBase *pSrc)
{
	int i, nCount;
	PSTTALKEVENTMENUINFO pInfo;
	PCInfoTalkEventMENU pSrcTmp;

	if (pSrc == NULL) {
		return;
	}
	pSrcTmp = (PCInfoTalkEventMENU)pSrc;
	DeleteAllMenuInfo ();

	CInfoTalkEventBase::Copy (pSrcTmp);

	nCount = pSrcTmp->GetMenuInfoCount ();
	for (i = 0; i < nCount; i ++) {
		pInfo = pSrcTmp->GetPtr (i);
		AddMenuInfo (pInfo->nPage, (LPCSTR)pInfo->strName);
	}
}
PBYTE CInfoTalkEventMENU::SetSendData(PBYTE pSrc)
{
	int i, nCount;
	PBYTE pRet, pDataTmp;
	PSTTALKEVENTMENUINFO pInfo;

	pRet = pSrc;
	DeleteAllMenuInfo ();

	pDataTmp = CInfoTalkEventBase::SetSendData (pSrc);
	CopyMemoryRenew (&nCount, pDataTmp, sizeof (nCount), pDataTmp);		/* 項目数 */
	for (i = 0; i < nCount; i ++) {
		AddMenuInfo (0, NULL);
		pInfo = m_aMenuInfo[i];
		/* ジャンプ先ページ番号 */
		CopyMemoryRenew (&pInfo->nPage, pDataTmp, sizeof (pInfo->nPage), pDataTmp);
		/* 項目名 */
		StoreRenew (pInfo->strName, (LPCSTR)pDataTmp, pDataTmp);
	}

	pRet = pDataTmp;
	return pRet;
}