Re: loosing messages leakes my app...
different approach, still running wired:
the following functions shall apply a hook (and - as far a s i can
debug it, already does it one single time, as expected and
correct... ;-)
===================================================================
//-----------------------------------------------------------------------------
// static handle to last hook
HHOOK& CQControl::_NextHook() {
static HHOOK hhook = 0;
return hhook;
}
//-----------------------------------------------------------------------------
// hook into windows to ALWAYS catch Q-Posts ;-/
bool CQControl::_InitHook() {
if (_NextHook() != 0)
return true;
_NextHook() = SetWindowsHookEx(WH_GETMESSAGE, _CtrlHook, (HINSTANCE)
NULL,
AfxGetThread()->m_nThreadID);
return (_NextHook() != 0);
}
===================================================================
this is the hook itself:
===================================================================
LRESULT CALLBACK CQControl::_CtrlHook(int code, WPARAM wParam, LPARAM
lParam) {
switch (code) {
case HC_ACTION:
{
PMSG pMsg = (PMSG) lParam;
if (pMsg->message != WM_QWCOMMAND)
break;
if (pMsg->lParam == 0)
break;
SQMsgBlock* pMB = reinterpret_cast<SQMsgBlock*>(pMsg->lParam);
if (pMB->pControl == NULL)
break;
pMB->pControl->_GUIReceived(pMB);
pMB->pControl->_GUIPostDelete(pMB);
pMsg->lParam = 0;
pMsg->message = WM_NULL;
}
default:
break;
}
if (code < 0)
return CallNextHookEx(_NextHook(), code, wParam, lParam);
return -1;
}
===================================================================
so the pricipial mechanism works: a thread posts a WM_QWCOMMAND-
message and the hook is called. inside, the mesage is processed and
the block deleted. now i want to tell the system to *PLEASE* dont
dispatch it any further: i've tried setting it to WM_NULL, i've tried
returning HC_SKIP, i've tried returning -1,... whatever i do, the
message appears agin in the hook, now pointer to - of course - already
deleted memory... wtf? why does it come again? how do i get rid of it?
TIA, .rhavin;)