есть окно, в нем я создаю кнопку, класс которой беру как стандартный, через 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;
}
отдельная процедура обработки кнопки, как это сделать
Модераторы: Duncon, Hawk, Romeo, Eugie
toshas, а ты уверен, что сообщение WM_COMMAND отправляется контролу, а не его родителю?
Я так думаю, тебе BN_CLICKED ловить надо.
Я так думаю, тебе BN_CLICKED ловить надо.
Даже самый дурацкий замысел можно воплотить мастерски
Aik совершенно прав, нотификации посылаются паренту контролса. Кроме того стандартную процедуру надо вызывать через CallWindowProc
Насчет WM_COMMAND все верно, но главная ошибка - что за MainWndProc вызывается в перегруженной процедуре окна? Обычно при window procedure superclassing необрабатывемые сообщения посылаются в старую процедуру окна. А для этого ее надо было сохранить сразу после вызова GetClassInfo.
Кроме того, для дочерних окон не нужно вызывать ShowWindow и UpdateWindow - родитель обо всем позаботится
Но это уже мелочи
Кроме того, для дочерних окон не нужно вызывать ShowWindow и UpdateWindow - родитель обо всем позаботится
