Docking Для диалогов
два диалога слипаться. Наподобие того как это делает Winamp.
(Реч идёт о диологовом приложении и Docking документного приложения здесь вроде не поможет.)
Народ подскажите пожалуста способ заставить
два диалога слипаться. Наподобие того как это делает Winamp.
(Реч идёт о диологовом приложении и Docking документного приложения здесь вроде не поможет.)
Один диалог делаешь child другого и при перемещении анализируешь координаты, если надо подгоняешь чтобы он "прилипал" к родительскому, установкой его координат.
Один диалог делаешь child другого и при перемещении анализируешь координаты, если надо подгоняешь чтобы он "прилипал" к родительскому, установкой его координат.
Тоесть ты предлогаеш мне продолжить то что я уже начал. :)
В принципе это может работать но я столкнулся с одной проблемой.
Окно таскается ведь за строку заголовка.
Но как обработать нажатие отпускание кнопки мыши на заголовке ?
А без этого ничего не выxодит.
Подскажи пожалуйста если знаеш ?
Кроме этого, если можно менять размер окна, тогда доп. нужно обр. событие WM_SIZE.
Нужно обработать событие WM_MOVE для окна.
Кроме этого, если можно менять размер окна, тогда доп. нужно обр. событие WM_SIZE.
OK с WM_MOVE это работает лучше чем с WM_MOVING
но остаётся вопрос. Почему окно которое я тяну после
прилипания и отпускания кнопки мыши дёргается в право лево (около секунды) .
Вчём проблема ?
Это то что я намарал на данный момент:
void CDockingDlg::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
if(!m_pDlg || !m_pDlg->IsWindowVisible())
return;
WINDOWPLACEMENT mWndPl,sWndPl;
GetWindowPlacement(&mWndPl);
m_pDlg->GetWindowPlacement(&sWndPl);
if(mWndPl.NP.right<=sWndPl.NP.left && sWndPl.NP.left - mWndPl.NP.right <15)
if(mWndPl.NP.top < sWndPl.NP.bottom && mWndPl.NP.bottom > sWndPl.NP.top)
{
mWndPl.NP.left=(mWndPl.NP.left-mWndPl.NP.right)+sWndPl.NP.left;
mWndPl.NP.right=sWndPl.NP.left;
SetWindowPlacement(&mWndPl);
Sleep(200);
}
}
Почему окно которое я тяну после
прилипания и отпускания кнопки мыши дёргается в право лево (около секунды) .
Вчём проблема ?[/CODE]
?. Почему используешь SetWindowPlacement, а не SetWindowPos, или MoveWindow?
Но смотрел WinAmp. Она обрабатывает WM_MOVING и скорей всего использует ф-ии Begin/*/EndDeferWindowPos
?. Почему используешь SetWindowPlacement, а не SetWindowPos, или MoveWindow?
Мне он показался наиболее понятным и удобным в
исспользовании хотя по поводу эффективности не уверен.
Но смотрел WinAmp. Она обрабатывает WM_MOVING и скорей всего использует ф-ии Begin/*/EndDeferWindowPos
Тоесть здесь есть смысл работать на уровне Win API ?