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;
}
}
}
}
...
}
答案 0 :(得分:0)
只需使用现有功能(OnCmdMsg)。
创建您自己的CCmdUI对象(如果需要,覆盖Enable ...函数)pass作为OnCmdMsg的pExtra参数,如果是处理程序,您知道在调用之后。
没有副作用......