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
参数表示将当前窗口设置为置顶窗口