CheckFrame Control | CodeGuru

CheckFrame Control

. Sometimes it can be handy to exclude a set of options based on the users choice. For instance if the user do not want to save a log file, then it should be signalled, to the user, which options are relevant. fig.1 The checkframe control are disabled, and so is its the contained controls. […]

Written By
CodeGuru Staff
CodeGuru Staff
Aug 5, 1998
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

.

Sometimes it can be handy to exclude a set of options based on
the users choice. For instance if the user do not want to save a
log file, then it should be signalled, to the user, which options
are relevant.


fig.1 The checkframe control are disabled, and so is its the
contained controls.


fig. 2 The check frame is enabled and the controls can be used.

 

The header file: CheckFrm.h

BOOL IsRectContainedInRect(CRect &rcChild, CRect &rcMother);

class CCheckFrame : public CObject
{
public:
	virtual void Enable(BOOL bEnable);
	void Set(CWnd *pParentWnd,UINT nFrmCtl);

	CWnd* m_pFrame;
	CWnd* m_pDialog;
	CRect m_rFrm;
	CDWordArray m_adwWndHandles;


protected:
};

The impementation file: CheckFrm.cpp
The code are futher commented in the source files.

#include "stdafx.h"
#include "Checkfrm.h"

//////////////////////////////////////
// EnumChildWnds Callback
BOOL CALLBACK EnumChildWnds(HWND hwnd, CCheckFrame *pObj)
{
	CRect R;
	GetWindowRect(hwnd, &R);
	pObj->m_pDialog->ScreenToClient(&R);

	if (hwnd != pObj->m_pFrame->m_hWnd)
	{
		if (IsRectContainedInRect(R, pObj->m_rFrm))
			pObj->m_adwWndHandles.Add((DWORD)hwnd);
	}

	return TRUE;
}


//////////////////////////////////////
// Function name	: Set
void CCheckFrame::Set(CWnd *pParentWnd, UINT nFrmCtl)
{
	m_pDialog = pParentWnd;

	// Calculate the size of the rect that should contain the controls
	m_pFrame = m_pDialog->GetDlgItem(nFrmCtl);
	if (!m_pFrame)
	{
		AfxMessageBox("Unable to find frame control");
		return;
	}
	m_pFrame->GetWindowRect(&m_rFrm);
	m_pDialog->ScreenToClient(&m_rFrm);

	// Make sure the array is empty
	m_adwWndHandles.RemoveAll();

	// The (control) windows contained within the boundaries of the frame control
	// are enumerated and their associated window-handles collected in an array.
	EnumChildWindows(m_pDialog->m_hWnd, (WNDENUMPROC)EnumChildWnds, (LONG)(CCheckFrame *)this);

}

//////////////////////////////////////
// Function name	: CCheckFrame::Enable
void CCheckFrame::Enable(BOOL bEnable)
{
	for (int i=0 ; i<m_adwWndHandles.GetSize() ; i++)
		EnableWindow((HWND)m_adwWndHandles[i], bEnable);
}

//////////////////////////////////////
// Function name	: IsRectContainedInRect
BOOL IsRectContainedInRect(CRect &rcChild, CRect &rcMother)
{
	if (rcMother.PtInRect(CPoint(rcChild.left, rcChild.top)) &&
	rcMother.PtInRect(CPoint(rcChild.left, rcChild.bottom)) &&
	rcMother.PtInRect(CPoint(rcChild.right, rcChild.top)) &&
	rcMother.PtInRect(CPoint(rcChild.right, rcChild.bottom)))
		return TRUE;

	return FALSE;
}

Known problems:
If the checkbox control it self is disabled when the progrma
exits, try to move it some pixels away from the border of the
frame control.

Download the sample project (31 kb)

Posted : March 12, 98

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.