【发布时间】:2021-07-19 02:09:53
【问题描述】:
我想在某些事件中启用/禁用菜单项,独立于 UPDATE_COMMAND_UI 处理程序,所以,我没有 CCmdUI 对象,所以,我想发送一条消息,调用处理程序。我试过这个:
SendMessage(WM_COMMAND, CN_UPDATE_COMMAND_UI, ID_VIEW_SYNTAXHIGHLIGHT);
这样好吗?如果没有,正确的方法是什么?谢谢。
【问题讨论】:
-
“我想在某些事件中启用/禁用菜单项,这与 UPDATE_COMMAND_UI 处理程序无关” - 这没有意义。只要 UI 进入可以接受用户输入的状态,就会执行
UPDATE_COMMAND_UI处理程序。您可以随时安排在那里更新您的用户界面。 -
我的英语并不完美。我的 IDE 有一个二进制编辑器。 CScrollView 使用 32 位有符号整数,因此,视图的大小限制为 2^31-1 像素,因此,行数是有限的。我的二进制编辑器支持 2/4/8/16/32 字节/行模式。如果我插入一些字节,如果超出最大行数,字节/数字会自动复制,这将消除溢出,保持可处理的行数。因此,如果将其更改为 32 字节/行,我必须禁用“双字节/行”菜单项:来自 OnChar。所以,我需要一个 CCmdUI 对象。所以,我必须调用 UPDATE_COMMAND_UI 处理程序。
-
您是在主框架上还是在模式弹出对话框中使用它?因为在第二种情况下,您可能需要处理
WM_KICKIDLE消息,然后对话框将侦听消息泵,并且在您正在处理它的例程中,执行UpdateDialogControls之类的操作以使控件的状态起床-迄今为止。 -
这是一个IDE,一个MDI MFC程序,我想在CIDEView::OnChar中使用。因此,在视图类中,在 WM_CHAR 消息处理程序中。
标签: c++ windows mfc desktop-application sendmessage