我先说下情况:
我通过一个按钮,发送消息.
它有这样的一个规律(我用AFXMESSAGEBOX弹出来):
单击按钮第一次时,弹出来一次,第二次单击时,弹出来两次,第三次单击时,弹出来三次,................以此类推,我单击那个按钮是第几次,它就弹出来几次对话框!
这是什么原因造成的!注意:我这个是通过软件上的BUTTON,用鼠标点击的!绝对不是键盘钩子,按下,弹起!void CDTtestDlg::OnTest() 
{
// TODO: Add your control notification handler code here
//第一个参数是目标窗口HWND,二参是自定义消息类型,三参是线程ID,四五参是两上DWORD类型值,这两个参数对于这个情况的发生没什么关系
MySetWindowsHookEx(Tarwnd,TESTMEG,ThreadID,dttm,m_select);
}
////////////////////////////////////////////////////////////////////////////////////////////LRESULT CALLBACK MyWndProc(
int nCode,      // hook code
WPARAM wParam,  // current-process flag
LPARAM lParam   // message data
)
{
CWPSTRUCT * cwp = (CWPSTRUCT *)lParam; switch(cwp->message)//最后来到这个过程函数里了,也同样,前面的sendmessage弹出几次窗口,这里就执行了几次!
{
case DTtest1:
anser(tm,DTid);
break;
case TESTMEG:

test(0,0);
default:
    break;
}
return  CallNextHookEx(hook1,nCode,wParam,lParam);;
}BOOL MySetWindowsHookEx(HWND mywnd,UINT msg,DWORD myThread,DWORD temptm,DWORD dt)
{
wnd = mywnd;
tm = temptm;
DTid = dt;
        AfxMessageBox("aa"); //问题一,本来应该在这里就应该弹出来的窗口,可是在这里不弹出来!
hook1 = ::SetWindowsHookEx(WH_GETMESSAGE/*WH_CALLWNDPROC*/,MyWndProc,GetModuleHandle("DThelp"),myThread);
if (hook1 != NULL)
{
::SendMessage(wnd,msg,0,0);//问题二,在这里是发送消息,用来执行上面的HOOK过程,可是在这里却像我上面说的,按了几下,就弹出来几次窗口,然后才会执行到下面的return.
return TRUE;
}
return FALSE;
}
请朋友们帮忙看看这是什么原因?
谢谢!