Olórin już mi podpowiedział conieco. Najpierw standardowe subklasowanie akcji:
CODE
int Pisak::Start()
{
sUIActionInfo nfo( IMIG_MSGWND, Konnekt::UI::ACT::msg_ctrlsend );
nfo.mask = UIAIM_ALL;
nfo.txt = new char [100];
nfo.txtSize = 99;
UIActionGet(nfo);
RodzicOkna = ICMessage( IMI_ACTION_GETOWNER, (int)&nfo.act );
if( RodzicOkna == 0 )
RodzicOkna = ICMessage( IMC_PLUG_ID, 0 );
ICMessage( IMI_ACTION_REMOVE , (int)&nfo.act );
ICMessage( IMI_ACTION , (int)&nfo );
delete[] nfo.txt;
return 1;
}
int Pisak::ActionProc( sUIActionNotify_base * msg )
{
switch( msg->act.id )
{
case Konnekt::UI::ACT::msg_ctrlsend:
{
if( msg->code == ACTN_CREATEWINDOW )
{
int ret = IMessageDirect( IM_UIACTION , RodzicOkna, (int)msg );
sUIActionNotify_createWindow * an = (msg->s_size>=sizeof(sUIActionNotify_createWindow))?static_cast<sUIActionNotify_createWindow*>(msg):0;
IMessage(IMI_INFORM , 0 , 0 , (int)"subklasujemy");
SubklasujOknoRozmowy( an->hwndParent );
return ret;
}
else return IMessageDirect( IM_UIACTION , RodzicOkna, (int)msg );
}
}
return 0;
}
Następnie, subklasujemy okno:
CODE
LRESULT CALLBACK ObslugaOknaRozmowy( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
IMessage(IMI_INFORM , 0 , 0 , (int)"procedura");
switch (uMsg)
{
case WM_COMMAND:
if( HIWORD( wParam ) == EN_CHANGE )
{
IMessage(IMI_INFORM , 0 , 0 , (int)"zmiana");
}
break;
}
return CallWindowProc( staraProc, hwnd, uMsg, wParam, lParam );
}
void Pisak::SubklasujOknoRozmowy( void* uchwyt )
{
staraProc = (WNDPROC)SetWindowLongPtr( (HWND)uchwyt, GWLP_WNDPROC, (LONG)ObslugaOknaRozmowy );
}
Ok, subklasowanie juz dziala. Dostaje wreszcie komunikat "procedura" ale nie dostaje komunikatu "zmiana" dlaczego, użyliście jakiejś innej kontrolki czy co?