MFC 浮动工具栏始终处于活动状态
MFC floating toolbar always active
我是MFC的新手。我需要创建一个浮动工具栏 (CToolBar),没有停靠选项,并保存和恢复其最后一个位置。
工具栏也应该始终处于活动状态,但它不是。当我从大型机打开一个新的子窗口(例如对话框)时,浮动工具栏变得不活动(我无法单击其按钮或拖动它等)。
过去,我使用过重叠风格的CDiaolog,它是浮动的,并且总是根据需要处于活动状态。是否可以对我的浮动工具栏执行相同的操作?谢谢
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
toolbarIconSize.cx = toolbarIconSize.cy = TOOLBAR_MAIN_ICON_SIZE;
if ( !m_wndMyFloatingToolbar.Create(this,m_wndMyFloatingToolbar.GetBarStyle() |WS_EX_PALETTEWINDOW | WS_EX_TOPMOST |CBRS_FLOATING | WS_VISIBLE) ||
!m_wndMyFloatingToolbar.LoadToolBar(IDR_GENERAL_TOOLBAR, toolbarIconSize))
{
TRACE0("Failed to create My Floating Toolbarn");
return -1; // fail to create
}
m_wndMyFloatingToolbar.EnableDocking(0);
EnableDocking(0);
if (!CreateCtrlBar())
{
TRACE0("Failed to create ctrl toolbarn");
return -1; // fail to create
}
// ...
//...
return 0;
}
void CMainFrame::OnViewToolBar()
{
// ...
//...
CPoint Pos = MyFloatingToolbarGetLastPosition(); \Get last pos
FloatControlBar( &m_wndMyFloatingToolbar, Pos, CBRS_ALIGN_LEFT );
MyFloatingToolbarSetIsVisible();
FloatControlBar( &m_wndMyFloatingToolbar, Pos, CBRS_ALIGN_LEFT );
}
void CMainFrame::MyFloatingToolbarSetIsVisible()
{
WINDOWPLACEMENT wp;
m_wndMyFloatingToolbar.GetParent()->GetParent()->GetWindowPlacement(&wp);
wp.showCmd = SW_SHOW;
m_wndMyFloatingToolbar.GetParent()->GetParent()->SetWindowPlacement(&wp);
m_wndMyFloatingToolbar.GetParent()->GetWindowPlacement(&wp);
wp.showCmd = SW_SHOW;
m_wndMyFloatingToolbar.GetParent()->SetWindowPlacement(&wp);
m_wndMyFloatingToolbar.GetWindowPlacement(&wp);
wp.showCmd = SW_SHOW;
m_wndMyFloatingToolbar.SetWindowPlacement(&wp);
}
void CWJToolBar::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CToolBar::OnWindowPosChanging(lpwndpos);
if ( GetBarStyle() & CBRS_FLOATING )
{
if((lpwndpos->flags & SWP_HIDEWINDOW) && ((this->GetParentFrame())->m_hWnd !=(this->GetTopLevelFrame())->m_hWnd))
{
CMainFrame* mf = (CMainFrame*)(AfxGetApp()->GetMainWnd());
mf->MyFloatingToolbarSavePosition();
}
}
}
- 如果设置正确,则可能需要调试以查看其坐标。保持独立。:p
-
根据您当前发布的代码,我看不到您存储数据的意义,请尝试此操作
- 隐藏工具栏
- 保存其位置数据
- 更改父窗口位置和
- 重新加载您保存的坐标。
然后,保存的数据将变为不正确的值。
我建议您捕获要实时添加工具栏的位置。这使工具栏应用程序更加通用。所以
- 保存工具栏的左上角距离,而不是其父窗口的距离,而不是其坐标
- 获取父窗口坐标
- 根据保存的距离重新加载工具栏
当然还有其他方法可以做到这一点,但我认为这对于完成您可能正在寻找的东西来说更微不足道。
使用 CMFCToolBar(而不是 CToolBar),那么你只需要 2 个命令,就可以实现这一点。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWndEx::OnCreate(lpCreateStruct) == -1)
return -1;
:
m_wndToolBar.SetPermament(TRUE); // it removes CloseButton (=always active)
CRect rect;
GetClientRect(&rect);
ClientToScreen(rect);
rect.OffsetRect(100, 20);
m_wndToolBar.FloatPane(rect); // Float and move it to your wished coordinates
:
}
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何确定boost msm中的特定状态是否为活动状态
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- “B1的多重定义”,即使警卫处于活动状态
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- wx工具栏:获取工具的位置和大小
- 带有下拉菜单的wx工具栏:对所选项目没有反应
- 当 /Whorearchive选项处于活动状态时,无法使用Visual Studio链接到Windows上的自构建张量
- IBM Rhapsody c++ 代码生成 - 为什么总是在状态图周围放置一个活动状态
- 暂停游戏OnSteamVR叠加层处于活动状态
- 我怎么知道哪种上下文处于活动状态
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- 如何保持异步函数中使用成员的shared_ptr对象的活动状态?
- 错误保持活动状态延迟
- Microsoft 编辑默认工具栏时的 Visual Studio 'Unknown Bitmap Format'
- 如何在C API中检查MySql连接是否处于活动状态
- MFC 浮动工具栏始终处于活动状态