如何将窗口移动限定在一个范围内?

yecheng_110 2007-05-18 03:21:55
如何将窗口限定在一个范围内?
用的是WTL编程,我现在处理的是WM_MOVE或WM_MOVING,能够限定窗口在一个范围中移动,但是在处理超出范围的时候,窗口抖动厉害。
有没有成熟的做法?
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
swift19221 2010-08-19
  • 打赏
  • 举报
回复
说的什么,不明白。。。
dayong576 2007-05-18
  • 打赏
  • 举报
回复
前面可以加上你的CDlg &dlg;
dlg.SetWindowPos(&wndTopMost, xPos, yPos, m_Width, m_Hight, SWP_NOSIZE );
dayong576 2007-05-18
  • 打赏
  • 举报
回复
不太明白了

你用SetWindowPos(&wndTopMost, xPos, yPos, m_Width, m_Hight, SWP_NOSIZE );
试试
yecheng_110 2007-05-18
  • 打赏
  • 举报
回复
MESSAGE_HANDLER(WM_MOVE,OnMove)

LRESULT CDockWindow::OnMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
{
int xPos;
int yPos;
xPos = (int)(short) LOWORD(lParam); // horizontal position
yPos = (int)(short) HIWORD(lParam); // vertical position

BOOL bRemove = FALSE;
if(xPos < 0)
{
bRemove = TRUE;
xPos = 0;
}
if(yPos < 0)
{
bRemove = TRUE;
yPos = 0;
}
if(xPos + m_Width > m_ScreenWidth)
{
bRemove = TRUE;
xPos = m_ScreenWidth - m_Width;
}
if(yPos + m_Hight > m_ScreenHight)
{
bRemove = TRUE;
yPos = m_ScreenHight - m_Hight;
}

if(bRemove)
::SetWindowPos(m_hWnd, HWND_TOPMOST,xPos,yPos,m_Width,m_Hight,SWP_NOSIZE);
//这个也会抖动
//MoveWindow(xPos,yPos,m_Width,m_Hight);
else
bHandled = FALSE;

return 0;
}

dayong576 2007-05-18
  • 打赏
  • 举报
回复
俩个对比一下看看有什么不同
dayong576 2007-05-18
  • 打赏
  • 举报
回复
SetWindowPos(&wndTop, 18, 20, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
dayong576 2007-05-18
  • 打赏
  • 举报
回复
SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
看看对你有帮助么?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧