Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#应用程序中嵌入MS Word_C#_Winapi_Ms Word_Embed - Fatal编程技术网

在C#应用程序中嵌入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,

我在程序中打开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, 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对象?你是对的,但它必须解决这么多遗留代码