如何检查CWnd消息映射是否包含消息ID而不处理消息?

时间:2015-12-18 12:11:08

标签: mfc controls cwnd

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;
                }
            }
        }
    }
...
}

1 个答案:

答案 0 :(得分:0)

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

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

没有副作用......