【问题标题】:How to disable a window with EnableWindow(), and gray it out?如何使用 EnableWindow() 禁用窗口并将其变灰?
【发布时间】:2012-06-23 23:11:15
【问题描述】:

在 .NET 中,当您将 Form 或 Control(例如 ListView)的 Control.Enabled 属性设置为 false 时,它​​及其所有子项都将变为灰色:

我在 Win32 (EnableWindow) 中没有看到这种情况,至少在 ListViews 中没有。

如何在Win32中实现这个效果?

【问题讨论】:

  • Win32 确实禁用了与子控件的交互,但不会改变它们的视觉状态。当使用 .NET 进行更改时,.NET/WinForms 有明确的代码来处理这个问题。你可以尝试为 Win32 模拟这个。

标签: windows winapi visual-c++ mfc


【解决方案1】:
BOOL EnableWindow(HWND hWnd,
    BOOL bEnable
);

其中 hWnd 是控件的句柄,bEnable 是 TRUE 或 FALSE,TRUE 启用窗口,FALSE 禁用它。

适用于列表视图。

为了查看其视觉状态的变化,您需要强制重新绘制窗口,例如致电UpdateWindow

【讨论】:

  • 是的,我做到了,它适用于列表视图。你如何使用EnableWindow?您是否将正确的列表视图句柄传递给它?
  • 抱歉,有两个问题让我感到困惑,让我觉得它不起作用:它不是递归的,它需要UpdateWindow 才能看到结果!谢谢你让我知道它应该工作,这让我去仔细检查哈哈。 :)
  • @Gunner 我可以禁用一个窗口但仍然可以拖动它吗?或者我可以禁用鼠标交互/选择吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
  • 2017-05-22
相关资源
最近更新 更多