问题标签 [cmfctoolbar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2010 - CMFCToolbar ReplaceButton() 导致按钮消失
使用Visual Studio 2010并使用MFC SDI 应用程序。我有一个主框架拥有的CMFCToolbar对象。
创建此应用程序中的文档时,MainFrame 调用一个函数以将 CMFCToolbar 对象中的一个按钮替换为CMFCToolbarMenuButton。菜单按钮的内容由文档中的信息填充。菜单创建始终有效。对 ReplaceButton 的调用总是成功的。但是我还没有弄清楚这个电话的视觉症状。
任何时候调用 ReplaceButton,按钮都会消失。它不仅不被绘制,而且不可点击。暂时没了。我认为这是因为有一个对旧按钮的悬空引用,我刚刚通过调用 ReplaceButton 将其销毁。
我试过调用 Invalidate()、RecalcLayout() 来触发重绘,但都没有奏效。我让按钮显示的唯一可靠方法是手动或通过取消停靠/重新停靠工具栏来重新调整应用程序窗口的大小。我假设在这些情况下会发生某种较低级别的刷新,但我不知道如何手动触发它。
有没有办法确保我的按钮立即被绘制?
编辑:代码示例
更新:
调用m_wndBrushBar.AdjustLayout()
似乎可以稳定这些 CMFCToolbar 按钮的视觉行为。所以这是一个部分解决方案。部分原因如下:
很难说出真正的视觉行为是什么。事实证明,所有视觉设置/状态都与这些 MFC 对象一起存储在注册表中,并且它可以保持动态创建的对象的状态,这些对象真正改变了应用程序的启动行为。
我已经进去删除了下面的注册表值
Current User -> "Local App-Wizard Generated Applications" -> [My App Name]
. 这样做了很多次,只是为了找出我的应用程序的真实行为是什么。感觉好像我缺少当前版本的 MFC 的一些基础知识。注册表交易引起的许多错误。
有没有办法阻止某些对象的注册表设置,或者完全关闭这种行为?否则,我想我的关机过程必须更加彻底地重置所有视觉元素。注册表值似乎忽略、覆盖或绕过我的启动代码。我可以编写我希望对象如何看待启动的代码,但是如果注册表中有值,那就没有用了。
c++ - 在窗格中嵌入时启用\禁用 CMFCToolBar 按钮
我知道从 CMFCToolBar 启用/禁用按钮的最佳方法是使用
但是当工具栏嵌入到 CDockable 窗格中时,这似乎不起作用我有一个 CMFCToolBar 的派生类,它是启用窗格中的按钮所必需的,但我没有尝试过禁用它们。
mfc - 在 CMFCToolBarEditBoxButton 中捕获粘贴事件
我们在 VS2010 中有一个 MFC SDI 应用程序,其 CMFCToolBar 包含一个CMFCToolBarEditBoxButton
. 当用户将某些内容粘贴到该编辑框中时,有没有办法处理粘贴事件?
我们ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
在主窗口中处理,但是当焦点位于CMFCToolBarEditBoxButton
.
c++ - MFC:CMFCToolBar SetButtonStyle 不与样式 TBBS_PRESSED 一起工作?
by是否有bug在控制?还是我做错了什么?
CMFCToolBar m_wndToolBar;
在消息映射中的.h中
ON_COMMAND(ID_MYID, &CMainFrame::OnToolBar)
void CMainFrame::OnToolBar()
{
int nIndex = m_wndToolBar.CommandToIndex(ID_MYID);
UINT nState = m_wndToolBar.GetButtonStyle(nIndex);
if(nState & TBBS_PRESSED)
nState &= ~TBBS_PRESSED;
else
nState |= TBBS_PRESSED;
m_wndToolBar.SetButtonStyle(nIndex,nState);
m_wndToolBar.InvalidateButton(nIndex);
}
通过单击按钮,我需要设置按下按钮,当用户再次单击时,按钮变为未按下状态。
单击按钮没有任何反应:(
c++ - 仅在 MFC 菜单栏上禁用自定义
在 VS2010 中使用 MFC 功能包时,是否可以禁用 CMFCMenuBar 上的自定义功能但在工具栏上保持启用状态?我们不希望用户拖动菜单,但他们可以自由更改工具栏。
我们禁止在退出时将 CMFCMenuBar 的状态保存到注册表中,但菜单仍然可以在运行时移动或删除。
更新:按照 xMRi 的回答,我在派生菜单类的构造函数中将 m_bDisableCustomize 设置为 TRUE。我注意到有一个重绘问题,在自定义过程中单击菜单会在整个菜单中绘制黑框。这导致我访问http://www.bcgsoft.com/cgi-bin/forum/topic.asp?TOPIC_ID=2643
我不想修改 MFC 源代码,所以我改为处理消息:
这似乎解决了重绘问题。请让我知道是否有更好的方法来解决重绘问题。
c++ - CMFCToolbar 和 CMDIFrameWnd
我正在将一些 CToolbars 转换为 CMFCToolbars,我的 CMainFrame 继承自 CMDIFrameWnd 类。但是我找不到将 CPane / CMFCToolbar 停靠到 CMDIFrameWnd 的方法,我见过的每个教程或源代码都使用 CMDIFrameWndEx 作为 CMainFrame 类。
谁能确认 CPane / CMFCToolbars 只能在 CMDIFrameWndEx 框架上使用?如果 CPane / CMFCToolbars 可以与 CMDIFrameWnd 一起使用,那么一些代码示例?
c++ - CMFCToolBar & CMFCMenuBar 默认不显示动态项
我创建了一个使用 CMFCToolBar 和 CMFCMenuBar 的 MFC 应用程序。它保存了它的第一次项目状态,当我更改或添加任何动态项目时,我仍然看到第一个状态删除的项目停留在那里添加的项目没有显示,然后我发现所有项目都在注册表中序列化并每次加载,我们所有的应用程序都从应用程序的模块中加载动态菜单项或工具栏按钮,除了以下解决方案外,我真的无法让它工作
这是我可以用来向工具栏或菜单栏添加动态项目的唯一方法,但这不是解决方案,我没有利用自定义工具并保存菜单栏位置,这是微软希望人们如何处理带有菜单和工具栏?推送一次并且不允许更改?或者我错过了什么?
c++ - 为什么 CMFCToolbar 中的自定义按钮在大图标上很难看
当工具栏很大时,自定义按钮的图标很难看如何解决这个问题
如您所见,它被拉伸并导致分辨率不佳,有什么办法可以解决吗?
c++ - 如何将选项检查菜单添加到 CMFCToolBar 以允许同时进行多项检查
我想向 CMFCToolbar 添加一个菜单按钮,允许一次检查多个选项,当我添加一个菜单并检查单击时的一个项目时,菜单已关闭我需要一个类似于自定义按钮中的菜单的菜单,如下图所示
c++ - CMFCToolbar自定义教程参考?
我浏览了所有可能的 MSDN 文章,并浏览了很多 Web 内容,以便找到有关 CMFCToolbar 类的使用教程。信息很少,几乎是关于类的基本特征。
我正在寻找以下信息:
一般问题:
如何使用基于 CMFCToolbar 的自定义图像(从文件加载的位图)实现工具栏。
子问题:
需要重载哪些方法,需要使用哪些其他类(是否需要CMFCToolBarButton、CMFCToolBarImages)。
您能否给我有关教程的参考资料,或根据您的经验提供信息。
先感谢您!