Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2014, 18:19   #1
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию Оконная процедура не получает сообщение о выходе мыши за пределы окна

Оконная процедура:
Код:
        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=TTranclate::National("Create horizontal section");
                        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;
 }
 return DefWindowProc(Window, Message, First, Second);
. Что я делаю не так?
taras-proger вне форума Ответить с цитированием
Старый 12.11.2014, 20:39   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от taras-proger Посмотреть сообщение
Что я делаю не так?
Не используете TrackMouseEvent()

Ref:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать сообщение о выходе полей за границы области печати proudbird Microsoft Office Word 1 28.07.2012 18:22
клиент не получает сообщение(winsock) NiCola999 C/C++ Сетевое программирование 4 21.07.2010 12:08
Одна оконная процедура TGrey[WoLf] Win Api 6 22.06.2010 00:30
оконная процедура и вложенный switch Пепел Феникса Общие вопросы C/C++ 3 09.09.2009 18:56
Оконная процедура HunterMan Win Api 5 04.06.2008 12:10