如何在 MFC 功能包中获取功能区控件以处理ID_WINDOW_TILE_VERT
How to get ribbon control in MFC feature pack to process ID_WINDOW_TILE_VERT
我正在移植较旧的 MFC 应用程序以使用带有功能区 UI 的 MFC 功能包,并发现功能区 UI 不处理 MDI 窗口平铺命令,例如ID_WINDOW_TILE_VERT。 有没有办法启用此功能?
单步执行 MFC 源,我在 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\src\mfc\winmdi.cpp 中得到了以下内容,这似乎是正确的;
BOOL CMDIFrameWnd::OnMDIWindowCmd(UINT nID)
{
ASSERT(m_hWndMDIClient != NULL);
UINT msg;
UINT wParam = 0;
switch (nID)
{
default:
return FALSE; // not for us
case ID_WINDOW_ARRANGE:
msg = WM_MDIICONARRANGE;
break;
case ID_WINDOW_CASCADE:
msg = WM_MDICASCADE;
break;
case ID_WINDOW_TILE_HORZ:
wParam = MDITILE_HORIZONTAL;
// fall through
case ID_WINDOW_TILE_VERT:
ASSERT(MDITILE_VERTICAL == 0);
msg = WM_MDITILE;
break;
}
::SendMessage(m_hWndMDIClient, msg, wParam, 0);
return TRUE;
}
我也试过打电话
MDITile(MDITILE_HORIZONTAL);
直接,它本质上做同样的事情并且不起作用。
根据一些实验,当 MFC mdi 接口基于 CMDIFrameWndEx 框架托管基于 CMDIChildWndEx 的可停靠窗格并启用选项卡式文档时,浮动窗口不可用,因此平铺或级联也不可用。
要启用平铺,只需删除该行即可
EnableMDITabbedGroups(TRUE, mdiTabParams);
从您的 CMainFrame::OnCreate 方法。 缺点是你也会丢失漂亮的选项卡式文档UI。 FWIW,在启用选项卡式组后,我也尝试调用 EnableDocking(CBRS_FLOAT_MULTI),但这没有任何区别。 这里也在讨论中
更新:为了保留选项卡式界面并拆分屏幕,以下替代方法非常适合将具有多个选项卡的单个水平视图拆分为两个视图,当前选项卡位于新视图中。
void SplitViews(CMDIFrameWndEx *pFrame)
{
pFrame->MDITabNewGroup();
pFrame->MDITabMoveToNextGroup();
}
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 处理除以零会导致<csignal>意外行为
- 是否可以在c++中处理字符串流中的各个元素
- 如何声明ON_COMMAND处理程序的 ID