Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Size Grip Control

0.00/5 (No votes)
29 Aug 2006 1  
A very easy way of resizing CWnd based objects.

Sample Image - Size_Grip_Control.jpg

Introduction

First of all, let me say that as an original MFC fan, I am also a great fan of this site. For a very long time, I have been looking for a chance to submit an article. I have developed very interested things, but the majority of those code are specialized to very specific aspects.

The reason

Recently, I was faced with the following issue. How could I resize a control bar or even a singe child control in a visual way (by moving the mouse)? Indeed, there are some great controls here in CodeProject, but they have a lot of code and they are oriented to specific controls.

All of us that use MFC know the peculiarities of CWnd based controls. I have, many times, been stuck for hours or days, trying to figure out how a control behaves. After all these years, I concluded that the most stable control is CWnd, and whenever possible, I skip classic controls and make my own directly from CWnd.

The concept

The files that contain HCSizeGrip are:

  • HCSizeGrip.h
  • HCSizeGrip.cpp

HCSizeGrip is derived directly from the CWnd class. It can be created very simply (by calling the CWnd::Create function), and it can be handled as a classical CWnd object. It uses a hook to capture mouse events.

When you hover the mouse above a HCSizeGrip object, you will see the mouse pointer change (to a sizing arrow). If you press the left button and start dragging the parent CWnd based control of HCSizeGrip, it will start resizing.

There are four orientations of resizing: LEFT, RIGHT, TOP, BOTTOM. The default is RIGHT. If you want to change the resize orientation, use:

BOOL SetResizeOrientation(TResizeOrientation val)

The functions BOOL SetMaxScale(float newVal) and BOOL SetMinScale(float newVal) set the maximum and minimum resize (0 up to 1).

Warnings

I had no time to test this class extensively, but I am sure that t does not work correctly with top level windows like CDialog or CFrameWnd. But I think that it works fine with CDialogBar controls.

Future

In the future, I want to do (when I have the time) virtual resize like all modern task bars have (not actual resize before the mouse movement is complete).

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here