请问用ATL做的ActiveX控件,可以嵌入word里面,如何获Word的Application的指针?100分啊

littleroy 2005-11-29 01:36:32
请问用ATL做的ActiveX控件,可以嵌入word里面,如何获Word的Application的指针?100分啊

我听说可以用GetClientSite的方式,
但,不知道,具体详细情况该怎么做,,

高手指点!
...全文
266 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodboyws 2005-12-01
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/190985/EN-US/
littleroy 2005-11-29
  • 打赏
  • 举报
回复
to goodboyws(深夜不眠者

的代码,我看不懂啊,
能不能详细介绍一下呢,,
littleroy 2005-11-29
  • 打赏
  • 举报
回复
to zhoujingsheng712

您的代码,我一回拿过去试一下,谢谢!!
不过,我更想要的是,我的控件是嵌入在word里面,如何通过GetClientSite函数的方式,
来获包容器的指针!
goodboyws 2005-11-29
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/q266318/
goodboyws 2005-11-29
  • 打赏
  • 举报
回复
void CMyActiveXCtrl::GettheNameofContainerDocument()
{
IMoniker* ptrfullMoniker = NULL;
char objectname[300];
LPOLESTR ppszDisplaynamefull;
IBindCtx* pbcfull = NULL;

LPOLECLIENTSITE pOleClientSite = GetClientSite();

if(pOleClientSite)
{
if(SUCCEEDED(pOleClientSite->GetMoniker(OLEGETMONIKER_FORCEASSIGN,
OLEWHICHMK_OBJFULL, &ptrfullMoniker)))<BR/>
// The typedefs for OLEGETMONIKER and OLWHICHMK are in oleidl.h
{
if (SUCCEEDED(CreateBindCtx( 0, &pbcfull )))
{
if(SUCCEEDED(ptrfullMoniker->GetDisplayName(pbcfull,NULL,<BR/>
&ppszDisplaynamefull)))
{
wcstombs(objectname,ppszDisplaynamefull,300);
AfxMessageBox(ExtractDocumentName(objectname));
ptrfullMoniker->Release();
}
}
pbcfull->Release();
}
pOleClientSite->Release();
}
}

char* CMyActiveXCtrl::ExtractDocumentName(char* objectname)
{
char* ptrchar;
char* ptrdocname;
//reverse the string
ptrchar = _strrev(objectname);
//Ignore the first token , this is the name of the embedded object
strtok(ptrchar,"!");
//get the remainder of the string and reverse it to get the Document name
ptrdocname = strrev(strtok(NULL,"\0"));
return ptrdocname;
}
zhoujingsheng712 2005-11-29
  • 打赏
  • 举报
回复
先导入word类库:在addclass-〉from a library->word安装目录中选msword.olb
,然后添加如下代码
CLSID clsid;
HRESULT hr;
IUnknown *pUnknown=NULL;
IDispatch *pDispatch=NULL;
_Application app=NULL;
hr = ::CLSIDFromProgID(L"Word.Application",&clsid); //通过ProgID取得CLSID
if(FAILED(hr))
{
AfxMessageBox(_T("您没有安装OFFICE"));
return;
}

hr = ::GetActiveObject(clsid,NULL,&pUnknown); //查找是否有WORD程序在运行
if(FAILED(hr))
{
AfxMessageBox(_T("没有正在运行中的WORD应用程序"));
return;
}

hr = pUnknown->QueryInterface(IID_IDispatch,(LPVOID *)&app);
if(FAILED(hr)) AfxMessageBox(_T("没有取得IDispatchPtr"));
pUnknown->Release(); pUnknown=NULL;
littleroy 2005-11-29
  • 打赏
  • 举报
回复
up
littleroy 2005-11-29
  • 打赏
  • 举报
回复
up
内容概要:本文提出了一种面向综合能源系统的算力-电力-热力联合优化调度策略,并基于Matlab实现了完整的仿真代码。该策略针对现代综合能源系统中存在的多能源耦合、多主体协同及复杂约束下的调度难题,构建了一个集成计算资源(算力)、电力系统与热力网络的统一协同优化模型。研究重点涵盖了系统架构设计、关键算法原理及其仿真实现方法,尤其聚焦于ANPC三电平并网逆变器的高性能控制策略优化,包括双极性倍频脉宽调制(DPWMA)、正负序离锁相技术以及电网电压前馈控制,从而实现高电能质量、强动态响应能力和优异电网适应性的并网运行。通过多工况仿真验证,所提方法在稳态精度、不平衡电网适应性及动态抗扰等方面均展现出卓越性能。; 适合人群:具备电力系统、自动化或能源系统等相关专业背景,熟悉Matlab/Simulink仿真工具,从事科研或工程应用的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于新能源并网、工业大功率变流等场景下的高性能逆变器控制系统设计;②用于高校教学与科学研究中对多能协同优化、先进调制与控制策略的理解与实践;③为目标用户提供可复现的仿真模型与代码参考,支撑学术论文复现与技术创新。; 阅读建议:建议读者结合所提供的完整资源包进行代码调试与仿真运行,重点关注控制策略在不同工况下的响应特性,深入理解DPWMA调制、正负序离与前馈控制之间的协同机制,同时可拓展至低电压穿越、极端电网扰动等场景下的策略优化研究。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧