我想 作一个 吸附窗口再主窗口中
void CSearchDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point); SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
//::PostMessage( m_CodeTree.m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
::SendMessage(m_CodeTree.m_hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//发送消息到 吸附窗口
}
只要 第一个 用 SendMessage, 那么 吸附窗口 没有一点作用
如果 第一个 用 PostMessage, 那么 只要吸附窗口 动, 主窗口不动改怎么解决
好像有一个 传到 消息的 函数(PumpMessage??), 把消息得到后 再分发出去
这个行吗?
void CSearchDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point); SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
//::PostMessage( m_CodeTree.m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
::SendMessage(m_CodeTree.m_hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//发送消息到 吸附窗口
}
只要 第一个 用 SendMessage, 那么 吸附窗口 没有一点作用
如果 第一个 用 PostMessage, 那么 只要吸附窗口 动, 主窗口不动改怎么解决
好像有一个 传到 消息的 函数(PumpMessage??), 把消息得到后 再分发出去
这个行吗?
中截获这个消息 ,也没有没救了吗???????????
请高手指点
要么只有主窗口动
要么只有 吸附窗口动将 Filter for message available 选成 window 后
有 WM_WINDOWPOSCHANGING 消息
重载这个消息,并 发送 PostMessage( m_CodeTree.m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
直接资源耗尽
这2个窗口都是在同一个 DLL 中
void CSearchDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
GetCursorPos(&m_Prevpoint);//m_Prevpoint是CBmpDlgDlg类中的一个CPoint成员变量。 //::PostMessage( m_CodeTree.m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
//::SendMessage(m_CodeTree.m_hWnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
CDialog::OnLButtonDown(nFlags, point); PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
}
void CSearchDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
ReleaseCapture(); CDialog::OnLButtonUp(nFlags, point);
}void CSearchDialog::OnMouseMove(UINT nFlags, CPoint point)
{
CPoint delpt,pt;
CRect rc;
if(GetCapture() == this)
{
GetCursorPos(&pt);
delpt = pt - m_Prevpoint;
GetWindowRect(&rc);
rc += delpt;
if(rc.top < 10)
rc.top = 0; //::SetWindowPos(m_CodeTree.m_hWnd,NULL,rc.left,rc.top,0,0,SWP_NOSIZE);
//SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,SPIF_SENDCHANGE);
m_Prevpoint = pt;
}
CDialog::OnMouseMove(nFlags, point);
}还是不行, 始终是 只有吸附窗口动, 难道只能用 一个线程吗????
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,SPIF_SENDCHANGE);
这个函数可以解决 虚框 问题
http://www.csdn.net/cnshare/soft/13/13464.shtm
void CMainDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CDialog::OnWindowPosChanging(lpwndpos);
if(pDlg)
{
CRect rect;
GetWindowRect(&rect);
pDlg->SetWindowPos(NULL,rect.right,rect.top,0,0,SWP_NOZORDER|SWP_NOSIZE);
}
}
CMainDlg是主对话框,pDlg是指向依附窗口的指针。CMainDlg的OnLButtonDown中用不着SetCaptue.