А>Здравствуйте!
А>Создаю обычное WinApi приложение в VC++ 7.1. Регистрирую свой класс окна, создаю окно-кнопку. Получаю адрес оконной процедуры:
А>А>g_buttonProc = ::GetClassLong(hwnd, GCL_WNDPROC);
А>
А>Оконная процедура своего окна выглядит так:
А>А>LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
А> return g_buttonProc(hWnd, message, wParam, lParam);
А> // или:
А> // return CallWindowProc(g_buttonProc, hWnd, message, wParam, lParam);
А> // если добавить "return DefWindowProc(hWnd, message, wParam, lParam);", то окно хотя бы создается.
А>}
А>
А>Т.е. как будто копия "настоящей" оконной процедуры. Но она совсем не хочет вести себя как копия — она просто не создает даже окно
А>ЗЫ. Я конечно же понимаю, что это из области "слабо?". Но эта проблема мне покоя не дает
Должно все работать. Подобная техника используется часто и называется суперклассированием. Примеров оного — вагон и маленькая тележка. Используйте поиск...
Здравствуйте!
Создаю обычное WinApi приложение в VC++ 7.1. Регистрирую свой класс окна, создаю окно-кнопку. Получаю адрес оконной процедуры:
g_buttonProc = ::GetClassLong(hwnd, GCL_WNDPROC);
Оконная процедура своего окна выглядит так:
LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
return g_buttonProc(hWnd, message, wParam, lParam);
// или:
// return CallWindowProc(g_buttonProc, hWnd, message, wParam, lParam);
// если добавить "return DefWindowProc(hWnd, message, wParam, lParam);", то окно хотя бы создается.
}
Т.е. как будто копия "настоящей" оконной процедуры. Но она совсем не хочет вести себя как копия — она просто не создает даже окно
ЗЫ. Я конечно же понимаю, что это из области "слабо?". Но эта проблема мне покоя не дает
Здравствуйте, Аноним, Вы писали:
На самом деле есть парочка окнонных классов, где функционал реализуется на 90% своими илами, а остальное необходимо брать из существующей оконной ф-ции. Именно оттуда у вопроса "ноги растут"
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>Создаю обычное WinApi приложение в VC++ 7.1. Регистрирую свой класс окна, создаю окно-кнопку. Получаю адрес оконной процедуры:
А>А>g_buttonProc = ::GetClassLong(hwnd, GCL_WNDPROC);
А>
А>Оконная процедура своего окна выглядит так:
А>А>LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
А> return g_buttonProc(hWnd, message, wParam, lParam);
А> // или:
А> // return CallWindowProc(g_buttonProc, hWnd, message, wParam, lParam);
А> // если добавить "return DefWindowProc(hWnd, message, wParam, lParam);", то окно хотя бы создается.
А>}
А>
А>Т.е. как будто копия "настоящей" оконной процедуры. Но она совсем не хочет вести себя как копия — она просто не создает даже окно
Т.е. ты пытаешься окну одного класса (своего) присобачить оконную процедуру другого (в данном случае — кнопки). Имхо, работать такое будет, если повезёт, и классы окажутся совместимыми с точки зрения оконной процедуры. А могут и не оказаться, например, количество дополнительных байт на окно/класс может отличаться, или ещё что-нибудь. Но принципиальных противопоказаний быть не должно. Для начала получи у той же кнопки GetClassLong остальные параметры, сравни со своими.