【发布时间】:2017-12-06 22:46:08
【问题描述】:
我对此进行了广泛的搜索,我想出大约 20 次的答案是使用 CWnd::EnableWindow(FALSE)。目前,我有:
GetDlgItem(myComboBox)->EnableWindow(FALSE);
现在整个 Dialog 没有显示,而不是禁用 ComboBox,而且由于它是一个模态对话框(或者至少我猜这是原因),整个程序被锁定,因为我无法关闭如果不存在对话框。
有没有办法在不让它完全消失的情况下禁用对该框的编辑;类似于 SetReadOnly() 对 CEdit 所做的操作?
编辑: 突然,上面的语法在第二天早上就开始起作用了。我仍然不完全确定为什么它一开始就不起作用。
【问题讨论】:
-
您是否从 UI 线程以外的其他线程调用该 API?
-
很遗憾,我无法自信地回答这个问题。这是一个庞大的代码库,我现在只是在编辑 2-3 个类。
-
想法:检查你的资源文件并检查资源ID是否正确分配和唯一。我记得在遗留 MFC 代码库中这是一个问题。
-
@ChristianG 在对 ID 进行更彻底的调查后,我发现 ComboBox 的 ID 号与 4 个 other 窗口共享,但它们都不是来自同一个窗口对话框。这应该有所作为吗?
-
@LLS2:不,因为窗口 ID 仅在其各自的对话框中是唯一的,因此多个对话框可以重用相同的 ID。
GetDlgItem()与调用它的对话框相关。
标签: c++ mfc dialog modal-dialog