MFC(十)窗口的放大和缩小

1.新增按钮,描述文字为缩小

2.在头文件里定义两个矩形类

    CRect m_small;
	CRect m_larger;
    afx_msg void OnBnClickedButtonLarger();

CRect 是一个类,主要用于表示一个矩形区域。它里面有一些关于长、宽的属性和方法

并且它会自动生成一个按钮函数

3.在OnInitDialog()函数里初始化窗口

BOOL CbingoDialog::OnInitDialog()
{
    GetWindowRect(m_larger);
	m_small = m_larger;
	m_small.right = m_small.left + m_small.Width() / 2;
	m_small.bottom = m_small.top + m_small.Height() / 2;
}

首先通过getwindowrect函数获取 m_larger 的矩形区域大小,然后将m_small初始化为larger,也可以不初始化,然后将它的有边界横坐标设置为左边界加上宽,即右边界横坐标,注意这里不是右下角横坐标,虽然值是一样的,,但是意义不同,bottom表示下边界纵坐标

4.在按钮点击函数里写代码

void CbingoDialog::OnBnClickedButtonLarger()
{
    CRect curRect;
	GetWindowRect(curRect);
	CWnd* pbutton = GetDlgItem(IDC_BUTTON_LARGER);
    CString strtitle;
	if (pbutton)
	{
		pbutton->GetWindowTextW(strtitle);
		if (strtitle==_T("放大")&&(m_larger.IsRectEmpty()==false))
		{
			pbutton->SetWindowTextW(_T("缩小"));
			SetWindowPos(NULL, curRect.left, curRect.top,
				m_larger.Width(), m_larger.Height(),
                 SWP_NOMOVE | SWP_NOZORDER);
		}

GetDlgItem 它用于获取指定对话框中的子窗口控件,isrectempty判断矩形是否为空矩形,如果不为空且按钮文字为放大,点击后则把文字改为缩小,并将窗口缩小,最开始窗口默认文字为放大,所以不会进入这个判断,会进入下面这个判断

else if (m_larger.IsRectEmpty() == false)
		{
			pbutton->SetWindowTextW(_T("放大"));
			CRect curRect;
			GetWindowRect(curRect);
			SetWindowPos(NULL, curRect.left, curRect.top,
				m_small.Width(), m_small.Height(),
                 SWP_NOMOVE | SWP_NOZORDER);
		}

 setwindowpos第一个参数为窗口的纵坐标,即是否覆盖其他窗口之上,最后一个参数SWP_NOMOVE表示不改变左上角坐标,SWP_NOZORDER设置此标志位时,窗口不受到 Z 轴次序的影响。即不管 Z 轴次序如何,窗口仍然维持原有的次序

SetWindowPos(&wndTopMost, curRect.left, curRect.top,
				m_small.Width(), m_small.Height(), SWP_NOMOVE);

 这里的wndTopMost 参数表示将当前窗口设置为置顶窗口

你可能感兴趣的:(C++大一下学期之MFC,mfc,c++)