![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Coocky |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 2 Всего: 62 |
Как говорит мой препод,если что-то не нравится,напиши сам
![]() ![]() 1.Какие есть параметры(и где их можно достать в МСДН) типа pMsg,UINT id, pHWND ну вы поняли,о чем я ![]() 2.Все ли сообщения можно обрабатывать "ручками" 3.Ну и если это все занимает много инфы,то в каком разделе МСДН это можно достать ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
Antech |
|
|||
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 |
|
|||
![]() GUI гуру ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2879 Регистрация: 16.2.2004 Где: Украина. Запорожь е Репутация: 2 Всего: 62 |
Спасибо за потраченное на меня время,но видать я не правильно обьяснил.Я работаю(работал и буду работать
![]() ![]()
А вопрос,ребята пока,в силе... ![]() -------------------- Верю в смерть после жизни, в любовь после секса ,в крем после бритья ![]() |
|||
|
||||
AlexNor |
|
||||||
Unregistered |
если чесно - то не совсем ![]()
В MFC? Я точно сказать не могу... Прям все сообщения не обрабатывал ![]()
На сколько я понял тебе нужно чётко знать маршрутизацию всех сообщений в MFC. Да уж.... В MSDN я нихрена толком не нашёл . Я как то пытался это разобрать методом трассирования: и часто происходило так что одна функция вызывает другую, другая - третью, третья - четвёртую и т.д. в конце концов сообщение пропадало где-то в недрах... Я как то нарыл очень хороший текст (аглицкий правда): там крендель очень хорошо написал о маршрутизации комманд в MFC (ну и соответсвенно где и как их можно перехватывать). И потом как то видел на русском. В электронном виде он у меня не сохранился ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |