+ -
当前位置:首页 → 问答吧 → 请教:关于无边框对话框拉伸的问题

请教:关于无边框对话框拉伸的问题

时间:2011-11-28

来源:互联网

我加入了OnNcHitTest、OnNcLButtonDown、OnSetCursor。三个消息,而且也可以正常的拖动改变对话框大小,但是问题是只有左上角拖动不了,其他地方都可以,这是为什么呀??
BOOL CDlg1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
  ....
else if(nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMRIGHT)
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE))); 
return TRUE;
}

  ....
}

LRESULT CDlg1::OnNcHitTest(CPoint point)
{
CRect rect;
GetWindowRect(&rect);
  ........
else if(point.x <= rect.left+25 && point.y <= rect.top+25)
{
return HTTOPLEFT; /// 这里返回HTTOPLEFT 就不能拖动窗体,而且点击该区域的时候,不能响应OnNcLButtonDown。  
  //return HTBOTTOM; /// 返回HTBOTTOM或者其他的都可以拖动
  }
  .........

}

void CDlg1::OnNcLButtonDown(UINT nHitTest, CPoint point)  
{
else if(nHitTest == HTTOPLEFT)
{
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
}
}

鼠标放到左上角区域的时候 鼠标的样子变成了拉伸的样子,但是单击左键就是不能响应NcLButtonDown消息 其他的都可以 

请问下各位高手,这是哪里出现的问题呢??什么原因能造成这样的样子??麻烦各位了

作者: desehawk   发布时间: 2011-11-28

各位高手帮帮忙...

作者: desehawk   发布时间: 2011-11-28

楼主首先确认一下鼠标位于左上角时究竟有没有响应过,比如说鼠标指针变换,如果有的话那就好好调试代码,如果根本没有响应(指针无变化),那就另当别论了

作者: cjqpker   发布时间: 2011-11-28

作者: VisualEleven   发布时间: 2011-11-28

感谢回复,我可以拉伸窗口,只有左上角的拉伸不好用,其他方向的都可以拉伸。鼠标移动到左上角拉伸区域的时候,鼠标会变成拉动状态,但是调试的时候发现:
else if(point.x <= rect.left+25 && point.y <= rect.top+25)

return HTTOPLEFT; /// 如果这里返回的是 HTTOPLEFT 就不能拖动对话框了 
//return HTBOTTOM; /// 如果返回HTBOTTOM或者其他的都可以拖动
  }

而且在鼠标移动到这个区域的时候,单击左键,OnNcLButtonDown消息响应不了。如果我在左上角区域里返回的是HTTOP或者其他的,OnNcLButtonDown却可以响应。 

作者: desehawk   发布时间: 2011-11-28