使一个非模态对话框随另一个对话框的移动而移动

来源:互联网 发布:简单c语言代码 编辑:程序博客网 时间:2024/06/09 15:48

主对话框A, 非模态对话框B。 使移动A时, B 随着A 的移动而移动


在A中添加B 的指针变量

mydlg *dlg ;


某个按钮显示代码

       dlg = new mydlg();
dlg->Create(IDD_DIALOG1, this);
dlg->ShowWindow(SW_SHOW| SW_NORMAL);

 A 中添加虚函数



LRESULT CheadMoveDlgDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
switch(message)
{
case WM_MOVING:
{
if(m_bBtnDn)
{ HWND hwnd;
CRect rtWnd;
dlg->GetClientRect(&rtWnd);
ClientToScreen(&rtWnd);

::SetWindowPos(dlg->GetSafeHwnd(), NULL, rtWnd.left, rtWnd.top, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
}//::GetDlgItem(parentHwnd,IDC_DIALOG);
else
{
m_bBtnDn = false;
}
}
break;
case  WM_NCLBUTTONDOWN:
m_bBtnDn = true;
break;
default:
break;
}
return CDialogEx::WindowProc(message, wParam, lParam);
}



注意:

dlg->GetClientRect(&rtWnd);
       ClientToScreen(&rtWnd);

     ::SetWindowPos(dlg->GetSafeHwnd(), NULL, rtWnd.left, rtWnd.top, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);

    是根据B 对话框一直在B 相对A的初始位置

若改以下:

GetClientRect(&rtWnd);
ClientToScreen(&rtWnd);

::SetWindowPos(dlg->GetSafeHwnd(), NULL, rtWnd.left, rtWnd.top, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);

是B和A并排移动。具体可以看一下参数,根据需求修改

0 0
原创粉丝点击