在拆分窗格中实现标尺






4.29/5 (8投票s)
2000年1月5日

112513

2375
使用固定窗格在视图中添加标尺
引言
许多显示图像或文档的应用程序在视图的两侧显示标尺,以指示您在页面中的位置,并允许更准确地定位光标。实现标尺可能很困难,因为我们必须在视图内为它们保留空间(这在基于CScrollView
的类中变得更加困难)。另一种解决方案是使用“固定”分割器(意味着它们无法调整大小)。下面的示例演示了如何构建这样的标尺。
代码
实现标尺分割窗口和标尺视图本身的代码可以在ruler.h和ruler.cpp中找到。以下是如何使用它们的一个示例。
在框架窗口内(可以是CFrameWnd
或CMDIChildWnd
派生类)
// class definition
class
CMainFrame : public
CFrameWnd
{
[...]
protected
:
DECLARE_FX_RULER(CMainFrame)
下一步是创建分割器本身和视图。下面的代码匹配一个SDI应用程序,它在分割窗格内容纳上述代码,但您可以轻松地对其进行调整以适应您的需求。在CMainFrame
类的OnCreateClient
成员中,添加代码以在右窗格内创建分割器
// class definition
IMPLEMENT_FX_RULER_SPLITTER(<className>,
<parentSplitter>, 0, 1, pContext->m_pNewViewClass);
接下来,您需要向标尺发送通知,告知它们滚动位置或缩放更改。标尺还可以显示鼠标位置,因为光标移动;这也可以通过发送带有几行代码的通知来实现,例如
// class definition
GetDocument()->UpdateAllViews(this,
VW_VSCROLL, (CObject*)(GetScrollPosition().y));
可用的提示类型是(提示参数作为INT
传递,使用转换为CObject*
的强制转换)
VW_HSCROLL | 视图水平滚动 |
VW_VSCROLL | 视图垂直滚动 |
VW_HPOSITION | 光标在x轴上的位置已更改 |
VW_VPOSITION | 光标在y轴上的位置已更改 |
代码很容易理解和修改以满足您的需求,但如果您需要帮助,请在下面的评论区留言。请将错误或更新发送给我,以使此解决方案保持最新。有关示例应用程序的更多详细信息,请通过下面的评论区与我联系。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。