Ситуация следующая:беру хэндл чужого окна и создаю в нем кнопку: wnd = FindWindow(NULL, "Калькулятор Плюс"); CreateWindow("button", "sqrt", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,230, 60, 30, 30, wnd, (HMENU)10000, NULL, NULL); теперь мне надо назначить ей обработчик,а вот как это как раз вопрос? Заранее спасибо. P.S.тема так называется так как это мое предположение о том как реализовать этот обработчик
Сабклассинг окна Code: // в .h файле или выше LONG oldfunc; LRESULT CALLBACK MyBtnProc (HWND,UINT,UINT,LONG); // в коде LRESULT CALLBACK MyBtnProc(HWND hWnd,UINT Message, UINT wParam, LONG lParam) { switch (Message) { ... } if (CallWindowProc((WNDPROC)oldfunc, hWnd, Message, wParam, lParam)) return DefWindowProc(hWnd, Message, wParam, lParam); return 0; } // --------- там где ты делаешь кнопку hButton=CreateWindow("button", "sqrt", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,230, 60, 30, 30, wnd, (HMENU)10000, NULL, NULL); oldfunc=SetWindowLong(hButton, GWL_WNDPROC, (LONG)&MyBtnProc);
Большое спасибо за код,сделал как описано(первый раз сталкиваюсь с подобными вещами)но компилятор ругается сразу после if (CallWindowProc((WNDPROC)oldfunc, hWnd, Message, wParam, lParam)) выдает 2 ошибки: 1) [C++ Error] Unit1.cpp(45): E2034 Cannot convert 'long (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()' 2) [C++ Error] Unit1.cpp(45): E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void *,unsigned int,unsigned int,long)')