Форум программистов, компьютерный форум CyberForum.ru

Процедура обработки сообщений для отдельного контрола - C++

Восстановить пароль Регистрация
 
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
29.07.2010, 10:53     Процедура обработки сообщений для отдельного контрола #1
Доброго времени суток!
Не могу найти информацию как реализовать отдельную процедуру обработки сообщений какого-либо контрола на фотме.
Нашел такой вариант, но ничего не происходит:
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
LRESULT CALLBACK newEditProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
WNDPROC oldEditProcedure;
//
 
oldEditProcedure = (WNDPROC)GetWindowLongPtr (hedit, GWLP_WNDPROC);         
SetWindowLongPtr (hedit, GWLP_WNDPROC, (LONG_PTR)newEditProcedure);
//
 
LRESULT CALLBACK newEditProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
 
    switch (message)
    {
    case WM_KEYUP:
         {
               MessageBox(NULL, "Не появляется!(((", "in newEditProcedure", 0);
         }
         break;
    default:
         if (oldEditProcedure)
         {
              return CallWindowProc (oldEditProcedure, hwnd, message, wParam, lParam);
         }
         else
         {
              return DefWindowProc (hwnd, message, wParam, lParam);
         }
    }
}
Как это можно реализовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2010, 10:53     Процедура обработки сообщений для отдельного контрола
Посмотрите здесь:

C++ Программа для приема сообщений по POP3
C++ Как в функцию обработки сообщений передать параметры?
Класс (объект) для перехвата сообщений своих окон C++
Процедура для массива C++
C++ Функция для обработки строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrrFer
Заблокирован
29.07.2010, 14:02     Процедура обработки сообщений для отдельного контрола #2
cs_from_hell,
сохраняете процедуру обработки по умолчанию
C++
1
2
3
4
5
6
WNDPROC OldWinProc; //стандартная процедура обработки событий
HWND wndThis;
wndThis = CreateWindowEx(WS_EX_ACCEPTFILES,TEXT("BUTTON"),
            TEXT(""),!WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
            x, y, h, w, hForm, 0, (HINSTANCE)GetModuleHandle (0),0);
OldWinProc = (WNDPROC)SetWindowLong(wndThis, GWL_WNDPROC, (LONG)DefWindowProc);
в процедуре обработки обрабатываете те события которые вам надо обрабатывать по особому(из за чего заваривалась каша) и, затем, выполняете
C++
1
return OldWinProc(hwnd, message, wParam, lParam);
чтобы не описывать обработку событий, которые должны быть обработаны стандартно.

Добавлено через 3 минуты
забыл, после того как сохранена процедура обработки событий по умолчанию, надо привязать к созданному окну новую процедуру обработки:
C++
1
2
OldWinProc = (WNDPROC)SetWindowLong(wndThis, GWL_WNDPROC, (LONG)DefWindowProc);
    SetWindowLongPtr (wndThis, GWLP_WNDPROC,(long)ButtonProc);
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
29.07.2010, 19:26  [ТС]     Процедура обработки сообщений для отдельного контрола #3
Спасибо! Это понятно! Еще один вопрос с этим связанный. Что передается в "message", "wParam" и "lParam"?
Понимаю что из этих переменных можно получить много полезной информации, например координаты мыши, код символа при событии WM_CHAR или WM_KEYDOWN например. Как получить все данные что в них передаются?
rrrFer
Заблокирован
29.07.2010, 19:44     Процедура обработки сообщений для отдельного контрола #4
cs_from_hell, посмотри тут
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
29.07.2010, 21:46  [ТС]     Процедура обработки сообщений для отдельного контрола #5
Еще один вопрос возник, в C# к примеру при обработке собыдия KeyPress если символ подходит просто пишем return, если нужно заблокировать его ввод e.Handled = true, как в Апи это сделать? Или придется добавлять стивол в коде(сразу вопрос возник, как к тексту эдита просто добавить текст(Не соединяя полученный от него и добавляемый)?)?

Добавлено через 11 минут
rrrFer, спасибо за ссылку, статья интересная)

Добавлено через 1 час 41 минуту
С одной проблемой разобрался, если надо пропустить символ то передаем сообщение родной процедуре контрола
C++
1
return OldWndProc(hedit, message, wParam, lParam);
Хотелось бы еще побольше узнать о значениях содержащихся в lParam и wParam в разных сообщениях и можно ли так же что-нибудь вытащить из UINT message?
rrrFer
Заблокирован
30.07.2010, 03:36     Процедура обработки сообщений для отдельного контрола #6
cs_from_hell, ищи описание сообщения на http://msdn.microsoft.com там же найдешь значение wparam и lparam для этого сообщения, например http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2010, 22:07     Процедура обработки сообщений для отдельного контрола
Еще ссылки по теме:

C++ Создать функцию для обработки символьных строк. За образец брать библиотечные функции обработки строк языка С, но не применять их в своей функции
Функции для обработки массивов C++
C++ Функции для обработки массивов

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

Или воспользуйтесь поиском по форуму:
cs_from_hell
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
30.07.2010, 22:07  [ТС]     Процедура обработки сообщений для отдельного контрола #7
rrrFer, спасибо! Теперь знаю в какую сторону копть)))
Yandex
Объявления
30.07.2010, 22:07     Процедура обработки сообщений для отдельного контрола
Ответ Создать тему
Опции темы

Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru