使用 WinAPI 在 WPF 应用程序中调整 Powerpoint Viewer 的大小

问题描述 投票:0回答:2

我正在尝试将 PowerPoint Viewer 2007 嵌入到我的 WPF 应用程序中。我设法使用 Process 来启动指定文件的查看器,并使用 SetParent 和此类 WinAPI 命令将其放入我的应用程序窗口中。但我的应用程序窗口中的幻灯片总是被部分截断,因为我的应用程序窗口不是全屏的,不幸的是 PowerPoint Viewer 总是全屏启动。知道如何调整幻灯片大小,使其在我的窗口中完美显示吗?

到目前为止,这是我的代码。

Process proc = Process.Start(new ProcessStartInfo(){ FileName = "C:\\Program Files\\Microsoft Office\\Office12\\PptView.exe", Arguments="/S" + "\"" + "C:\\Test.ppt" + "\"", WindowStyle=ProcessWindowStyle.Minimized});

System.Threading.Thread.Sleep(1000);
SetParent(proc.MainWindowHandle, myWindowHandle);
SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
SetWindowPos(proc.MainWindowHandle, (IntPtr)0, 0, 0, 800, 600, SWP_FRAMECHANGED);
InvalidateRect(myWindowHandle, IntPtr.Zero, false);

希望有人能帮忙。非常感谢...

c# wpf winapi powerpoint viewer
2个回答
0
投票

为什么不尝试 MoveWindow(proc.MainWindowHandle, 0, 0, 800, 600, true); ?我在做类似的事情时遇到了问题,但使用的是 Word。 SetWindowPos 没有将屏幕定位在我想要的位置。


0
投票

我已成功将 PowerPoint Viewer 嵌入到我的 C++ 应用程序中,但存在以下差异:

  • 我不传递
    /S
    参数,仅传递 .pptx 文件路径。
  • 然后我遍历它的 HWND 树,
    PPTFrameClass
    ->
    MDIClient
    ->
    mdiClass
    ->
    paneClassDC
  • 我将
    paneClassDC
    子窗口设置为我的子窗口,并隐藏主窗口
  • 并使用 BeginDeferWindowPos、DeferWindowPos 和 EndDeferWindowPos 调整其大小
© www.soinside.com 2019 - 2024. All rights reserved.