Mfc 如何在不处理消息的情况下检查CWnd消息映射是否包含消息id?
ParentWnd包含名为modeOfOperation(下拉列表)的mfc控件。当操作模式正常时,一切正常。我们添加了新的操作模式=极限。当操作模式为极限模式时,我想禁用90%的现有ParentWnd控件,因为它们不能在极限模式下工作。我有数百个UI控件的现有代码库。我想在代码中找到一个位置,在不影响其他功能的情况下禁用90%的功能 我知道我需要禁用的90%的UI控件都在几个子窗口中。其中之一是m_childWindow1。我需要知道给定的消息是否由m_childWindow1,…,m_childWindowN处理 所以ParentWnd将消息路由到childWindow。我想重写childWindow处理程序,以防给定的消息由childWindow处理。所以我需要类似于Mfc 如何在不处理消息的情况下检查CWnd消息映射是否包含消息id?,mfc,controls,cwnd,Mfc,Controls,Cwnd,ParentWnd包含名为modeOfOperation(下拉列表)的mfc控件。当操作模式正常时,一切正常。我们添加了新的操作模式=极限。当操作模式为极限模式时,我想禁用90%的现有ParentWnd控件,因为它们不能在极限模式下工作。我有数百个UI控件的现有代码库。我想在代码中找到一个位置,在不影响其他功能的情况下禁用90%的功能 我知道我需要禁用的90%的UI控件都在几个子窗口中。其中之一是m_childWindow1。我需要知道给定的消息是否由m_childWindow1,…,m_chi
boolcwnd::isMessageIdInMessageMap(intid)
的函数
只需使用现有函数(OnCmdMsg) 创建您自己的CCmdUI对象(如果需要,覆盖Enable…函数)将作为pExtra参数传递给OnCmdMsg,并且在调用后知道该对象是否是处理程序
没有副作用…“所以我需要像
boolcwnd::isMessageIdInMessageMap(int-id)
”这样的函数-为什么?只需调用OnCmdMsg
,让框架处理消息处理程序查找。如果没有CmdTarget
处理特定消息,它将返回false
。请阅读。不管怎样,你的问题急需编辑。正如帖子所说,很难说您真正想要的是什么。我想要的是没有副作用的函数CWnd::isMessageInMessageMap(intid)。我不想调用OnCmdMsg,因为它有一些副作用,比如启用cmd,用户可以看到它。我要求你们澄清,为什么你们认为这会有帮助。我有200个m_childWindow处理程序,我不想在每个处理程序中插入代码来破坏UI控制。我想在一个地方做这件事。这无助于澄清你真正想要的是什么。请更新您的问题,使其包含所有相关信息。现在,您似乎决定采用错误的解决方案,现在需要帮助。我怀疑这是解决你实际问题的办法。不知道你到底想做什么,很难说。
BOOL ParentWnd::OnCmdMsg( UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo )
{
if ( nCode == CN_UPDATE_COMMAND_UI )
{
CWnd *contents = m_childWindow1->getContents();
if( contents )
{
if( contents->OnCmdMsg( nID, nCode, pExtra, pHandlerInfo ) )
{
//I want to enter additional code here
//But I don't want to call contents->OnCmdMsg
return true;
}
}
}
}
...
}