MFC实现对话框最大化时控件的集体跟踪

Posted 独孤九戒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC实现对话框最大化时控件的集体跟踪相关的知识,希望对你有一定的参考价值。

MFC实现对话框最大化时控件的集体跟踪

1.在对话框类中(.h文件)定义如下变量和函数

void ReSize();  
POINT old; 

afx_msg void OnSize(UINT nType, int cx, int cy);  


2.在OnInitDialog()中 计算出原始对话框的大小

CRect rect;      
GetClientRect(&rect);     //取客户区大小    
old.x=rect.right-rect.left;  
old.y=rect.bottom-rect.top;  

3.添加 WM_SIZE消息

void CSeakyDlg::OnSize(UINT nType, int cx, int cy)

	CDialogEx::OnSize(nType, cx, cy);

	if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
	
		ReSize();
	


4.刷新控件函数

void CSeakyDlg::ReSize()

	float fsp[2];
	POINT Newp; //获取现在对话框的大小  
	CRect recta;
	GetClientRect(&recta);     //取客户区大小    
	Newp.x = recta.right - recta.left;
	Newp.y = recta.bottom - recta.top;
	fsp[0] = (float)Newp.x / old.x;
	fsp[1] = (float)Newp.y / old.y;
	CRect Rect;
	int woc;
	CPoint OldTLPoint, TLPoint; //左上角  
	CPoint OldBRPoint, BRPoint; //右下角  
	HWND  hwndChild = ::GetWindow(m_hWnd, GW_CHILD);  //列出所有控件    
	while (hwndChild)
	
		woc = ::GetDlgCtrlID(hwndChild);//取得ID  
		GetDlgItem(woc)->GetWindowRect(Rect);
		ScreenToClient(Rect);
		OldTLPoint = Rect.TopLeft();
		TLPoint.x = long(OldTLPoint.x*fsp[0]);
		TLPoint.y = long(OldTLPoint.y*fsp[1]);
		OldBRPoint = Rect.BottomRight();
		BRPoint.x = long(OldBRPoint.x *fsp[0]);
		BRPoint.y = long(OldBRPoint.y *fsp[1]);
		Rect.SetRect(TLPoint, BRPoint);
		GetDlgItem(woc)->MoveWindow(Rect, TRUE);
		hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
	
	old = Newp;



以上是关于MFC实现对话框最大化时控件的集体跟踪的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 中,当 CEdit 控件达到最大字符时,退格不起作用

MFC中如何实现Tab控件里子对话框里的控件跟着对主话框伸缩而改变位置

mfc怎么设置dialog大小

VS2010-MFC(对话框:为控件添加消息处理函数)

[dp]vijos1063 迎春舞会之集体舞

关于MFC 在一个对话框内有两个控件,在其中一个控件内点击拖动到另一控件松开,然后交换控件的位置怎么实现?