在MFC中创建标尺栏

时间:2020-03-06 15:04:53  来源:igfitidea点击:

在SDI应用中创建垂直和水平标尺的最佳方法是什么?我们是否会将其作为框架或者视图的一部分?从CControlBar派生它,还是有更好的方法?

垂直标尺也必须停靠在窗格上,而不是停靠在框架上。

为了使我更清楚一点,请想象一下Visual Studio(仅适用于MFC)的"对话框编辑器"中的垂直标尺。每当调整树形视图的大小时,它就会重新定位。

解决方案

我不会使用控制栏。除了停靠工具栏以外的其他事情,我没有其他理由(IMOHO)很难做到自己想要的事情。

我只是使用GDI调用将它们直接绘制在"视图"窗口上。

我想我可能会考虑将每个标尺设置为自己的窗口,然后在自己的窗口上绘制标尺。然后,我将在视图和位置中将这两个CWnd派生类创建为子窗口。如果我们想与这些标尺上的鼠标进行交互(便于梳理标尺的消息),则这很好。

我最终按照建议从CWnd导出了标尺,并跳过了控制栏路线。该代码在两种情况下均有效:

m_wndSplitter.CreateStatic(this, 1, 3);

m_wndLeftPane.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 0));
m_ruler.Create(&m_wndSplitter,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0, 1));

m_wndSplitter.CreateView(0, 2, pContext->m_pNewViewClass, CSize(300, 0), pContext);
SetActiveView((CScrollView*)m_wndSplitter.GetDlgItem(m_wndSplitter.IdFromRowCol(0, 2)));