65.9K
CodeProject 正在变化。 阅读更多。
Home

在拆分窗格中实现标尺

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.29/5 (8投票s)

2000年1月5日

viewsIcon

112513

downloadIcon

2375

使用固定窗格在视图中添加标尺

Sample Image - rulers.jpg

引言

许多显示图像或文档的应用程序在视图的两侧显示标尺,以指示您在页面中的位置,并允许更准确地定位光标。实现标尺可能很困难,因为我们必须在视图内为它们保留空间(这在基于CScrollView的类中变得更加困难)。另一种解决方案是使用“固定”分割器(意味着它们无法调整大小)。下面的示例演示了如何构建这样的标尺。

代码

实现标尺分割窗口和标尺视图本身的代码可以在ruler.hruler.cpp中找到。以下是如何使用它们的一个示例。

在框架窗口内(可以是CFrameWndCMDIChildWnd派生类)

// 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轴上的位置已更改

代码很容易理解和修改以满足您的需求,但如果您需要帮助,请在下面的评论区留言。请将错误或更新发送给我,以使此解决方案保持最新。有关示例应用程序的更多详细信息,请通过下面的评论区与我联系。

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.