📄 exam15content.cpp
字号:
// Exam15Content.cpp : Implementation of CExam15Content
#include "stdafx.h"
#include "Exam15.h"
#include "Exam15Content.h"
/////////////////////////////////////////////////////////////////////////////
// CExam15Content
STDMETHODIMP CExam15Content::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_IExam15Content
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
Adesk::Boolean append(AcDbEntity* pEntity)
{
AcDbBlockTable *pBlockTable;
AcApDocument* pDoc = acDocManager->curDocument();
Acad::ErrorStatus es = acDocManager->lockDocument(pDoc);
if (es != Acad::eOk) {
ads_alert("Failed to lock the document!");
return Adesk::kFalse;
}
AcDbDatabase* pDb = pDoc->database();
es = pDb/*acdbCurDwg()*/->getBlockTable(pBlockTable, AcDb::kForRead);
if (es != Acad::eOk) {
ads_alert("Failed to get block table!");
return Adesk::kFalse;
}
AcDbBlockTableRecord *pBlockRec;
es = pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockRec, AcDb::kForWrite);
if (es != Acad::eOk) {
ads_alert("Failed to get block table record!");
pBlockTable->close();
return Adesk::kFalse;
}
es = pBlockRec->appendAcDbEntity(pEntity);
if (es != Acad::eOk) {
ads_alert("Failed to append entity!");
pBlockTable->close();
pBlockRec->close();
delete pEntity;
return Adesk::kFalse;
}
pBlockRec->close();
pBlockTable->close();
acDocManager->unlockDocument(pDoc);
return Adesk::kTrue;
}
STDMETHODIMP CExam15Content::Initialize(VARIANT varBrowser, VARIANT)
{
m_pBrowser = (IAcDcContentBrowser*)varBrowser.punkVal;
m_pBrowser->AddRef();
return S_OK;
}
STDMETHODIMP CExam15Content::SetImageLists()
{
return S_OK;
}
STDMETHODIMP CExam15Content::NavigatorNodeExpanding(
VARIANT varhNode,
BSTR bstrFullPath)
{
return S_OK;
}
STDMETHODIMP CExam15Content::NavigatorNodeCollapsing(
VARIANT varhNode,
BSTR bstrFullPath)
{
return S_OK;
}
STDMETHODIMP CExam15Content::NavigatorNodeClick(
VARIANT varhNode,
BSTR bstrFullPath)
{
return S_OK;
}
STDMETHODIMP CExam15Content::NavigatorMouseUp(
VARIANT varhNode,
BSTR bstrFullPath,
VARIANT varX,
VARIANT varY)
{
return S_OK;
}
CString CExam15Content::OpenAndReadTextFile(DWORD& length)
{
CFile fileText;
fileText.Open(m_strSelectedItemText, CFile::modeRead);
length = fileText.GetLength();
char *strBuff = new char[length];
fileText.Read(strBuff, length);
fileText.Close();
CString cstrBuff(strBuff);
delete strBuff;
cstrBuff.SetAt(length, '\0');
cstrBuff.FreeExtra();
return cstrBuff;
}
void CExam15Content::OpenAndDisplayTextFile()
{
DWORD length;
CString cstrBuff = OpenAndReadTextFile(length);
BSTR bstrBuf = cstrBuff.AllocSysString();
m_pBrowser->SetItemDescription(bstrBuf);
::SysFreeString(bstrBuf);
}
STDMETHODIMP CExam15Content::PaletteItemClick(BSTR bstrItemText)
{
USES_CONVERSION;
m_strSelectedItemText = OLE2T(bstrItemText);
OpenAndDisplayTextFile();
return S_OK;
}
void CExam15Content::OpenAndInsertTextFile()
{
DWORD length;
CString cstrBuff = OpenAndReadTextFile(length);
cstrBuff.Replace("\015\012", "\\P");
struct resbuf resbufViewCtr;
resbufViewCtr.restype = RT3DPOINT;
acedGetVar("VIEWCTR", &resbufViewCtr);
AcGePoint3d pt(resbufViewCtr.resval.rpoint[X],
resbufViewCtr.resval.rpoint[Y],
resbufViewCtr.resval.rpoint[Z]);
AcDbMText *pMText = new AcDbMText();
pMText->setLocation(pt);
pMText->setContents(cstrBuff);
append(pMText);
pMText->downgradeOpen();
pMText->draw();
pMText->close();
}
STDMETHODIMP CExam15Content::PaletteItemDblClick(BSTR bstrItemText)
{
USES_CONVERSION;
m_strSelectedItemText = OLE2T(bstrItemText);
OpenAndInsertTextFile();
return S_OK;
}
STDMETHODIMP CExam15Content::PaletteColumnClick(
VARIANT varIndex)
{
return S_OK;
}
STDMETHODIMP CExam15Content::PaletteMouseUp(
VARIANT varButton,
VARIANT varItemTexts,
VARIANT varX,
VARIANT varY)
{
return S_OK;
}
STDMETHODIMP CExam15Content::PaletteMouseDown(
VARIANT varButton,
BSTR bstrFullText,
VARIANT varX, VARIANT varY)
{
return S_OK;
}
STDMETHODIMP CExam15Content::RenderPreviewWindow(
BSTR bstrFullText,
VARIANT varhPreviewWindow)
{
return S_OK;
}
STDMETHODIMP CExam15Content::PreviewMouseUp(
VARIANT varButton,
VARIANT varX,
VARIANT varY)
{
return S_OK;
}
STDMETHODIMP CExam15Content::Refresh()
{
return S_OK;
}
STDMETHODIMP CExam15Content::PaletteBeginDrag(
VARIANT varItemTexts,
VARIANT varX,
VARIANT varY)
{
return S_OK;
}
STDMETHODIMP CExam15Content::ReleaseBrowser()
{
return S_OK;
}
STDMETHODIMP CExam15Content::QueryContextMenu(
VARIANT varhMenu,
VARIANT varIndex,
VARIANT varCmdFirst,
VARIANT varCmdLast,
VARIANT varItemTexts)
{
return S_OK;
}
STDMETHODIMP CExam15Content::InvokeCommand(VARIANT varMenuID)
{
return S_OK;
}
STDMETHODIMP
CExam15Content::IsExpandable(/* [string][in] */ BSTR bstrItemText,
/* [retval][out] */ VARIANT __RPC_FAR *pvarIsExpandable)
{
pvarIsExpandable->iVal = TRUE;
return S_OK;
}
STDMETHODIMP
CExam15Content::GetLargeImage(/* [in] */ BSTR bstrFileName,
/* [out][in] */ VARIANT __RPC_FAR *pvarhLargeImage)
{
return E_NOTIMPL;
}
STDMETHODIMP
CExam15Content::GetSmallImageListForContent(BSTR bstrFileName,
VARIANT *pvarhImageList)
{
return E_NOTIMPL;
}
STDMETHODIMP
CExam15Content::GetLargeImageListForContent(BSTR bstrFileName,
VARIANT *pvarhImageList)
{
return E_NOTIMPL;
}
STDMETHODIMP
CExam15Content::GetCommandString (
/*[in]*/ VARIANT varMenuID // menu id
, /*[in]*/ dcMenuInfoFlag // which information is required
, /*[out]*/ VARIANT *pvarReserved // reserved, handlers must ignore this
, /*[out]*/ BSTR *pbstrName // menu information
)
{
return E_NOTIMPL;
}
STDMETHODIMP
CExam15Content::DeleteItemData(dcItemDataSource dcSrc, VARIANT varItemDataArray)
{
return E_NOTIMPL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -