正在写一个模拟splitter的东西,使用按钮充当分隔条(上下分隔型的),现遇到2个问题。问题代码如下:
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
if (this->ifBtnDown)
{
this->GetClientRect(&rect);
this->MoveWindow( rect.left, point.y, rect.right-rect.left, rect.bottom-rect.top, TRUE);
return;
}
CButton::OnMouseMove(nFlags,point);
//................
}
问题描述:
1.我拖动按钮的时候,是希望按钮左右不移动,上下移动。但是我用上面的方式转换,按钮都会往左偏移一段。而且上下位置相差很大。
2.我希望在按钮CMyButton::OnLButtonUp(鼠标左键放开)中释放我按钮的焦点。
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
if (this->ifBtnDown)
{
this->GetClientRect(&rect);
this->MoveWindow( rect.left, point.y, rect.right-rect.left, rect.bottom-rect.top, TRUE);
return;
}
CButton::OnMouseMove(nFlags,point);
//................
}
问题描述:
1.我拖动按钮的时候,是希望按钮左右不移动,上下移动。但是我用上面的方式转换,按钮都会往左偏移一段。而且上下位置相差很大。
2.我希望在按钮CMyButton::OnLButtonUp(鼠标左键放开)中释放我按钮的焦点。
CButton::OnMouseMove(nFlags,point);
这句话必要否?必要的话一般放在最上面还是哪里?
ClientToScreen(&rect);
ClientTopScreen(&point);
或者客户窗口坐标
ScreenToClient(&rect);
ScreenToClient(&point);
放在最后吧子类没有处理的其他消息交给父类去处理
m_button.GetWindowRect(&rect);
ScreenToClient(&rect);
m_button.MoveWindow(.......);
this->GetWindowRect(&rect);
this->ScreenToClient(&rect);
this->MoveWindow(rect.left,point.y,rect.right-rect.left,rect.bottom-rect.top,TRUE);
return;
但我经过转换后rect.left总是等于0,而point.y永远等于1.不知道为啥
坐标转换函数得换成按钮的父窗口对象现在就是CPoint那个不知道为啥有问题了。point.y永远等于1