如何更改ColorDialog的标题?

Gre*_*g D 3 .net colordialog winforms

ColorDialog在WinForms中启动一个组件,让用户选择一个特定的自定义控件的图表的背景颜色和前景色.两个配置选项都在配置对话框的同一页面上,因此我想在对话框启动时将颜色对话框的标题设置为"背景颜色"以更改图表的背景,并将"网格颜色"设置为更改颜色的网格.这将提供一个有用的用户体验,如果用户不确定他们是否选择更改背景或网格颜色,他们将能够查看图表的标题.

不幸的是,文档似乎没有提到任何操纵ColorDialog标题的方法.是否可以进行此更改?如果是这样,怎么样?

Tor*_*kår 6

遗憾的是,无法更改常用颜色选择器对话框的标题.一种可能的解决方案是找到或创建一个颜色选择器控件,以专用的形式托管,当然,您可以分配适当的标题.或者您可以采用组合框形式的Office颜色选择样式.

编辑

受Rob的回答启发,我找到了以下解决方案.它涉及从ColorDialog继承,从HookProc方法抢夺HWND 并通过P/Invoke 调用SetWindowText:

public class MyColorDialog : ColorDialog
{
    [DllImport("user32.dll")]
    static extern bool SetWindowText(IntPtr hWnd, string lpString);

    private string title = string.Empty;
    private bool titleSet = false;

    public string Title
    {
        get { return title; }
        set
        {
            if (value != null && value != title)
            {
                title = value;
                titleSet = false;
            }
        }
    }

    protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam)
    {
        if (!titleSet)
        {
            SetWindowText(hWnd, title);
            titleSet = true;
        }

        return base.HookProc(hWnd, msg, wparam, lparam);
    }
}
Run Code Online (Sandbox Code Playgroud)