Subclassing okna

0

Witam. Jak się robi subclassing okna w c++. bo materiały które mam nic mi nie dają. Oto mój kod,(ASC to nazwa oryginalnej procedury obsługi kontrolki):
WNDPROC ASC ;

LRESULT CALLBACK CBExProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
switch(message){
case WM_CREATE:{
MessageBox(0,"dsf","dsf",MB_OK);
}

}
return CallWindowProc (ASC, hwnd, message, wParam, lParam);
}
Kompilator wyżuca mi błąd że ASC powinno być wskaźnikiem do funkcji nie przyjmującej argumentów i zwracającej int. W helpie wycztałem coś takiego:

If STRICT is defined, the lpPrevWndFunc parameter has the data type WNDPROC. The WNDPROC type is declared as follows:

LRESULT (CALLBACK* WNDPROC) (HWND, UINT, WPARAM, LPARAM);

If STRICT is not defined, the lpPrevWndFunc parameter has the data type FARPROC. The FARPROC type is declared as follows:

int (FAR WINAPI * FARPROC) ()

W C, deklaracja FARPROC wskazuje funkcję callback, która ma niewyszczególnionego listę parametru. W C ++, jednakże, pusty lista parametru w deklaracji wskazuje, że funkcja nie ma żadnych parametrów. To subtelne rozróżnienie może rozbić nieostrożny kod.

Jeśli w funkcji
ASC=(WNDPROC)SetWindowLong(hWyborFunkcji, GWL_WNDPROC, (LONG)CBExProc); ASC będzie WNDPROC, a w funkcji : CallWindowProc (ASC1 , hwnd, message, wParam, lParam); ASC1 będzie FARPROC to błąd nie występuje, tyle że subclassing też nie działa.

Proszę o pomoc. starałem się przedstawić problem jak najbardziej wyraźnie.

Acha. ASC deklarowałem również tak:LRESULT (CALLBACK* ASC) (HWND, UINT, WPARAM, LPARAM); ale to też nic nie dało.

Zapomniałem dodać ,że kompiluje w c++ bilder 6.0

0
...
#ifndef STRICT
   return CallWindowProc ((FARPROC)ASC, hwnd, message, wParam,
lParam);
#else
   return CallWindowProc (ASC, hwnd, message, wParam, lParam);
#endif
...

1 użytkowników online, w tym zalogowanych: 0, gości: 1