一个尺寸/移动控件





5.00/5 (1投票)
2000年2月2日

82561

2126
提供在运行时移动和调整控件大小能力的类。
描述
这里描述的类是从 CStatic
派生的,旨在提供在运行时移动和调整控件大小的功能。我专门为更大的项目中的对话框编辑器编写了这个类。诚然,除了在描述的应用程序中之外,它几乎没有价值,但我到处寻找这个功能却找不到,所以我认为其他人可能也在寻找。
如你所见,我尝试重现 MSVC 对话框编辑器中找到的样式。将光标移动到任何“尺寸句柄”上,都会更改光标以指示支持拖动。一旦按下鼠标左键,你就可以根据需要调整控件的大小。将光标移动到控件的任何其他部分,都会显示一个 IDC_SIZEALL
鼠标光标,指示支持移动。按住鼠标左键可以让你移动控件。
在移动或调整大小的过程中,目标控件会被调整/移动大小,从而允许调整任何控件。与 MSVC 对话框编辑器中提供的控件不同,目标控件不会被此控件“遮挡”,因此它可以自行响应鼠标事件。
这个类的核心逻辑位于 OnMouseMove
函数中,根据以下因素采取行动:
- 光标位置 - 更改鼠标光标
- 操作标志 - 如果按下鼠标左键,要采取什么操作
已知问题
如果,在开始拖动或调整大小后,鼠标移动得太快,控件无法跟上并失去焦点,因此拖动或调整大小会立即停止。
如何使用
- 将文件 WidgetSizer.cpp & WidgetSizer.h 添加到你的项目中。
- 在你的项目中,定义一个全局指针
var
,类型为CWidgetSizer
。 - 在你的主类实现文件中,定义这个指针并将其置空。
- 在你的每个控件中,包含声明
extern CWidgetSizer *myvar
所在的头文件。 - 在适合你的应用程序的位置插入代码以创建
CWidgetSizer
类。例如,当目标控件被创建时。if (g_pWidgetSizer) { delete g_pWidgetSizer; g_pWidgetSizer = NULL; } g_pWidgetSizer = new CWidgetSizer(m_pParent, this);
或者当按下鼠标左键时
if (g_pWidgetSizer) { if (g_pWidgetSizer->AmITheTarget(this)) return; delete g_pWidgetSizer; g_pWidgetSizer = NULL; } g_pWidgetSizer = new CWidgetSizer(m_pParent, this);
请求
如果有人有任何想法/建议/改进,请通过电子邮件告诉我,以便我改进这个类。
历史
- 2000 年 2 月 2 日:初始版本
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。