关于在对话框中拖动按钮的功能,该如何处理
关于在对话框中拖动按钮的功能
我想在对话框中动态添加若干个按钮,并且能够在执行的时候随意拖动这些按钮到客户区的任意地方,我也看了一些网友的实现,但功能还是没能完成,请做过这个功能的达人指教一下。下面是我的方法:
我继承了一个CButton类 CBtnEx,然后给CBtnEx添加了
void CBtnEx::OnMouseMove(UINT nFlags, CPoint point)
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
void CBtnEx::OnLButtonUp(UINT nFlags, CPoint point) 响应函数,具体代码如下:
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
{
m_lButtonDown=TRUE;//判断左键是否按下
CButton::OnLButtonDown(nFlags, point);
}
void CBtnEx::OnLButtonUp(UINT nFlags, CPoint point)
{
m_lButtonDown=FALSE;
CButton::OnLButtonUp(nFlags, point);
}
void CBtnEx::OnMouseMove(UINT nFlags, CPoint point)
{
POINT pt;
GetCursorPos(&pt);
CRect rt,clientRt;
GetWindowRect(&rt);
if (rt.PtInRect(pt) && m_lButtonDown ==TRUE)
{
GetClientRect(&clientRt);
clientRt.left+=point.x;
clientRt.right+=point.x;
clientRt.top+=point.y;
clientRt.bottom+=point.y;
MoveWindow(&clientRt);
}
CButton::OnMouseMove(nFlags, point);
}
我的dlg类是CDragBtnDlg,里面有动态添加按钮的实现,具体代码如下:
void CDragbtnDlg::OnAddbtn()
{
UpdateData(TRUE);
btn=new CBtnEx();
btn-> Create(m_strRegion,WS_CHILD | WS_VISIBLE,CRect(0,0,100,30),this,1);
}
void CDragbtnDlg::OnClose()
{
if(btn)
delete btn;
CDialog::OnClose();
}
基本上就是这样了,但是功能实现不了,请各位经验网友指点一下,把你们的代码贴上来吧,谢了
------解决方案--------------------
最方便的方法,和移动对话框一样,我测试过的
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
{
//先做LButtonDown要做的事情
......
//然后
PostMessage(WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARAM (point.x , point. y ) ) ;
}
8 fen O!
我想在对话框中动态添加若干个按钮,并且能够在执行的时候随意拖动这些按钮到客户区的任意地方,我也看了一些网友的实现,但功能还是没能完成,请做过这个功能的达人指教一下。下面是我的方法:
我继承了一个CButton类 CBtnEx,然后给CBtnEx添加了
void CBtnEx::OnMouseMove(UINT nFlags, CPoint point)
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
void CBtnEx::OnLButtonUp(UINT nFlags, CPoint point) 响应函数,具体代码如下:
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
{
m_lButtonDown=TRUE;//判断左键是否按下
CButton::OnLButtonDown(nFlags, point);
}
void CBtnEx::OnLButtonUp(UINT nFlags, CPoint point)
{
m_lButtonDown=FALSE;
CButton::OnLButtonUp(nFlags, point);
}
void CBtnEx::OnMouseMove(UINT nFlags, CPoint point)
{
POINT pt;
GetCursorPos(&pt);
CRect rt,clientRt;
GetWindowRect(&rt);
if (rt.PtInRect(pt) && m_lButtonDown ==TRUE)
{
GetClientRect(&clientRt);
clientRt.left+=point.x;
clientRt.right+=point.x;
clientRt.top+=point.y;
clientRt.bottom+=point.y;
MoveWindow(&clientRt);
}
CButton::OnMouseMove(nFlags, point);
}
我的dlg类是CDragBtnDlg,里面有动态添加按钮的实现,具体代码如下:
void CDragbtnDlg::OnAddbtn()
{
UpdateData(TRUE);
btn=new CBtnEx();
btn-> Create(m_strRegion,WS_CHILD | WS_VISIBLE,CRect(0,0,100,30),this,1);
}
void CDragbtnDlg::OnClose()
{
if(btn)
delete btn;
CDialog::OnClose();
}
基本上就是这样了,但是功能实现不了,请各位经验网友指点一下,把你们的代码贴上来吧,谢了
------解决方案--------------------
最方便的方法,和移动对话框一样,我测试过的
void CBtnEx::OnLButtonDown(UINT nFlags, CPoint point)
{
//先做LButtonDown要做的事情
......
//然后
PostMessage(WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARAM (point.x , point. y ) ) ;
}
8 fen O!