Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщения от встроенного скролла, WinAPI 
V
    Опции темы
EarlBrooks
Дата 20.9.2017, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как отловить сообщения от встроенного скролла (см рисунок)

Добавлено @ 11:37
Теперь появилась проблема статик со встроенным скроллом не шлет сообщений.
Если установлен SS_NOTIFY то приходит сообщение WM_COMMAND
Код

LRESULT CALLBACK WndProcTable(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
   HDC hdc;
   HWND hparent;
   hparent = GetParent(hwnd);
   switch (message)
   {
   case WM_CREATE:
       hdc = GetDC(hwnd);
       ReleaseDC(hwnd, hdc);
       return 0;
   case WM_SIZE:
       TableResize(hwnd);
       return 0;
   case WM_KEYDOWN:
       MessageBox(NULL, "WM_KEYDOWN", "Message", MB_OK);  // <-- сообщение не приходит
       switch (LOWORD(wparam))
       {
       case VK_TAB:
           TableFocus();
           break;
       case VK_ESCAPE:
           SendMessage(hwnd, WM_CLOSE, NULL, NULL);
           break;
       }
       return 0;
   case WM_HSCROLL :
       MessageBox(NULL, "WM_HSCROLL", "Message", MB_OK);  // <-- сообщение не приходит
       return 0;
   case WM_VSCROLL :
       MessageBox(NULL, "WM_VSCROLL", "Message", MB_OK);  // <-- сообщение не приходит
       return 0;
 
   case WM_COMMAND:
       switch (LOWORD(wparam))
       {
       case 1000:
           switch (HIWORD(wparam))
           {
           case LBN_SELCHANGE:
               TableListboxChange(hparent);
               break;
           }
           break;
       case 1001:
           MessageBox(NULL, "1001", "Message", MB_OK);  // <-- сообщение приходит !!! но как взять например SB_LINELEFT
           //switch (HIWORD(wparam))
           //{
           //case SB_LINELEFT:
           //    MessageBox(NULL, "SB_LINELEFT", "Message", MB_OK);
           //    break;
           //}
           break;
       case 1002:
           //
           break;
       case 1003:
           //
           break;
       case 1004:
           SendMessage(hwnd, WM_CLOSE, NULL, NULL);
           break;
       }
       return 0;
   case WM_LBUTTONDOWN:
       TableLButtonDown(hwnd);
       return 0;
   case WM_LBUTTONUP:
       TableLButtonUp(hwnd);
       return 0;
   case WM_MOUSEMOVE:
       TableMouseMove(hwnd, message, wparam, lparam);
       return 0;
   case WM_PAINT:
       TablePaint(hwnd);
       return 0;
   case WM_ERASEBKGND:
       return 0;
   case WM_CLOSE:
       EnableWindow(hparent, TRUE);
       SetFocus(hparent);
       BringWindowToTop(hparent);
       ShowWindow(hwnd, SW_HIDE);
       DestroyWindow(hwnd);
       return 0;
   }
   return DefWindowProc(hwnd, message, wparam, lparam);
}
 
LRESULT CALLBACK WndProcTableSubclassing(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
   int i, n;
   HWND hwndfocus;
   n = GetDlgCtrlID(hwnd) - 1000;
   switch (message)
   {
   case WM_KEYDOWN:
       switch (LOWORD(wparam))
       {
       case VK_TAB:
           TableFocus();
           break;
       case VK_ESCAPE:
           SendMessage(GetParent(e::tablehwnd[0]), WM_CLOSE, NULL, NULL);
           break;
       }
       break;
   case WM_MOUSEMOVE:
       TableMouseMove(GetParent(e::tablehwnd[0]), message, wparam, lparam);
       break;
   case WM_NCMOUSEMOVE:
       TableMouseMove(GetParent(e::tablehwnd[0]), message, wparam, lparam);
       break;
   case WM_LBUTTONUP:
       hwndfocus = GetFocus();
       for (i=0; i<e::tablehwndubound; i++)
       {
           if (e::tablehwnd[i] == hwndfocus) 
           {
               e::focus = i;
           }
       }
       break;
   case WM_HSCROLL:
       MessageBox(NULL, "Subclassing - WM_HSCROLL", "Message", MB_OK);  // <-- сообщение не приходит
       break;
   case WM_VSCROLL:
       MessageBox(NULL, "Subclassing - WM_VSCROLL", "Message", MB_OK);  // <-- сообщение не приходит
       break;
   }
   return CallWindowProc(e::tablewndproc[n], hwnd, message, wparam, lparam);
}



Это сообщение отредактировал(а) EarlBrooks - 20.9.2017, 11:39

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  pic_1.GIF 57,12 Kb
PM MAIL   Вверх
EarlBrooks
Дата 20.9.2017, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



результат

Как найти сообщения WM_HSCROLL и WM_VSCROLL и получить SB_LINELEFT, SB_LINERIGHT и т.д ?

Это сообщение отредактировал(а) EarlBrooks - 20.9.2017, 11:43

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  pic_2.GIF 14,08 Kb
PM MAIL   Вверх
EarlBrooks
Дата 21.9.2017, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Похоже проблема в статике. Потому как если заменить статик на кнопку, то сообщения от скролла посылаются.
Как вариант - отказаться от статика и заменить своим окном.
Вопрос решен.
PM MAIL   Вверх
Google
  Дата 26.5.2019, 10:28 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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