Поиск:

Ответ в темуСоздание новой темы Создание опроса
> drag и drop елементов управления, как таскать объекты CWnd по форме..... 
:(
    Опции темы
Earnest
Дата 27.11.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Тогда сложнее. Из OnMouseMove нужно опрашивать окно под курсором, не желает ли оно принять объект. Для этого нужно ввести свое сообщение, в wParam, lParam можно передать дополнительные параметры, а в случае отказа должен возвращаться 0, чтобы окна, не обрабатывающие твое сообщение, адекватно реагировали. Но, как ты понимаешь, совсем чужое окно твое сообщение не примет.


--------------------
...
PM   Вверх
OverBug
Дата 29.11.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

Репутация: нет
Всего: 1



интересно... но ведь под курсором то окно которое я тащу.... перетаскиваю.... как получить то которое ниже?
и если я буду проверять на области в которых дозволено бросать объект.... надо ведь еще и массив этих координат не только хранить, но и поддерживать в актуальном состоянии. а как это лучше сделать?
PM MAIL ICQ   Вверх
Earnest
Дата 29.11.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Нет, если ты спросишь WindowFromPoint, то тебе вернут окно верхнего уровня (не Child). Если хочешь получить child, нужно опрашивать ChildWindowFromPoint.

Каждое окно, которое может принять объект, пусть и хранит само свои области.


--------------------
...
PM   Вверх
OverBug
Дата 29.11.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 13.4.2006
Где: г.Пенза, Пензенск ой обл.

Репутация: нет
Всего: 1



понятненько.... спасибо.... как будет готова полная версия выложу ее на всеобщее обозрение.... smile 
PM MAIL ICQ   Вверх
CityAC
Дата 15.3.2007, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Тоже столкнулся с такой задачей.

Прочитал эту ветку.
Никак не могу понять.
Если нужно таскать кнопку, то она же не реагирует на события мыши прописанные для диалога.
Код

//При нажатии на кнопку мы никогда в этот обработчик не попадем
// а попадем в обработчик события кнопки
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
    
    SetCapture()
    m_bDrag = true;
    // TODO: Add your message handler code here and/or call default

    CDialog::OnLButtonDown(nFlags, point);
    
}

Так как же таскать кнопки.
Что для каждой кнопки нужно писать свой обработчик, а если у меня из 32 шт?

--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Earnest
Дата 15.3.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Лови в PreTranslateMessage диалога.


--------------------
...
PM   Вверх
CityAC
Дата 15.3.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Код

BOOL CregionDlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message==    WM_LBUTTONDOWN)
    {
        pMsg->lParam;//?????????????????
        
    }        

    // TODO: Add your specialized code here and/or call the base class

    return CDialog::PreTranslateMessage(pMsg);
}


Как из pMsg извлечь информацию кто послал сообщение, т.е. какая кнопка была нажата?
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
CityAC
Дата 15.3.2007, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Я сделал так 
Код

BOOL CregionDlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message==    WM_LBUTTONDOWN)
    {
        CButton* pWnd = (CButton*)GetDlgItem(IDOK);
        CRect rect;
        pMsg->pt;
        pWnd->GetClientRect(rect);
        pWnd->ClientToScreen(rect);
        if(PtInRect(rect, pMsg->pt))
            MessageBox("You pressed OK");
        
    }    

    // TODO: Add your specialized code here and/or call the base class

    return CDialog::PreTranslateMessage(pMsg);
}

но получается нужно этот код прописывать для всех кнопок, которые планируешь таскать.
Наверно все таки нужно вытягивать инфу из pMsg/
Подскажите как smile 

--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Earnest
Дата 15.3.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



В сообщении нет такой информации.
Но ты элементарно можешь найти, над каким контролом в настоящий момент находится мышь: ChildWindowFromPoint (что-то в этом роде).


--------------------
...
PM   Вверх
CityAC
Дата 15.3.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



да спасибо.
Я вычитал эту функцию в вашем же посте в этой ветке.
Но что значит Child  в данном случае. кнопка ОК  - это child?
Код

BOOL CregionDlg::PreTranslateMessage(MSG* pMsg)
{
.....
         // после выполнении след кода pWnd  равно 0х0000000
    CWnd* pWnd = ChildWindowFromPoint(pMsg->pt);
        //а если сделать так то вроде работает
         CWnd* pWnd = WindowFromPoint(pMsg->pt);
       
        
}


--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
zkv
Дата 15.3.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(CityAC @  15.3.2007,  16:47 Найти цитируемый пост)
Но что значит Child  в данном случае. кнопка ОК  - это child?

кнопка Ок - это child-окно своего диалога
также child-окнами диалога являются все остальные контролы этого диалога
PM MAIL   Вверх
CityAC
Дата 16.3.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: 1
Всего: 1



Цитата

да спасибо.
Я вычитал эту функцию в вашем же посте в этой ветке.
Но что значит Child  в данном случае. кнопка ОК  - это child?код C++
Код



  BOOL CregionDlg::PreTranslateMessage(MSG* pMsg)
{
.....
         // после выполнении след кода pWnd  равно 0х0000000
    CWnd* pWnd = ChildWindowFromPoint(pMsg->pt);
        //а если сделать так то вроде работает
         CWnd* pWnd = WindowFromPoint(pMsg->pt);
       
        
}



Разобрался, нужно было pMsg->pt привести к клиетским координатам
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
13dreams
Дата 4.7.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.7.2010

Репутация: нет
Всего: нет



Простите, как изменить координаты самой кнопки использую вышеизложенный код? (как её перерисовать)
PM MAIL   Вверх
Earnest
Дата 5.7.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Перечитывать древний топик сильно влом, поэтому отвечу "наугад" - MoveWindow?


--------------------
...
PM   Вверх
13dreams
Дата 5.7.2010, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 1.7.2010

Репутация: нет
Всего: нет



Задача состоит в том, чтобы пользователь мог перетащить созданную кнопку по окну

я хотел спросить где и как реализуется само изменение её координат
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.