用VC++生成个Word怎么使之成为当前的焦点窗口!
大师,还要请问您个问题,我用VC++的界面点击按钮生成了一个Word文档,但是生成的这个Word文档成功后,总是在我的页面后面,怎么能让这个Word界面在窗口的最前面呢?...
大师,还要请问您个问题,我用VC++的界面点击按钮生成了一个Word文档,但是生成的这个Word文档成功后,总是在我的页面后面,怎么能让这个Word界面在窗口的最前面呢?请您明示!不胜感谢!
这是我生成Word的代码:
void CViewSeriView::CreateWord()
{
// TODO: 在此添加命令处理程序代码
_Application app; //文档类变量
Documents docs; //所有文档
_Document doc; //一个文档
Selection sel;
if(!app.CreateDispatch(_T("Word.Application")))
{
AfxMessageBox("请先安装Word应用程序!");
return;
}
app.SetVisible(FALSE); //不可见
char WordFilePath[MAX_PATH];
//获取路径
::GetModuleFileName(NULL, WordFilePath, MAX_PATH - 1);
*(strrchr(WordFilePath,'\\')) = '\0';
CString szWordFilePath;
szWordFilePath.Format("%s\\RepTemple\\Doc1.dot", WordFilePath);
//创建文档
docs = app.GetDocuments(); //将Documents类对象m_Docs和Idispatch接口关联起来
CComVariant tpl((szWordFilePath)); //新建空文档
CComVariant Visble,DocType(0);
CComVariant NewTemplate(false);
docs.Add(&tpl,&NewTemplate);//,&DocType,&Visble);
app.SetVisible(TRUE); //可见
doc = app.GetActiveDocument();
sel = app.GetSelection();
sel=app.GetSelection();//获取文档的selection
InlineShapes inlineshapes = sel.GetInlineShapes();
sel.MoveDown(COleVariant((short)4),COleVariant((short)41),COleVariant((short)0));
inlineshapes.AddPicture(BmpFilePath,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(sel.GetRange()));//添加图片,并制定其位置为当前光标位置
inlineshapes.ReleaseDispatch();
sel.ReleaseDispatch();
} 展开
这是我生成Word的代码:
void CViewSeriView::CreateWord()
{
// TODO: 在此添加命令处理程序代码
_Application app; //文档类变量
Documents docs; //所有文档
_Document doc; //一个文档
Selection sel;
if(!app.CreateDispatch(_T("Word.Application")))
{
AfxMessageBox("请先安装Word应用程序!");
return;
}
app.SetVisible(FALSE); //不可见
char WordFilePath[MAX_PATH];
//获取路径
::GetModuleFileName(NULL, WordFilePath, MAX_PATH - 1);
*(strrchr(WordFilePath,'\\')) = '\0';
CString szWordFilePath;
szWordFilePath.Format("%s\\RepTemple\\Doc1.dot", WordFilePath);
//创建文档
docs = app.GetDocuments(); //将Documents类对象m_Docs和Idispatch接口关联起来
CComVariant tpl((szWordFilePath)); //新建空文档
CComVariant Visble,DocType(0);
CComVariant NewTemplate(false);
docs.Add(&tpl,&NewTemplate);//,&DocType,&Visble);
app.SetVisible(TRUE); //可见
doc = app.GetActiveDocument();
sel = app.GetSelection();
sel=app.GetSelection();//获取文档的selection
InlineShapes inlineshapes = sel.GetInlineShapes();
sel.MoveDown(COleVariant((short)4),COleVariant((short)41),COleVariant((short)0));
inlineshapes.AddPicture(BmpFilePath,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(sel.GetRange()));//添加图片,并制定其位置为当前光标位置
inlineshapes.ReleaseDispatch();
sel.ReleaseDispatch();
} 展开
1个回答
展开全部
在app的之前,SetVisible应该是可以实现窗口激活的,你的可能是顺序和释放有问题,大致应该是这样:
docs.Add(&tpl,&NewTemplate);//,&DocType,&Visble);
// app.SetVisible(TRUE); //可见 位置不对,先注销掉
doc = app.GetActiveDocument();
sel = app.GetSelection();
sel=app.GetSelection();//获取文档的selection
InlineShapes inlineshapes = sel.GetInlineShapes();
sel.MoveDown(COleVariant((short)4),COleVariant((short)41),COleVariant((short)0));
inlineshapes.AddPicture(BmpFilePath,COleVariant((short)FALSE),COleVariant((short)TRUE),&_variant_t(sel.GetRange()));//添加图片,并制定其位置为当前光标位置
inlineshapes.ReleaseDispatch();
sel.ReleaseDispatch();
doc.ReleaseDispatch();
app.SetVisible(TRUE);//在这里可见试试
app.ReleaseDispatch();
记得word应该不需要其它操作,但如果实在不行,也可以用个无奈的办法,就是FindWindow查找顶层窗口找到Word窗口句柄,再用这个窗口句柄SetForegroundWindow就可以了。
大致就是:
HWND hWord = ::FindWindow(NULL,窗口标题);
::SetForegroundWindow(hWord);
补充一下,在使用“无奈”办法之前,你可以去msword.h文件中找找App类的方法。我这里没有环境了,没法试,记得可能还有些方法,什么ShowThis或者ShowMe什么的,可以尝试一下。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询