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

📄 exam15content.cpp

📁 ARX/CAD二次开发
💻 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 + -