Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Оконная процедура не знает, что мышь ушла

13.11.2014, 09:48. Показов 979. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
        RECT        ClientRectangle;
        HDC         Context;
        PAINTSTRUCT Paint;
        std::string s;
        HFONT       Font;
 static bool        MouseOverWindow=false;
 switch (Message)
 {
  case WM_MOUSEMOVE   : if (!MouseOverWindow)
                        {
                         DeleteObject((HBRUSH)SetClassLong(Window, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(0, 255, 0))));
                         MouseOverWindow=true;
                         GetClientRect (Window, &ClientRectangle);
                         InvalidateRect(Window, &ClientRectangle, TRUE);
                        }
  break;
  case WM_MOUSELEAVE  : DeleteObject((HBRUSH)SetClassLong(Window, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(255, 255, 255))));
                        MouseOverWindow=false;
                        GetClientRect (Window, &ClientRectangle);
                        InvalidateRect(Window, &ClientRectangle, TRUE);
  break;
  case WM_PAINT       : GetClientRect (Window, &ClientRectangle);
                        Context=BeginPaint(Window, &Paint);
                        SetBkMode(Context, TRANSPARENT);
                        s=TTranslate::National("Create directory");
                        Font=CreateEasyFont(Context, "Times New Roman", 18.0, 18.0, NormalFont);
                        Font=(HFONT)SelectObject(Context, Font);
                        DrawText(Context, s.c_str(), s.length(), &ClientRectangle, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                        DeleteObject(SelectObject(Context, Font));
                        EndPaint(Window, &Paint);
  break;
  case WM_MOVE        : GetClientRect (Window, &ClientRectangle);
                        InvalidateRect(Window, &ClientRectangle, TRUE);
  break;
  case WM_LBUTTONDOWN : PostMessage(WindowCommand, WM_COMMAND, Message, (LPARAM)Window);
  break;
 }
 return DefWindowProc(Window, Message, First, Second);
}
Событие WM_MOUSELEAVE не срабатывает. Что я делают не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2014, 09:48
Ответы с готовыми решениями:

Оконная процедура
Общий вопрос. Вот при создании окна через функ-ю CreateWindows , через параметр Lparam можно что-то передать в оконную процедуру...

Оконная процедура в классе
Доброго времени суток! Пишу с телефона,так что без кода,постараюсь объяснить все на словах. Пишу окно на АПИ.Суть в том,что хочу...

Оконная процедура в классе
Как вставить простую оконную процедуру в класс?Ставил вот так: class Form { private: static LRESULT WINAPI...

8
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
15.11.2014, 19:13  [ТС]
Решение найдено.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
        LRESULT               CALLBACK WindowProcedureWindowMenuItemCreateLongitudinalSection(      HWND          Window     ,
                                                                                                    UINT          Message    ,
                                                                                                    WPARAM        First      ,
                                                                                                    LPARAM        Second     )
{
        RECT            WindowRectangle;
        RECT            ClientRectangle;
        HDC             Context;
        PAINTSTRUCT     Paint;
        std::string     s;
        HFONT           Font;
        SIZE            Size;
        LONG            Right;
        LONG            Bottom;
        TRACKMOUSEEVENT Track;
 static bool            MouseOverWindow=false;
 switch (Message)
 {
  case WM_MOUSEMOVE   : if (!MouseOverWindow)
                        {
                         DeleteObject((HBRUSH)SetClassLong(Window, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(0, 255, 0))));
                         MouseOverWindow=true;
                         GetClientRect (Window, &ClientRectangle);
                         InvalidateRect(Window, &ClientRectangle, TRUE);
                         Track.cbSize     =sizeof(Track);
                         Track.dwFlags    =TME_LEAVE;
                         Track.hwndTrack  =Window;
                         Track.dwHoverTime=HOVER_DEFAULT;
                         TrackMouseEvent(&Track);
                        }
  break;
  case WM_MOUSELEAVE  : DeleteObject((HBRUSH)SetClassLong(Window, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(RGB(255, 255, 255))));
                        MouseOverWindow=false;
                        GetClientRect (Window, &ClientRectangle);
                        InvalidateRect(Window, &ClientRectangle, TRUE);
  break;
  case WM_PAINT       : GetClientRect (Window, &ClientRectangle);
                        Context=BeginPaint(Window, &Paint);
                        SetBkMode(Context, TRANSPARENT);
                        s=TTranslate::National("Create longitudinal section");
                        Font=CreateEasyFont(Context, "Times New Roman", 18.0, 18.0, NormalFont);
                        Font=(HFONT)SelectObject(Context, Font);
                        GetTextExtentPoint(Context, s.c_str(), s.length(), &Size);
                        DrawText(Context, s.c_str(), s.length(), &ClientRectangle, DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                        DeleteObject(SelectObject(Context, Font));
                        EndPaint(Window, &Paint);
                        Right =Size.cx+4;
                        Bottom=Size.cy+10;
                        if ((ClientRectangle.right <Right )||
                            (ClientRectangle.bottom<Bottom))
                        {
                         GetWindowRect (Window, &WindowRectangle);
                         ScreenToClient(WindowMenuHeader, WindowRectangle);
                         MoveWindow(Window, WindowRectangle.left, WindowRectangle.top, Right+2, Bottom+2, TRUE);
                         PostMessage(WindowMenu, WM_COMMAND, WM_SIZE, 0);
                        }
  break;
  case WM_MOVE        : GetClientRect (Window, &ClientRectangle);
                        InvalidateRect(Window, &ClientRectangle, TRUE);
  break;
 }
 return DefWindowProc(Window, Message, First, Second);
}
Добавлено через 19 секунд
Заключается в строках 25-29.
0
16.11.2014, 11:34

Не по теме:

Цитата Сообщение от taras atavin Посмотреть сообщение
Решение найдено.
Ну слава богу..

0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
16.11.2014, 14:13
castaway, зайдите в свой блог, когда вы будете не обременены временем.
0
16.11.2014, 16:26

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
castaway, зайдите в свой блог, когда вы будете не обременены временем.
Ок. Просто у меня уведомления о записях в блоге не приходят.

0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
16.11.2014, 17:58
castaway, в блогах нельзя загружать файлы, вот весь архив: XXX.7z
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
16.11.2014, 18:02
Вот экран, который появляется у меня:
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
16.11.2014, 19:07  [ТС]
programina, это что?
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
16.11.2014, 19:22
taras atavin, у castaway операционка не работает, вернее сказать работает, но только у него одного. https://www.cyberforum.ru/blog... g2907.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2014, 19:22
Помогаю со студенческими работами здесь

Оконная процедура дочернего окна - обработчик кнопки "Close" не работает
Здравствуйте! В своей программе создала дочернее окно, и создала оконную процедуру для него. А в нем написала обработчик кнопки...

Может ли оконная процедура различить, изменён ли размер окна функцией MoveWindow, или мышью за рамку окна?
Стиль WS_BORDER | WS_SIZEBOX | WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_THICKFRAME | WS_VISIBLE.

Своя процедура не знает о компонентах формы
Здравствуйте, создал свою процедуру tekst, объявил в паблике формы 1: { TForm1 } TForm1 = class(TForm) Button1: TButton;...

Debian 8 и "Куда ушла память"(утечка, кэш, ешё что-то?)
В общем. Я ввожу команду &quot;htop&quot; и вижу &quot;1820&quot; мб. Ок. Ввожу &quot;top&quot; - вижу ~&quot;13 гигов&quot; занято(рисунок прилагаю). Тоже самое говорит...

Как подключить новую мышь, что бы комп распознавал её как мышь, а не как USB Device.?
Здравствуйте! Я уже не знаю куда мне обращаться.. не кто не знает как решить мою проблему. Купил я вчера мышку X7 Oscar neon gaming...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru