T *ResManageHAC<T>::Create(const String &name)
{
#ifdef _DEBUG
    if(!hac_data)
    {
        PutError(L"创建资源时,HAC包还未加载。资源名称:%s",name.wc_str());
        return(NULL);
    }
#endif//

    return(new T(hac_data,name));
}
void ResManage<F,T>::Clear(T *obj)		///<资源释放虚拟函数
{
#ifdef _DEBUG
    try
    {
        delete obj;
    }
    catch(...)
    {
        PutError(	L"ResManage::Clear() error! this=%p,obj=%p",this,obj);
    }
#else
    delete obj;
#endif//
}
void CDissolveDialog::OnActionEvent(LONG id, void * p, DWORD we)
{
	switch(id)
	{
	case DIS_OKBTN:
		{
			PutError(
				Submit(),
				0);
			break;
		}
	case DIS_CANCELBTN:
		{
			Clear();
			break;
		}
	}
}
BOOL CDissolveDialog::FakeMoveIcon(LONG x, LONG y, cIcon* movedIcon)
{
	// 완료된 결과가 있을 경우 초기화시킨다
	{
		CItem* const item = (CItem*)mSourceDialog->GetIconForIdx(
			0);

		if(item->IsLocked())
		{
			Clear();
		}
	}

	CItem* const movedItem = (CItem*)movedIcon;

	if(0 == movedItem)
	{
		return FALSE;
	}
	else if(WT_ITEM != movedItem->GetType())
	{
		return FALSE;
	}
	else if(movedItem->IsLocked())
	{
		return FALSE;
	}
	else if(FALSE == ITEMMGR->IsEqualTableIdxForPos(eItemTable_Inventory, movedItem->GetPosition()))
	{
		CHATMGR->AddMsg(
			CTC_SYSMSG,
			CHATMGR->GetChatMsg(787));
		return FALSE;
	}

	// 기존 아이템이 위치한 장소에 놓았을 경우 교체한다
	const POINT point = {x, y};
	CItem* const item = GetSourceItem(
		point);

	if(0 == item)
	{
		return FALSE;
	}
	else if(0 < item->GetItemIdx())
	{
		RemoveSource(
			item->GetItemBaseInfo(),
			POSTYPE(item->GetData()));
		RemoveResult(
			item->GetItemBaseInfo());
		Clear(
			*item);
	}

	const Error error = IsEnableUpdate(movedItem->GetItemBaseInfo());

	if(ErrorNone != error)
	{
		PutError(
			error,
			movedItem->GetItemIdx());
		return FALSE;
	}

	AddSource(
		movedItem->GetItemBaseInfo(),
		POSTYPE(item->GetData()));
	AddResult(
		movedItem->GetItemBaseInfo());

	mSubmitButton->SetActive(
		TRUE);
	return FALSE;
}
// 100625 ONS 분해시 우클릭으로 아이템이동 가능하도록 수정.
void CDissolveDialog::MoveIcon( CItem* movedItem )
{
	// 완료된 결과가 있을 경우 초기화시킨다
	{
		CItem* const item = (CItem*)mSourceDialog->GetIconForIdx(
			0);

		if(item->IsLocked())
		{
			Clear();
		}
	}

	if( 0 == movedItem )
	{
		return;
	}
	else if(WT_ITEM != movedItem->GetType())
	{
		return;
	}
	else if(movedItem->IsLocked())
	{
		return;
	}
	else if(FALSE == ITEMMGR->IsEqualTableIdxForPos(eItemTable_Inventory, movedItem->GetPosition()))
	{
		CHATMGR->AddMsg(
			CTC_SYSMSG,
			CHATMGR->GetChatMsg(787));
		return;
	}

	const Error error = IsEnableUpdate(movedItem->GetItemBaseInfo());
	if(ErrorNone != error)
	{
		PutError(
			error,
			movedItem->GetItemIdx());
		return;
	}

	WORD wEmptyPos = 0;
	for(WORD cellIndex = 0; mSourceDialog->GetCellNum() > cellIndex; ++cellIndex)
	{
		CItem* const item = (CItem*)mSourceDialog->GetIconForIdx(
			cellIndex);

		if(0 == item->GetItemIdx())
		{
			wEmptyPos = cellIndex;
			break;
		}
	}

	AddSource(
		movedItem->GetItemBaseInfo(),
		POSTYPE(wEmptyPos));
	AddResult(
		movedItem->GetItemBaseInfo());

	mSubmitButton->SetActive(
		TRUE);
}