如何使用 System.Windows.Forms.Help.ShowHelp() 控制帮助窗口的大小?

Tom*_*son 1 c# wpf

我有一个用 C# 编写的 WPF 4.0 应用程序,目前正在使用System.Windows.Forms.Help.ShowHelp()来显示该应用程序的 Windows 帮助文件。

我希望能够在打开时控制帮助查看器的初始大小。目前它默认为最近使用的大小。

我怎样才能做到这一点?

Han*_*ant 5

这是可能的。将一个类添加到您的项目并粘贴以下代码:

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

static class Utils {
    public static void MoveHelpWindow(Rectangle rc) {
        EnumThreadWndProc callback = (hWnd, lp) => {
            // Check if this is the help window
            StringBuilder sb = new StringBuilder(260);
            GetClassName(hWnd, sb, sb.Capacity);
            if (sb.ToString() != "HH Parent") return true;
            MoveWindow(hWnd, rc.Left, rc.Top, rc.Width, rc.Height, false);
            return false;
        };
        foreach (ProcessThread pth in Process.GetCurrentProcess().Threads) {
            EnumThreadWindows(pth.Id, callback, IntPtr.Zero);
        }
    }
    // P/Invoke declarations
    private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
    [DllImport("user32.dll")]
    private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
    [DllImport("user32.dll")]
    private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
}
Run Code Online (Sandbox Code Playgroud)

你这样使用它,BeginInvoke 调用很重要:

Help.ShowHelp(this, @"file://c:\windows\help\bcmwlhlp.chm");
this.BeginInvoke(new MethodInvoker(() => Utils.MoveHelpWindow(new Rectangle(0, 0, 300, 200))));
Run Code Online (Sandbox Code Playgroud)