为了拖动控件的大小,我重载了OnNcHitTest,只想它向下、向右、右下拖动。
代码如下:
LRESULT CGridCtrl::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
CPoint pt =point;
ScreenToClient(&pt);
int nFrame=3;
rect.DeflateRect(nFrame,nFrame);
if (!rect.PtInRect(pt))
{
// if (pt.x<=nFrame && pt.y>=rect.bottom-nFrame)
// {
// // return HTBOTTOMLEFT; //左下角拖动大小
// }
// else if (pt.x<=nFrame && pt.y<=nFrame)
// {
// // return HTTOPLEFT; //左上角拖动大小
// }
// else if (pt.x>=rect.right-nFrame && pt.y<=nFrame)
// {
// // return HTTOPRIGHT; //右上角拖动大小
// }
if (pt.x>=rect.right-nFrame && pt.y>=rect.bottom-nFrame)
{
return HTBOTTOMRIGHT; //右下角拖动大小
//HitFlag=1;
}
// else if (pt.x<=nFrame)
// {
// // return HTLEFT; //屏蔽向左拖动大小
// }
// else if (pt.y<=nFrame)
// {
//
// // return HTTOP; //屏蔽向上拖动大小
// }
else if (pt.y>=rect.bottom-nFrame)
{
DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
if ((style & WS_HSCROLL)==0) //未出现垂直滚动条
{
//HitFlag=1;
return HTBOTTOM; //向右拖动大小
}
}
else if (pt.x>=rect.right-nFrame)
{
DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
if ((style & WS_VSCROLL)==0) //未出现水平滚动条
{
//HitFlag=1;
return HTRIGHT; //向下拖动大小
}
}
}
// else
// {
// // return HTCAPTION; //拖动位置
// }
return CWnd::OnNcHitTest(point);
}出现了一个问题,在我的PC上,拖动完成后,控件才会改变大小,即拖动时,只有外框在移动,控件没有移动,鼠标左键UP后,控件更新大小;但是,在其他的PC上,一边拖动,控件大小随即改变,不是在鼠标右键UP后。请问:这时怎么回事?怎么修改成第一种情况?
代码如下:
LRESULT CGridCtrl::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
CPoint pt =point;
ScreenToClient(&pt);
int nFrame=3;
rect.DeflateRect(nFrame,nFrame);
if (!rect.PtInRect(pt))
{
// if (pt.x<=nFrame && pt.y>=rect.bottom-nFrame)
// {
// // return HTBOTTOMLEFT; //左下角拖动大小
// }
// else if (pt.x<=nFrame && pt.y<=nFrame)
// {
// // return HTTOPLEFT; //左上角拖动大小
// }
// else if (pt.x>=rect.right-nFrame && pt.y<=nFrame)
// {
// // return HTTOPRIGHT; //右上角拖动大小
// }
if (pt.x>=rect.right-nFrame && pt.y>=rect.bottom-nFrame)
{
return HTBOTTOMRIGHT; //右下角拖动大小
//HitFlag=1;
}
// else if (pt.x<=nFrame)
// {
// // return HTLEFT; //屏蔽向左拖动大小
// }
// else if (pt.y<=nFrame)
// {
//
// // return HTTOP; //屏蔽向上拖动大小
// }
else if (pt.y>=rect.bottom-nFrame)
{
DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
if ((style & WS_HSCROLL)==0) //未出现垂直滚动条
{
//HitFlag=1;
return HTBOTTOM; //向右拖动大小
}
}
else if (pt.x>=rect.right-nFrame)
{
DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
if ((style & WS_VSCROLL)==0) //未出现水平滚动条
{
//HitFlag=1;
return HTRIGHT; //向下拖动大小
}
}
}
// else
// {
// // return HTCAPTION; //拖动位置
// }
return CWnd::OnNcHitTest(point);
}出现了一个问题,在我的PC上,拖动完成后,控件才会改变大小,即拖动时,只有外框在移动,控件没有移动,鼠标左键UP后,控件更新大小;但是,在其他的PC上,一边拖动,控件大小随即改变,不是在鼠标右键UP后。请问:这时怎么回事?怎么修改成第一种情况?
这个意思?
另外想请问,在向下或者向右拖动时,会有这样的情况:滚动条出现时,不能拖动滚动条,鼠标上去就会显示可以拖动控件,不能点击滚动条,怎么解决?我目前是如果发现滚动条,则不允许拖动控件,可以右下角拖动来满足左右拖动。