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

尺寸抓手控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.31/5 (5投票s)

2006年8月29日

CPOL

2分钟阅读

viewsIcon

35721

downloadIcon

279

一种非常简单的调整基于CWnd对象的尺寸的方法。

Sample Image - Size_Grip_Control.jpg

引言

首先,让我说,作为最初的MFC粉丝,我也是这个网站的忠实粉丝。很长一段时间以来,我一直都在寻找提交文章的机会。我开发了一些非常有趣的东西,但是大部分代码都非常专业化,针对非常具体的方面。

原因

最近,我遇到了以下问题:如何以可视化的方式(通过移动鼠标)调整控制条甚至单个子控件的大小?确实,CodeProject上有一些很棒的控件,但是它们有很多代码,并且面向特定的控件。

我们所有使用MFC的人都了解基于CWnd控件的特性。很多次,我都卡了好几个小时甚至好几天,试图弄清楚控件是如何工作的。经过这些年,我得出结论,最稳定的控件是CWnd,并且只要有可能,我就跳过经典控件,直接从CWnd创建自己的控件。

概念

包含HCSizeGrip的文件是

  • HCSizeGrip.h
  • HCSizeGrip.cpp

HCSizeGrip直接派生自CWnd类。它可以非常简单地创建(通过调用CWnd::Create函数),并且可以像经典的CWnd对象一样处理。它使用钩子来捕获鼠标事件。

当您将鼠标悬停在HCSizeGrip对象上方时,您将看到鼠标指针发生变化(变为大小调整箭头)。如果按下左键并开始拖动HCSizeGrip的父CWnd控件,它将开始调整大小。

有四种调整大小的方向:LEFTRIGHTTOPBOTTOM。默认值为RIGHT。如果要更改调整大小的方向,请使用

BOOL SetResizeOrientation(TResizeOrientation val)

函数BOOL SetMaxScale(float newVal)BOOL SetMinScale(float newVal)设置最大和最小调整大小比例(0到1)。

警告

我没有时间广泛测试这个类,但我确定它**不能正确工作**于顶级窗口,如CDialogCFrameWnd。但我认为它**可以很好地工作**于CDialogBar控件。

未来

将来,我想做(**当我空闲的时候**)像所有现代任务栏一样具有虚拟调整大小的功能(在鼠标移动完成之前不进行实际调整大小)。

© . All rights reserved.