如何从DLL的CMFCRibbonBar获取消息OnUpdateCommandUI [英] How to get message OnUpdateCommandUI from CMFCRibbonBar at DLL

查看:129
本文介绍了如何从DLL的CMFCRibbonBar获取消息OnUpdateCommandUI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨。



我有一个带有RIBBON的SDI应用程序(EXE)。这个应用程序有插件作为DLL。



在这些插件中,我创建了一个CFrameWnd,另一个CMFCRibbonBar ...



我的问题是......我没有从DLL CMFCRibbonBar收到OnUpdateCommandUI。只有当我点击任何按钮时才会这样。



通常情况下,当我有OnHover时,会发送一个OnUpdateCommandUI来控制...在我的DLL中,这不会发生。



这是我的代码,仅当我点击ID_BTN_NEW按钮时才调用OnUpdateBtnNew:



  void  CMTFrameWnd :: CreateRibbon()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

m_wndRibbonBar.Create( this );

MT_PUSH_RESOURCE( MTBaseRes.dll);

m_wndRibbonBar.LoadFromResource(IDR_RIBBON_CADASTROS);

if (!m_wndStatusBar.Create( this ))
{
TRACE0( 无法创建状态栏\ n);
return ; // 无法创建
}
}

BEGIN_MESSAGE_MAP(CMTFrameWnd,CFrameWndEx)
ON_WM_CREATE()
ON_WM_CLOSE()
ON_COMMAND(ID_BTN_EXIT,& CMTFrameWnd :: OnBtnExit)
ON_COMMAND(ID_BTN_NEW,& CMTFrameWnd :: OnBtnNew )
ON_UPDATE_COMMAND_UI(ID_BTN_NEW,& CMTFrameWnd :: OnUpdateBtnNew)
ON_COMMAND(ID_BTN_DEL,& CMTFrameWnd :: OnBtnDel)
ON_UPDATE_COMMAND_UI(ID_BTN_DEL,& CMTFrameWnd :: OnUpdateBtnDel)
END_MESSAGE_MAP()





源代码示例。

https://docs.google.com/file/d/0B8B-NIoST12WeWE3cm9YdmFMRG8/edit?usp=sharing [ ^ ]

解决方案

联系dll的authot。


这是解决方案!



我选择的解决方案是在我的CFrame窗口中添加一个计时器。当计时器发生时,我只是调用CWndApp :: OnIdle(0)。


Hi.

I have an SDI application (EXE), with its RIBBON. This application have plugins as DLL.

In these plugins I have created an CFrameWnd, with another CMFCRibbonBar...

My problem is... I dont get receive OnUpdateCommandUI from DLL CMFCRibbonBar. Only when I have clicked in any button.

Normally, when I have "OnHover" this send an OnUpdateCommandUI to control... In my DLL this doesnt happened.

This is my code, OnUpdateBtnNew is called only when I have clicked on ID_BTN_NEW button:

void CMTFrameWnd::CreateRibbon() 
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	m_wndRibbonBar.Create(this);

	MT_PUSH_RESOURCE("MTBaseRes.dll");
	
	m_wndRibbonBar.LoadFromResource(IDR_RIBBON_CADASTROS);

	if (!m_wndStatusBar.Create(this))
	{
		TRACE0("Failed to create status bar\n");
		return;      // fail to create
	}
}

BEGIN_MESSAGE_MAP(CMTFrameWnd, CFrameWndEx)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_COMMAND(ID_BTN_EXIT, &CMTFrameWnd::OnBtnExit)
	ON_COMMAND(ID_BTN_NEW, &CMTFrameWnd::OnBtnNew)
	ON_UPDATE_COMMAND_UI(ID_BTN_NEW, &CMTFrameWnd::OnUpdateBtnNew)
	ON_COMMAND(ID_BTN_DEL, &CMTFrameWnd::OnBtnDel)
	ON_UPDATE_COMMAND_UI(ID_BTN_DEL, &CMTFrameWnd::OnUpdateBtnDel)
END_MESSAGE_MAP()



Source code example.
https://docs.google.com/file/d/0B8B-NIoST12WeWE3cm9YdmFMRG8/edit?usp=sharing[^]

解决方案

contact the authot of the dll.


This is the solution!

The solution I picked was to add a timer to my CFrame window. When the timer occurs, I simply called CWndApp::OnIdle(0).


这篇关于如何从DLL的CMFCRibbonBar获取消息OnUpdateCommandUI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆