在C#应用程序中嵌入MS Word
我在程序中打开MS Word文档。将MS word的父级设置为面板之一在C#应用程序中嵌入MS Word,c#,winapi,ms-word,embed,C#,Winapi,Ms Word,Embed,我在程序中打开MS Word文档。将MS word的父级设置为面板之一 System.Diagnostics.Process pr = System.Diagnostics.Process.GetProcessById(pid); MainWindowHandleS = pr.MainWindowHandle; SetParent(MainWindowHandleS, panel.Handle); MoveWindow(MainWindowHandleS, 0, 0, panel.Width,
System.Diagnostics.Process pr = System.Diagnostics.Process.GetProcessById(pid);
MainWindowHandleS = pr.MainWindowHandle;
SetParent(MainWindowHandleS, panel.Handle);
MoveWindow(MainWindowHandleS, 0, 0, panel.Width, panel.Height, false);
单击菜单栏上的“文件”时出现问题-MS Word将在我的应用程序的整个区域打开,而不仅仅是面板。
有人能帮我提些建议吗?我的问题解决了(平庸地说)。
通过
在文件菜单MS office app中创建的搜索表单-名称为空,“FullPageUiHost”类。并用winapi在新区域重新绘制
IntPtr FileMenuHandle = (IntPtr)0;
private void Timer_Tick(object sender, EventArgs e)
{
IntPtr tmpHndl = FindWindowEx(MainForm.Handle, IntPtr.Zero, "FullPageUIHost", null);
if (tmpHndl != IntPtr.Zero && FileMenuHandle == IntPtr.Zero)
{
FileMenuHandle = tmpHndl;
SetParent(FileMenuHandle, Panel.Handle);
MoveWindow(FileMenuHandle, 0, 0, Panel.Width, panel.Height, false);
}
else if (tmpHndl == IntPtr.Zero && FileMenuHandle != IntPtr.Zero)
FileMenuHandle = IntPtr.Zero;
}
你会想放弃这个想法的。使用
SetParent
使一个进程中的窗口成为另一个进程中的子窗口是在16位窗口中完成的。今天仍然可以这样做纯粹是那些日子的宿醉。你没有希望把这件事做好。寻找不同的解决方案。作为寻找不同解决方案的一种潜在方法,Word是否导出任何OLE对象?你是对的,但它必须解决这么多遗留代码