Код (Text): .data StaticClassProc WNDPROC 0 szStatic BYTE 'STATIC', 0 NewStaticWndProc proc Win, uMsg, wParam, lParam : DWORD invoke CallWindowProc, StaticClassProc, Win, uMsg, wParam, lParam ret NewStaticWndProc endp ... LOCAL wc : WNDCLASSEX ... case WM_INITDIALOG .if !StaticClassProc mov wc.cbSize, sizeof WNDCLASSEX invoke GetClassInfoEx, 0, ADDR szStatic, ADDR wc mrm StaticClassProc, wc.lpfnWndProc mrm wc.lpfnWndProc, offset NewStaticWndProc mrm wc.hInstance, hInstance mov wc.lpszClassName, offset szStatic mov eax, wc.style and eax, not CS_GLOBALCLASS mov wc.style, eax invoke RegisterClassEx, ADDR wc .endif Пытаюсь сабклассировать статик контролы, перерыл весь интернет, но ничего путнего не нашёл. Прведённый код нормально отрабатывает, регистрация проходит успешно, но сообщения в новый обработчик не приходят. Подскажите, где я не так делаю? Не хочется делать отдельное сабклассирование на каждый контрол. Уточнение: используется MASM
Может я что то не допонял, но наверно надо так: Код (Text): invoke SetWindowLong,hStatic,GWL_WNDPROC,offset NewStaticWndProc mov StaticClassProc,eax NewStaticWndProc proc Win, uMsg, wParam, lParam : DWORD pop eax push StaticClassProc push eax jmp CallWindowProc NewStaticWndProc endp
Это сабклассирование - каждый контрол отдельно, а мне нужно суперклассирование - все контролы одного типа разом. Прежде, чем задавать вопрос здесь, я хорошенько порылся по интернету и эту ссылку посещал - общие слова и никакого толка.