Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ON_WM_MOUSEMOVE 
:(
    Опции темы
xTr1m
Дата 26.1.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Наверное, уже я порядком надоел своими вопросами, но уж простите меня smile В книжках ответы на практические вопросы я не нахожу. Вот если нужно сделать несколько обработчиков клика по разным кнопкам, то это можно сделать так:
Код

BEGIN_MESSAGE_MAP()
ON_COMMAND(IDC_BUTTON1, function1)
ON_COMMAND(IDC_BUTTON2, function2)
ON_COMMAND(IDC_BUTTON3, function3)
ON_COMMAND(IDC_BUTTON4, function4)
END_MESSAGE_MAP()

а если нужно сделать тоже самое (четыре функции для четырех кнопок), но для события WM_MOUSEMOVE? Сам ничего не нашел smile
PM MAIL WWW ICQ   Вверх
chaos
Дата 26.1.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



все просто!
Берешь создаешь свою кнопку, те создаешь класс наследуя от CButton
Код

//cpp
class CMyButton : public CButton
{
public:
    CMyButton();

    //{{AFX_VIRTUAL(CMyButton)
    //}}AFX_VIRTUAL

    virtual ~CMyButton();

protected:
    //{{AFX_MSG(CMyButton)
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

//h
CMyButton::CMyButton()
{
}

CMyButton::~CMyButton()
{
}

BEGIN_MESSAGE_MAP(CMyButton, CButton)
    //{{AFX_MSG_MAP(CMyButton)
    ON_WM_MOUSEMOVE()
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMyButton::OnMouseMove(UINT nFlags, CPoint point) 
{
        
    CButton::OnMouseMove(nFlags, point);
}




Это сообщение отредактировал(а) chaos - 26.1.2006, 13:51
PM WWW   Вверх
xTr1m
Дата 8.2.2006, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я, наверное, не так объяснил. Есть 2 кнопки, я хочу, чтобы они по разному реагировали на событие OnMouseMove. Т.е. при подведении мышки на одну кнопку выводилось сообщения типа "MouseMove для первой кнопки", при подведении на другую "MouseMove для второй кнопки",
PM MAIL WWW ICQ   Вверх
Dreamer_0x01
Дата 8.2.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Из вышеприведенного chaos класса в обработчике события MOUSEMOVE можно послать пользовательское сообщение родителю, в котором передавать информацию о конретном экземпляре кнопки. Например, ее ID.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
takedo
Дата 8.2.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



xTr1m Если после создания каждой кнопки вызвать
::SetWindowLong(кнопка.GetSafeHwnd(),GWL_USERDATA, номер кнопки);
то в OnMove можно:
DWORD номер кнопки = ::GetWindowLong(кнопка.GetSafeHwnd(),GWL_USERDATA);

PS.: Читайте Мешков, Тихомиров. Без ентой кники - пипец(без знания англицкого точно) smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
xTr1m
Дата 8.2.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А вот я тут прочитал, что есть такая фукнция как GetCurrentMessage. Попытался применить ее для своей проблемы, но ничего не получается Почему?
Код

void CTestDlg::OnMouseMove()
{
    CButton *button = (CButton*)GetDlgItem(IDC_BUTTON1);
    const MSG *pMsg = GetCurrentMessage();
    if(pMsg->hwnd == button->GetSafeHwnd ())
        AfxMessageBox("Mouse on button 1");
}

PM MAIL WWW ICQ   Вверх
Earnest
Дата 8.2.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Потому что сообщение MOUSEMOVE приходит не диалогу, а кнопке.
Если хочешь обрабатывать в диалоге, перекрой PreTranslateMessage.
Но тот факт, что мышь находится над кнопкой, лучше проверять явно (ChildWindowFromPoint, например), а не сравнением hwnd.


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


 




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


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

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