将程序界面停靠在桌面边上,这功能在早期的软件非常常见。
如何实现呢?
当前我们就以实现停靠在桌面左边和右边功能,来看看如何实现
方法很简单,主要是在窗口位置更改的通知函数内判断窗口的位置与设置窗口的位置来实现的。
首先定义两个变量来保存窗口的尺寸
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;
}
}
上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例 经历1年的编程与录制点击进入查看
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料! 
|