Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Docking Для диалогов

1.2K
09 марта 2005 года
BigBug
93 / / 30.07.2004
Народ подскажите пожалуста способ заставить
два диалога слипаться. Наподобие того как это делает Winamp.
(Реч идёт о диологовом приложении и Docking документного приложения здесь вроде не поможет.)
319
09 марта 2005 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by BigBug
Народ подскажите пожалуста способ заставить
два диалога слипаться. Наподобие того как это делает Winamp.
(Реч идёт о диологовом приложении и Docking документного приложения здесь вроде не поможет.)


Один диалог делаешь child другого и при перемещении анализируешь координаты, если надо подгоняешь чтобы он "прилипал" к родительскому, установкой его координат.

1.2K
09 марта 2005 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by xelos

Один диалог делаешь child другого и при перемещении анализируешь координаты, если надо подгоняешь чтобы он "прилипал" к родительскому, установкой его координат.



Тоесть ты предлогаеш мне продолжить то что я уже начал. :)
В принципе это может работать но я столкнулся с одной проблемой.
Окно таскается ведь за строку заголовка.
Но как обработать нажатие отпускание кнопки мыши на заголовке ?
А без этого ничего не выxодит.
Подскажи пожалуйста если знаеш ?

368
09 марта 2005 года
rostyslav
629 / / 13.07.2004
Нужно обработать событие WM_MOVE для окна.

Кроме этого, если можно менять размер окна, тогда доп. нужно обр. событие WM_SIZE.
1.2K
10 марта 2005 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by rostyslav
Нужно обработать событие WM_MOVE для окна.

Кроме этого, если можно менять размер окна, тогда доп. нужно обр. событие WM_SIZE.



OK с WM_MOVE это работает лучше чем с WM_MOVING
но остаётся вопрос. Почему окно которое я тяну после
прилипания и отпускания кнопки мыши дёргается в право лево (около секунды) .
Вчём проблема ?

Это то что я намарал на данный момент:

Код:
#define NP rcNormalPosition
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);
        }
}
368
10 марта 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by BigBug
Почему окно которое я тяну после
прилипания и отпускания кнопки мыши дёргается в право лево (около секунды) .
Вчём проблема ?[/CODE]

?. Почему используешь SetWindowPlacement, а не SetWindowPos, или MoveWindow?

Но смотрел WinAmp. Она обрабатывает WM_MOVING и скорей всего использует ф-ии Begin/*/EndDeferWindowPos

1.2K
10 марта 2005 года
BigBug
93 / / 30.07.2004
Цитата:
Originally posted by rostyslav
?. Почему используешь SetWindowPlacement, а не SetWindowPos, или MoveWindow?


Мне он показался наиболее понятным и удобным в
исспользовании хотя по поводу эффективности не уверен.

Цитата:

Но смотрел WinAmp. Она обрабатывает WM_MOVING и скорей всего использует ф-ии Begin/*/EndDeferWindowPos



Тоесть здесь есть смысл работать на уровне Win API ?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог