Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mfc 如何在不处理消息的情况下检查CWnd消息映射是否包含消息id?_Mfc_Controls_Cwnd - Fatal编程技术网

Mfc 如何在不处理消息的情况下检查CWnd消息映射是否包含消息id?

Mfc 如何在不处理消息的情况下检查CWnd消息映射是否包含消息id?,mfc,controls,cwnd,Mfc,Controls,Cwnd,ParentWnd包含名为modeOfOperation(下拉列表)的mfc控件。当操作模式正常时,一切正常。我们添加了新的操作模式=极限。当操作模式为极限模式时,我想禁用90%的现有ParentWnd控件,因为它们不能在极限模式下工作。我有数百个UI控件的现有代码库。我想在代码中找到一个位置,在不影响其他功能的情况下禁用90%的功能 我知道我需要禁用的90%的UI控件都在几个子窗口中。其中之一是m_childWindow1。我需要知道给定的消息是否由m_childWindow1,…,m_chi

ParentWnd包含名为modeOfOperation(下拉列表)的mfc控件。当操作模式正常时,一切正常。我们添加了新的操作模式=极限。当操作模式为极限模式时,我想禁用90%的现有ParentWnd控件,因为它们不能在极限模式下工作。我有数百个UI控件的现有代码库。我想在代码中找到一个位置,在不影响其他功能的情况下禁用90%的功能

我知道我需要禁用的90%的UI控件都在几个子窗口中。其中之一是m_childWindow1。我需要知道给定的消息是否由m_childWindow1,…,m_childWindowN处理

所以ParentWnd将消息路由到childWindow。我想重写childWindow处理程序,以防给定的消息由childWindow处理。所以我需要类似于
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;
                }
            }
        }
    }
...
}