2010-07-09 56 views
2

关于如何创建Photoshop风格的浮动工具调色板的任何建议?我试过几个想法,例如:创建Photoshop风格的浮动工具调色板

  1. 创建一个子窗口,其FormBorderStyle设置为FixedToolWindow,并将其显示为主要形式的一个孩子,但该工具窗口抢断焦点从主要形式。
  2. 如上所述创建子窗口并使用传递给CreateParams的标志的各种组合,但仍遇到相同的焦点问题。
  3. 将工具选项板创建为UserControl,并通过将其父项设置为桌面(通过user32#SetParent函数)并将其“浮动”(但通过user32#SetParent函数),但不再是主窗体的子项,并且不会最小化/恢复与主要形式。

我在想#3是要走的路,我将不得不编写代码以保持工具调色板窗口状态与主窗体同步,并实现拖动调色板,画边框等...

关于更好的方法来解决这个问题的建议?

+0

是否将边框样式设置为'None'并使用'TopMost = true'帮助? – Mau 2010-07-09 14:50:44

回答

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,并通过在父过载。