工控编程吧

标题: 上位机MFC如何在桌面上停靠对话框 [打印本页]

作者: qq263946146    时间: 2019-7-22 13:02
标题: 上位机MFC如何在桌面上停靠对话框
将程序界面停靠在桌面边上,这功能在早期的软件非常常见。
如何实现呢?
当前我们就以实现停靠在桌面左边和右边功能,来看看如何实现
方法很简单,主要是在窗口位置更改的通知函数内判断窗口的位置与设置窗口的位置来实现的。
首先定义两个变量来保存窗口的尺寸
        int m_nWidth;
        int m_nHeigh;

再初始化变量与窗口位置等
                //对话框的宽和高
        m_nWidth = 220;
        m_nHeigh = 550;

        //获得桌面工作区大小
        CRect rect;
        SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);

        //对话框的初始位置
        int x = rect.left + rect.Width() / 2 - m_nWidth / 2;
        int y = rect.top + rect.Height() / 2 - m_nHeigh / 2;
        MoveWindow(x, y, m_nWidth, m_nHeigh);

最后 是添加窗口的消息WM_WINDOWPOSCHANGING处理函数
在函数内实现窗口的停靠

void CDemoDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
        CDialog::OnWindowPosChanging(lpwndpos);
       
        //获得桌面工作区大小
        CRect rect;
        SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);

        //左停靠
        if (abs(lpwndpos->x - rect.left) <= 50)
        {
                lpwndpos->x = rect.left;
                lpwndpos->y = rect.top;
                lpwndpos->cy = rect.Height();
        }
        //右停靠
        else if (abs(lpwndpos->x + lpwndpos->cx-rect.right) <= 50)
        {
                lpwndpos->x = rect.right - lpwndpos->cx;
                lpwndpos->y = rect.top;
                lpwndpos->cy = rect.Height();
        }
        else
        {
                lpwndpos->cy = m_nHeigh;
        }

        if (lpwndpos->y < rect.top)
        {
                lpwndpos->y = rect.top;
        }
}

(, 下载次数: 0)