我想 作一个 吸附窗口再主窗口中 
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??), 把消息得到后 再分发出去
这个行吗?

解决方案 »

  1.   

    http://www.programfan.com/showarticle.asp?id=2154
      

  2.   

    问题是我的主对话框是在 DLL 中, 没有 WM_WINDOWPOSCHANGING 这个消息选直接重载 中没有 WM_WINDOWPOSCHANGING , 我在 PreTranslateMessage(MSG* pMsg)
    中截获这个消息 ,也没有没救了吗???????????
    请高手指点
      

  3.   

    你继承一个CWnd,不显示就可以了吗
      

  4.   

    通过另一个窗口的句柄 建立一个CWND对象指针,用这个指针来控制不行么
      

  5.   

    感觉和 最开始的问题一样
    要么只有主窗口动
    要么只有 吸附窗口动将 Filter for message available 选成 window 后
    有 WM_WINDOWPOSCHANGING 消息
    重载这个消息,并 发送 PostMessage( m_CodeTree.m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
    直接资源耗尽
      

  6.   

    主窗口动,一个旁边的窗口也跟着主窗口动
    这2个窗口都是在同一个 DLL 中
      

  7.   

    又改造代码:
    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);
    }还是不行, 始终是 只有吸附窗口动, 难道只能用 一个线程吗????
      

  8.   

    MFC生成的窗口在拖动的时候总是只有一个虚框在动,等放开鼠标以后才会真正地移动窗口。而winamp之类的程序窗口在移动的时候却是始终可以见的,这个问题你解决了吗?
      

  9.   

    根据资料说
    SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,SPIF_SENDCHANGE);
    这个函数可以解决 虚框 问题
      

  10.   

    看看这个:
    http://www.csdn.net/cnshare/soft/13/13464.shtm
      

  11.   

    引用那个类也不行难道 dll 中的 对话框就不能实现 吸附功能
      

  12.   

    我做了一下,可以成功:
    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.