创建Photoshop样式浮动工具选项板

时间:2010-07-09 14:44:14

标签: c# winforms user-interface

有关如何创建Photoshop样式浮动工具调色板的任何建议吗?我尝试了几个想法,如:

  1. 创建子窗口,将其FormBorderStyle设置为FixedToolWindow并将其显示为主窗体的子窗口,但工具窗口从主窗体中窃取焦点。
  2. 如上所述创建子窗口并使用传递给CreateParams的各种标志组合,但仍会遇到相同的焦点问题。
  3. 将工具选项板创建为UserControl并通过将其父级设置为桌面(通过user32#SetParent函数)来“浮动”它,但它不再是主窗体的子级并且不会最小化/恢复主要形式。
  4. 我认为#3是要走的路,我将不得不编写代码以保持工具调色板窗口状态与主窗体同步,并实现拖动调色板的能力,绘制边界等...

    关于更好地解决这个问题的建议?

1 个答案:

答案 0 :(得分:0)

我只知道有一种方法可以做到这一点,但它限制了你不能像Photoshop中那样离开父表单的子表单。覆盖子表单上的CreateParams

const int WS_EX_NOACTIVATE = 0x8000000;
const int WS_CHILD = 0x40000000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams ret = base.CreateParams;
        ret.Style |= WS_CHILD;
        ret.ExStyle |= WS_EX_NOACTIVATE;
        return ret;
    }
}

确保在子表单上调用Show时,使用带有IWin32Window的重载并传入父表单。