отдельная процедура обработки кнопки, как это сделать

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
toshas
Сообщения: 3
Зарегистрирован: 02 июл 2004, 16:38

04 июл 2004, 18:10

есть окно, в нем я создаю кнопку, класс которой беру как стандартный, через GetClassInfo,+изменяю lpfnWndProc и название класса, регистрирую мой класс, но ничего не работает что я делаю не так.

спасибо.

....
LONG WINAPI MainButProc(HWND,UINT,WPARAM,LPARAM);
....
WNDCLASS ww;


GetClassInfo(0,"button",&ww);

ww.lpszClassName="my_button";
ww.lpfnWndProc=MainButProc;
RegisterClass(&ww);

hbutton=CreateWindow("my_button","êíîïêà",WS_CHILD|WS_BORDER|WS_VISIBLE,10,10,100,100,hwnd,(HMENU) 1, hInstance,NULL);
ShowWindow(hbutton,nCmdShow);
UpdateWindow(hbutton);
....
LONG WINAPI MainButProc(HWND hwndMain, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg){
case WM_COMMAND:
MessageBox(hwndMain,"êíîïêó íàæàëè","MessageBox",NULL);
break;
default:
return MainWndProc(hwndMain,uMsg,wParam,lParam);
}
return 0;
}
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

04 июл 2004, 19:12

toshas, а ты уверен, что сообщение WM_COMMAND отправляется контролу, а не его родителю?
Я так думаю, тебе BN_CLICKED ловить надо.
Даже самый дурацкий замысел можно воплотить мастерски
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

05 июл 2004, 07:58

Aik совершенно прав, нотификации посылаются паренту контролса. Кроме того стандартную процедуру надо вызывать через CallWindowProc
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

05 июл 2004, 18:56

Насчет WM_COMMAND все верно, но главная ошибка - что за MainWndProc вызывается в перегруженной процедуре окна? Обычно при window procedure superclassing необрабатывемые сообщения посылаются в старую процедуру окна. А для этого ее надо было сохранить сразу после вызова GetClassInfo.

Кроме того, для дочерних окон не нужно вызывать ShowWindow и UpdateWindow - родитель обо всем позаботится :) Но это уже мелочи
Ответить