0

ParentWnd 包含名为 modeOfOperation 的 mfc 控件(下拉列表)。当 modeOfOperation 为 Normal 时,一切正常。我们添加了新的 modeOfOperation=Extreme。当 modeOfOperation 为 Extreme 时,我想禁用 90% 的现有 ParentWnd 控件,因为它们在 Extreme 模式下不起作用。我有包含数百个 UI 控件的现有代码库。我想在代码中找到一个地方来禁用其中的 90% 而不会损害其余功能。

我知道我需要禁用的 90% 的 UI 控件位于多个子窗口中。其中之一是 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;
                }
            }
        }
    }
...
}
4

1 回答 1

0

只需使用现有功能 (OnCmdMsg)。

创建您自己的 CCmdUI 对象(如果需要,覆盖 Enable... 函数)作为 pExtra 参数传递给 OnCmdMsg,并且您在调用后知道它是否是处理程序。

没有副作用...

于 2015-12-18T13:40:33.057 回答