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

一个尺寸/移动控件

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2000年2月2日

viewsIcon

82561

downloadIcon

2126

提供在运行时移动和调整控件大小能力的类。

Sample Image - CSizer.gif

描述

这里描述的类是从 CStatic 派生的,旨在提供在运行时移动和调整控件大小的功能。我专门为更大的项目中的对话框编辑器编写了这个类。诚然,除了在描述的应用程序中之外,它几乎没有价值,但我到处寻找这个功能却找不到,所以我认为其他人可能也在寻找。

如你所见,我尝试重现 MSVC 对话框编辑器中找到的样式。将光标移动到任何“尺寸句柄”上,都会更改光标以指示支持拖动。一旦按下鼠标左键,你就可以根据需要调整控件的大小。将光标移动到控件的任何其他部分,都会显示一个 IDC_SIZEALL 鼠标光标,指示支持移动。按住鼠标左键可以让你移动控件。

在移动或调整大小的过程中,目标控件会被调整/移动大小,从而允许调整任何控件。与 MSVC 对话框编辑器中提供的控件不同,目标控件不会被此控件“遮挡”,因此它可以自行响应鼠标事件。

这个类的核心逻辑位于 OnMouseMove 函数中,根据以下因素采取行动:

  1. 光标位置 - 更改鼠标光标
  2. 操作标志 - 如果按下鼠标左键,要采取什么操作

已知问题

如果,在开始拖动或调整大小后,鼠标移动得太快,控件无法跟上并失去焦点,因此拖动或调整大小会立即停止。

如何使用

  1. 将文件 WidgetSizer.cpp & WidgetSizer.h 添加到你的项目中。
  2. 在你的项目中,定义一个全局指针 var,类型为 CWidgetSizer
  3. 在你的主类实现文件中,定义这个指针并将其置空。
  4. 在你的每个控件中,包含声明 extern CWidgetSizer *myvar 所在的头文件。
  5. 在适合你的应用程序的位置插入代码以创建 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 日:初始版本

许可证

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

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

© . All rights reserved.