模式更新UI状态而不触发事件

时间:2010-11-24 12:21:42

标签: c++ winapi mfc

大多数GUI应用程序都有多个自动处理选项,例如编辑框触发器自动完成,列表框更改图标和产品描述,radiobutton触发文本更新等。

不幸的是,通常需要以编程方式更改某些控件的状态,同时阻止链接控件的自动触发器,列表框onselecteditemchange,radiobox onselecteditemchange等。

你是如何实现这一目标的?我想可以在每个控件上添加一个“m_bDisablEventTrigger”变量,并在UI更新之前和之后设置它,但也许有一种更好的方法可以用更少的额外丑陋代码实现相同的功能。

3 个答案:

答案 0 :(得分:1)

您可以使用以下命令禁用所需的控件(比如说IDC_YOURCONTROL):

函数GetDlgItem(IDC_YOURCONTROL) - > EnableWindow(假);

使用此功能不会触发相关的yor控制触发器。完成后,您可以启用您的控件。

答案 1 :(得分:0)

恕我直言,如果不深入研究具体的实施细节,就不可能回答这个问题。 显然存在这样的模式。阻止某些“自动”行为的“主”或“每个控制”标志的存在完全由用于那些“自动”调整的框架决定。

答案 2 :(得分:0)

我在我的Delphi应用程序中这样做。发生的情况是,每当进行可能影响控制状态的更改时,都会发布一条消息。当应用程序变为空闲时,即在任何预先存在的消息完成其处理之后,将处理该消息。

然后,此消息的处理将为所有控件设置UI状态,并完成作业。当然,这在Delphi中非常简单,因为VCL非常方便地包装底层的Win32 API。