Q
帮助“?”按钮
16
A
回答
30
这很简单,只需将此代码插入到Window类中即可。
此代码使用interop删除WS_MINIMIZEBOX和WS_MAXIMIZEBOX样式并添加WS_EX_CONTEXTHELP扩展样式(只有在删除最小化和最大化按钮时才会显示问号)。
编辑:在帮助按钮上添加了单击检测,这是通过使用HwndSource.AddHook挂接到WndProc并使用wParam的SC_CONTEXTHELP侦听WM_SYSCOMMAND消息来完成的。
当检测到单击时,此代码将显示一个消息框,将其更改为事件,路由事件或命令(对于MVVM应用程序)作为练习留给读者。
private const uint WS_EX_CONTEXTHELP = 0x00000400;
private const uint WS_MINIMIZEBOX = 0x00020000;
private const uint WS_MAXIMIZEBOX = 0x00010000;
private const int GWL_STYLE = -16;
private const int GWL_EXSTYLE = -20;
private const int SWP_NOSIZE = 0x0001;
private const int SWP_NOMOVE = 0x0002;
private const int SWP_NOZORDER = 0x0004;
private const int SWP_FRAMECHANGED = 0x0020;
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_CONTEXTHELP = 0xF180;
[DllImport("user32.dll")]
private static extern uint GetWindowLong(IntPtr hwnd, int index);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hwnd, int index, uint newStyle);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter, int x, int y, int width, int height, uint flags);
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
uint styles = GetWindowLong(hwnd, GWL_STYLE);
styles &= 0xFFFFFFFF^(WS_MINIMIZEBOX | WS_MAXIMIZEBOX);
SetWindowLong(hwnd, GWL_STYLE, styles);
styles = GetWindowLong(hwnd, GWL_EXSTYLE);
styles |= WS_EX_CONTEXTHELP;
SetWindowLong(hwnd, GWL_EXSTYLE, styles);
SetWindowPos(hwnd, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
((HwndSource)PresentationSource.FromVisual(this)).AddHook(HelpHook);
}
private IntPtr HelpHook(IntPtr hwnd,
int msg,
IntPtr wParam,
IntPtr lParam,
ref bool handled)
{
if (msg == WM_SYSCOMMAND &&
((int)wParam & 0xFFF0) == SC_CONTEXTHELP)
{
MessageBox.Show("help");
handled = true;
}
return IntPtr.Zero;
}
0
WPF没有帮助按钮。但是不应该推动自己推出自己的产品。
+0
到标题栏?好像你需要改变Window chrome,这是记录的,但不是微不足道的。 – micahtan 2009-06-17 23:27:38
0
如果您打算将按钮添加到非客户端区域,请参阅this article。
相关问题
- 1. Tkinter按钮帮助
- 2. ASP.NET:帮助按钮
- 3. HTML帮助 - 隐藏按钮
- 4. 后退按钮帮助
- 5. Vista Shellview帮助按钮
- 6. pyGTK单选按钮帮助
- 7. 帮助单选按钮
- 8. 帮助与iPhone按钮按下
- 9. 可重复使用的帮助按钮和帮助弹出
- 10. 帮助AJAX中的3个按钮
- 11. Facebook视频喜欢按钮帮助吗?
- 12. 帮助与HTML按钮和PHP
- 13. 需要退出按钮帮助
- 14. 的Win32 API - 创建按钮帮助
- 15. Jquery - 帮助写入切换按钮?
- 16. Facebook的“Like”按钮的回调帮助
- 17. Android开发:按钮onClickListeners帮助
- 18. 帮助jQueryMobile制作菜单按钮
- 19. 帮助点击Greasemonkey中的按钮
- 20. Javascript帮助,表格和单选按钮
- 21. 添加帮助按钮形成
- 22. 需要帮助,点击一下按钮
- 23. 帮助! uitableviewcell按钮更新文本域
- 24. 需要帮助验证单选按钮
- 25. 在按钮事件上需要帮助
- 26. 需要帮助... Bootstrap按钮/ matchMedia/removeClass
- 27. 添加帮助按钮SWT GUI
- 28. 单选按钮阵列 - 需要帮助
- 29. 需要图像按钮帮助
- 30. jquery动画按钮问题的帮助?
为什么标题栏?我看到的大多数应用都将它放在菜单栏中。 – 2009-06-17 23:48:39
事情是我们将主要在对话框窗口上使用它,它通常没有菜单栏。点击它将为该窗口提供上下文帮助。就像在MS Word 2007中的字体对话框窗口中一样。 – Carlo 2009-06-18 00:17:36