如何在不处理消息的情况下检查 CWnd 消息映射是否包含消息 ID?
How to check if CWnd message map contains message id without handling message?
ParentWnd 包含名为 modeOfOperation(下拉列表)的 mfc 控件。当 modeOfOperation 为 Normal 时,一切正常。我们添加了新的 modeOfOperation=Extreme。当 modeOfOperation 为 Extreme 时,我想禁用 90% 的现有 ParentWnd 控件,因为它们在 Extreme 模式下不起作用。我有包含数百个 UI 控件的现有代码库。我想在代码中找到一个位置来禁用其中的 90% 而不会损害其余功能。
我知道我需要禁用的 UI 控件中有 90% 在几个子 windows 中。其中之一是 m_childWindow1。我需要判断给定消息是否由 m_childWindow1,...,m_childWindowN.
处理
因此 ParentWnd 将消息路由到 childWindow。我想覆盖 childWindow 处理程序,以防给定消息由 childWindow 处理。所以我需要像 bool CWnd::isMessageIdInMessageMap(int id)
.
这样的函数
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;
}
}
}
}
...
}
只需使用已有的函数(OnCmdMsg)。
创建您自己的 CCmdUI 对象(如果需要,覆盖 Enable... 函数)作为 pExtra 参数传递给 OnCmdMsg,您在调用后知道它是否是处理程序。
没有副作用...
ParentWnd 包含名为 modeOfOperation(下拉列表)的 mfc 控件。当 modeOfOperation 为 Normal 时,一切正常。我们添加了新的 modeOfOperation=Extreme。当 modeOfOperation 为 Extreme 时,我想禁用 90% 的现有 ParentWnd 控件,因为它们在 Extreme 模式下不起作用。我有包含数百个 UI 控件的现有代码库。我想在代码中找到一个位置来禁用其中的 90% 而不会损害其余功能。
我知道我需要禁用的 UI 控件中有 90% 在几个子 windows 中。其中之一是 m_childWindow1。我需要判断给定消息是否由 m_childWindow1,...,m_childWindowN.
处理因此 ParentWnd 将消息路由到 childWindow。我想覆盖 childWindow 处理程序,以防给定消息由 childWindow 处理。所以我需要像 bool CWnd::isMessageIdInMessageMap(int id)
.
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;
}
}
}
}
...
}
只需使用已有的函数(OnCmdMsg)。
创建您自己的 CCmdUI 对象(如果需要,覆盖 Enable... 函数)作为 pExtra 参数传递给 OnCmdMsg,您在调用后知道它是否是处理程序。
没有副作用...