Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Собственный обработчик, Направте на путь истинный... 
:(
    Опции темы
Coocky
Дата 12.4.2004, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Как говорит мой препод,если что-то не нравится,напиши сам biggrin.gif Вот и хочу писать(правильно ударение ставте biggrin.gif )сообственные обработчики.Вот только подскажите:
1.Какие есть параметры(и где их можно достать в МСДН) типа pMsg,UINT id, pHWND ну вы поняли,о чем я smile.gif
2.Все ли сообщения можно обрабатывать "ручками"
3.Ну и если это все занимает много инфы,то в каком разделе МСДН это можно достать smile.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Antech
Дата 13.4.2004, 08:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Coocky
1. Если вы имеете в виду оконную процедуру, то об этом лучше почитать в любом описалове WinAPI. Его в инете масса.

2. Чтобы обрабатывать сообщения окна, можно поступить двумя способами:
а) Задать адрес оконно процедуры при создании окна в соответствующем поле структуры:
wndClass.lpfnWndProc=&WndProc;
б) Сабклассить существующее окно:
LONG wndProcPtr=::GetWindowLong(hWnd,GWL_WNDPROC); // Адрес исходной процедуры
::SetWindowLong(hWnd,GWL_USERDATA,wndProcPtr); // Запомнить исходный адрес
::SetWindowLong(hWnd,GWL_WNDPROC,(LONG)&WndProc); // Заменить адрес оконной процедуры
Здесь, как видите, нам понадобилось сохранить адрес исходной процедуры окна в одном очень
интимном месте, связанном с окном, которое носит имя User Data.
Если Вы сабклассите контрол на окне, созданном из ресурсов:
HWND hWndDialog=DialogBox(hInstance,MAKEINTRESOURCE(ID_DIALOG),NULL,&DialogProc), то Вам будет очень полезна следующая функция для определения хэндла:
HWND hWnd=::GetDlgItem(hWndDialog,ID_EDIT); // Например, для эдитбокса

3. Оконная процедура выглядит следующим образом:
// Не ругайте, если что некорректно. Я в основном сейчас на Фортране...
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
// Здесь Ваша обработка событий
switch (msg)
{
case WM_MOUSEMOVE:
// Обработка перемещения мышки на окне
break;
case WM_LBUTTONDOWN:
// Обработка нажатия левой кнопки мышки
break;
};
// Исходный обработчик следует запускать только в случае сабклассинга
WNDPROC wndProc; // Адрес исходной оконной процедуры
wndProc=(WNDPROC)::GetWindowLong(hWnd,GWL_USERDATA)
::CallWindowProc(wndProc,hWnd,msg,wParam,lParam) // Исходный обработчик
};

Если Вы создаете собственный контрол, то Вам будет необходимо запихивать в USER_DATA не адрес исходного обработчика окна, а адрес объекта Вашего класса (в оконной процедуре, соответственно, ставите указатель на этот объект). Одним из свойств должен быть тот самый адрес исходного обработчика (если он нужен).

Все это скромное IMHO, не пинайте сильно.
  Вверх
Coocky
Дата 15.4.2004, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Спасибо за потраченное на меня время,но видать я не правильно обьяснил.Я работаю(работал и буду работать biggrin.gif ) с МФС.Мне интересно,что-то типа ON_COMMAND_RANGE.,ON_CONTROL_ID,только собственными руками smile.gif
Цитата
LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
я знаю,жив еще старичок,только в МФС я его не вижу и не увижу(да и не растроюсь).
А вопрос,ребята пока,в силе... smile.gif


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
AlexNor
Дата 15.4.2004, 22:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Coocky @ 12.4.2004, 20:07)

1.Какие есть параметры(и где их можно достать в МСДН) типа pMsg,UINT id, pHWND ну вы поняли,о чем я smile.gif

если чесно - то не совсем hmmm.gif

Цитата(Coocky @ 12.4.2004, 20:07)

2.Все ли сообщения можно обрабатывать "ручками"

В MFC? Я точно сказать не могу... Прям все сообщения не обрабатывал biggrin.gif

Цитата(Coocky @ 12.4.2004, 20:07)

3.Ну и если это все занимает много инфы,то в каком разделе МСДН это можно достать smile.gif


На сколько я понял тебе нужно чётко знать маршрутизацию всех сообщений в MFC. Да уж....
В MSDN я нихрена толком не нашёл . Я как то пытался это разобрать методом трассирования: и часто происходило так что одна функция вызывает другую, другая - третью, третья - четвёртую и т.д. в конце концов сообщение пропадало где-то в недрах...
Я как то нарыл очень хороший текст (аглицкий правда): там крендель очень хорошо написал о маршрутизации комманд в MFC (ну и соответсвенно где и как их можно перехватывать). И потом как то видел на русском. В электронном виде он у меня не сохранился sad.gif но поищи в инете: автор Поль ДиЛашиа (Paul DiLascia) темы статьи тоже не сохранилось но что то вроде Маршрутизация сообщений и комманд в MFC.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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