Click here to Skip to main content
15,886,817 members
Articles / Desktop Programming / MFC

Resize/Reposition the Controls in a Dialog at your Pleasure

Rate me:
Please Sign up or sign in to vote.
4.55/5 (38 votes)
1 Mar 2006CPOL7 min read 238.4K   8.8K   65  
You can resize or reposition the controls in your dialog derived from CSizingDialog to anywhere you wish just by specifying some simple strings or numbers. In addition, most kinds of controls almost don't flicker when moving, which is often a problem in some other solutions.
////////////////////////////////////////////////////////////////////////////
// SizingDialog.h
//
// Copyright 2005 Xia Xiongjun( ���۾� ), All Rights Reserved.
//
// E-mail: xj-14@163.com
//
// This source file may be copyed, modified, redistributed  by any means
// PROVIDING that this notice and the authors name and all copyright notices
// remain intact, and PROVIDING it is NOT sold for profit without the authors
// expressed written consent. The author accepts no liability for any 
// damage/loss of business that this product may cause.
//
////////////////////////////////////////////////////////////////////////////

#pragma once

////////////////////////////////////////////////////////////////////////////
// class CCtrlInfo

class CCtrlInfo
{
// XR: Constructor and destructor
public:
	CCtrlInfo(LPCRECT rcInit = NULL,
		double dRateLeft = 0.0,  double dRateRight    = 0.0, 
		double dRateTop  = 0.0,  double dRateBottom   = 0.0);
	virtual ~CCtrlInfo(void);

// XR: Operations
public:
	BOOL Modify(const CWnd* pCtrl, const CWnd* pParent, 
		LPCTSTR lpszString, char chSpr = '+');
	BOOL Modify(LPCRECT rcInit,
		double dRateLeft = 0.0,  double dRateRight    = 0.0, 
		double dRateTop  = 0.0,  double dRateBottom   = 0.0);

// XR: Data
public:
	CRect  m_rcInit;
	double m_dRateLeft;
	double m_dRateRight;
	double m_dRateTop;
	double m_dRateBottom;

// XR: Implementations
protected:
	BOOL ExtractOptions(LPCTSTR lpszSection, 
		const CWnd* pCtrl = NULL, const CWnd* pParent = NULL);
	void GetCoefficientAndWord(LPCTSTR lpszSection,
		CString& strWord, double& dCoef) const;
};

////////////////////////////////////////////////////////////////////////////
// CSizingDialog dialog

#include "afxcoll.h"	// XR: For CMapPtrToPtr

#define DT_STRING 0
#define DT_NUMBER 1

class CSizingDialog : public CDialog
{
	DECLARE_DYNAMIC(CSizingDialog)

// XR: Constructor and destructor
public:
	explicit CSizingDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);	// constructor													
	virtual ~CSizingDialog();

// XR: Operations
protected:
	void AddResizaleCtrl(UINT nID, LPCTSTR lpszString = NULL);
	void AddResizaleCtrl(UINT nID,
		double dRateLeft, double dRateRight, 
		double dRateTop, double dRateBottom);

	void AddResizaleCtrlRange(UINT nIDStart, UINT nIDEnd, 
		LPCTSTR lpszString = NULL);
	void ModifyResizaleCtrlRange(UINT nIDStart, UINT nIDEnd, 
		LPCTSTR lpszString = NULL);
	void AddResizaleCtrlRange(UINT nIDStart, UINT nIDEnd, 
		double dRateLeft, double dRateRight, 
		double dRateTop, double dRateBottom);

	void AddResizaleCtrlArray(UINT nIDStart, UINT nIDEnd,
		double dSelfGain = 0.0, double dBorderIntervalRate = 1.0, BOOL bHori = TRUE);
	
// XR: Implementations
private:
	void AddCtrl(UINT nID, int nDataType, LPCVOID lpData);
	void AddCtrlRange(UINT nIDStart, UINT nIDEnd, int nDataType, LPCVOID lpData);
	void RearrangeID(UINT& nReIDS, UINT& nReIDE, 
		HWND& hCtrlS, HWND& hCtrlE, int& nNum) const;
	void ResizeControls();

public:
	void InvalidateCtrlBorder(
		LPCRECT lpRectOld, LPCRECT lpRectNew, BOOL bErase = TRUE);

// XR: Implementations
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	afx_msg int  OnCreate(LPCREATESTRUCT lpCreateStruct);
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
	afx_msg UINT OnNcHitTest(CPoint point);
	DECLARE_MESSAGE_MAP()

// Data
private:
	CMapPtrToPtr m_mapPtToInfo;
	CRect m_rcInit;
};

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
China China
_____________________________
Xia Xiongjun loves this site. Smile | :)

Comments and Discussions