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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 22:35   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию как правильно перехватить сообщение окну?

Везде пишут-пример один и тот же, который у меня не работает... Делаю так:
Workform.cpp:
Код:
void __fastcall Tf_job::FormCreate(TObject *Sender)
{
	SetLastError(0);
	old_wnd=(WNDPROC)SetWindowLongA(f_job->Handle, GWL_WNDPROC, (long)new_window_proc)
	if (old_wnd == 0);
		ShowMessage(GetLastError());
}
обработка:
Код:
LRESULT CALLBACK new_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	if (msg == WM_HSCROLL)
		f_job->Caption=IntToStr((int)SB_THUMBPOSITION);
	return DefWindowProcA(hwnd, msg, wparam, lparam);
}
workform.h:
Код:
class Tf_job : public TForm
{
__published:	// IDE-managed Components
	void __fastcall FormCreate(TObject *Sender);

private:	// User declarations
public:	// User declarations
	__fastcall Tf_job(TComponent* Owner);
           WNDPROC old_wnd;
           LRESULT CALLBACK new_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
Функция переадресации нуль возвращает. Непонятно мне почему не получается, объясните пожалуйста.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 14.02.2011, 23:59   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

по моему callback функция-член_класса должна быть объявлена как static (может в билдере по другому?)
counter вне форума Ответить с цитированием
Старый 15.02.2011, 00:17   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Цитата:
[ILINK32 Error] Error: Unresolved external '__stdcall Tf_job::new_window_proc(HWND__ *, unsigned int, unsigned int, long)' referenced from D:\EMAGINATIONED\DEBUG\WORKFORM.OBJ
вот такую хрень пишет
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 15.02.2011, 00:27   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

ну не знаю. проверить у меня негде...

так пробовал?
Код:
LRESULT CALLBACK new_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	if (msg == WM_HSCROLL)
		f_job->Caption=IntToStr((int)SB_THUMBPOSITION);
	return CallWindowProcA(old_wnd,hwnd, msg, wparam, lparam);
}
вот тут глянь

Последний раз редактировалось counter; 15.02.2011 в 00:30.
counter вне форума Ответить с цитированием
Старый 15.02.2011, 01:17   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

у меня даже не переназначается функция для перехвата. Значение нулевое.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 15.02.2011, 18:32   #6
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

ребят, сделал так:
Код:
LONG CALLBACK new_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	if (msg == WM_HSCROLL)
		f_job->Caption=IntToStr((int)f_job->HorzScrollBar->Position);
	return CallWindowProcA(f_job->old_wnd_proc, hwnd, msg, wparam, lparam);
}

void __fastcall Tf_job::FormCreate(TObject *Sender)
{
	SetLastError(0);
	old_wnd_proc=(WNDPROC)SetWindowLongA(f_job->Handle, GWL_WNDPROC,
						(long)new_wnd_proc);
}

public:		
	WNDPROC old_wnd_proc;
НО есть маааленькое НО! Если форма, чьё сообщение перехватывается - дочерняя, то ничего не работает как надо. Как выйти из положения? Всем спасибо сделал сам. Родителя доченей форме назначил в родительской форме, а надо было при создании дочерней формы родителя определить.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 15.02.2011 в 18:52.
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какое самое первое сообщение окну arokot Win Api 15 26.08.2010 03:40
перехватить сообщение в WebBrowser leonid4244 Мультимедиа в Delphi 1 07.02.2010 11:08
Перехватить сообщение об ошибке Insainer Общие вопросы Delphi 5 25.04.2008 20:39
Сообщение другому окну Бонарт Win Api 13 15.08.2007 20:23