gpt4 book ai didi

events - 即使添加 ON_COMMAND 处理程序后,菜单项仍保持禁用状态

转载 作者:行者123 更新时间:2023-12-02 11:45:20 25 4
gpt4 key购买 nike

我使用 Visual Studio 2013 制作了一个简单的拆分窗口应用程序。有两个 View ,一个 View 由默认 View 类组成,另一个 View 由派生自 的自定义 View 类组成CScrollView

/////////////////////////
// MainFrm.cpp

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{

split_wnd.CreateStatic(this,1,2);

CRect cr;
GetClientRect(&cr);

split_wnd.CreateView(0,0,RUNTIME_CLASS(CProjectMainView),CSize(cr.Width()/2,cr.Height()),pContext);

split_wnd.CreateView(0,1,RUNTIME_CLASS(CMyCustomView),CSize(cr.Width()/2,cr.Height()),pContext);

return true;

}

这个分离器工作正常。

当我尝试将 ON_COMMAND 处理程序添加到菜单项之一时,出现问题。如果我将 ON_COMMAND 处理程序放入默认 View 类中,则没有问题。菜单项点击效果良好并且处理程序工作正常。

但是,如果我将 ON_COMMAND 处理程序放入自定义 View 类中,则菜单项根本不会启用。

我相信我已经尽一切努力在我的自定义 View 类中正确实现消息映射。

/////////////////////////
// CMyCustomView.h

class CMyCustomView:public CScrollView
{
public:
DECLARE_DYNCREATE(CMyCustomView)
CMyCustomView();
~CMyCustomView();
virtual void OnDraw(CDC* /*pDC*/);
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
virtual void OnInitialUpdate();


public:
DECLARE_MESSAGE_MAP()
afx_msg void OnMenuIdTestMessageMap();
};

DECLARE_MESSAGE_MAP() 肯定存在于 MyCustomView.h 中当然,我在 MyCustomView.cpp 文件中添加了 BEGIN_MESSAGE_MAPEND_MESSAGE_MAP() 对。

/////////////////////////
// CMyCustomView.cpp

BEGIN_MESSAGE_MAP(CMyCustomView,CScrollView)
ON_COMMAND(MENU_ID_TEST_MESSAGE_MAP,&CMyCustomView::OnMenuIdTestMessageMap)
END_MESSAGE_MAP()


void CMyCaptureView::OnMenuIdTestMessageMap()
{
// TODO: Add your command handler code here
}

但是,菜单项根本不会启用。它只是保持灰色。

我已经尽可能地用谷歌搜索,但到目前为止似乎还没人有过这种经历。首先是否不可能将 ON_COMMAND 处理程序添加到自定义 View 类?我希望不会。

请给我一些建议。谢谢。

最佳答案

原因很简单。命令路由遵循以下规则:

  1. 框架
  2. 事件 View
  3. 文件
  4. 文档模板
  5. 申请

没有路由到拆分窗口中的不同 View 。

如果您想要不同的行为,请在托管拆分器窗口的框架中创建一个 OnCmdMsg 处理程序。首先调用 OnCmdMsg 到事件拆分器 View ,然后(如果未处理)将其重新路由到第二个嵌入 View 。

参见TN021

关于events - 即使添加 ON_COMMAND 处理程序后,菜单项仍保持禁用状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com