尺寸抓手控件
一种非常简单的调整基于CWnd对象的尺寸的方法。
引言
首先,让我说,作为最初的MFC粉丝,我也是这个网站的忠实粉丝。很长一段时间以来,我一直都在寻找提交文章的机会。我开发了一些非常有趣的东西,但是大部分代码都非常专业化,针对非常具体的方面。
原因
最近,我遇到了以下问题:如何以可视化的方式(通过移动鼠标)调整控制条甚至单个子控件的大小?确实,CodeProject上有一些很棒的控件,但是它们有很多代码,并且面向特定的控件。
我们所有使用MFC的人都了解基于CWnd
控件的特性。很多次,我都卡了好几个小时甚至好几天,试图弄清楚控件是如何工作的。经过这些年,我得出结论,最稳定的控件是CWnd
,并且只要有可能,我就跳过经典控件,直接从CWnd
创建自己的控件。
概念
包含HCSizeGrip
的文件是
- HCSizeGrip.h
- HCSizeGrip.cpp
HCSizeGrip
直接派生自CWnd
类。它可以非常简单地创建(通过调用CWnd::Create
函数),并且可以像经典的CWnd
对象一样处理。它使用钩子来捕获鼠标事件。
当您将鼠标悬停在HCSizeGrip
对象上方时,您将看到鼠标指针发生变化(变为大小调整箭头)。如果按下左键并开始拖动HCSizeGrip
的父CWnd
控件,它将开始调整大小。
有四种调整大小的方向:LEFT
、RIGHT
、TOP
、BOTTOM
。默认值为RIGHT
。如果要更改调整大小的方向,请使用
BOOL SetResizeOrientation(TResizeOrientation val)
函数BOOL SetMaxScale(float newVal)
和BOOL SetMinScale(float newVal)
设置最大和最小调整大小比例(0到1)。
警告
我没有时间广泛测试这个类,但我确定它**不能正确工作**于顶级窗口,如CDialog
或CFrameWnd
。但我认为它**可以很好地工作**于CDialogBar
控件。
未来
将来,我想做(**当我空闲的时候**)像所有现代任务栏一样具有虚拟调整大小的功能(在鼠标移动完成之前不进行实际调整大小)。