程序A与程序B当程序A向程序B  POST或SEND鼠标WM_LbuttonDown和UP消息的时候,不影响真实的鼠标做其它的工作只是有短暂的停滞,无大碍.但不会对B内的子窗体产生什么效果.当程序A向程序B内的一个子窗口C   POST或SENDPOST或SEND鼠标WM_LbuttonDown和UP消息的时候程序B会接受.但是会影响鼠标的正常操作.就不能干别的了.这是怎么回事?如何解决呢?有什么思路?就好像分层了一样,我向B发送消息的时候都在B内的窗体C后面一样.并没有到在C窗上面.(用MOUSEMOVE试的).

解决方案 »

  1.   

    我认为应该是这样,C是B的子窗体,C是画出来的,B在接收SEND来的消息无法应用在C窗上,只能SEND到子窗C的句柄上,但是当C接到消息并释放鼠标的时候并未释放回桌面,还在C窗内.所以导致影响鼠标的操作.这样的情况有什么解决的办法吗?
      

  2.   

    Gameh:=FindWindow(nil,'四国军棋');//父窗
    Gamet:=FindWindowEx(Gameh,0,'SG_WNDCL','SGGame');//子窗
    PostMessage(Gamet,Messages.WM_LBUTTONDOWN,0,$02640259);
    PostMessage(Gamet,Messages.WM_LBUTTONUP,0,$02640259);正常的窗口POST到Gameh句柄上就可以正常使用了.但是这里不行,POST到主窗上没效果.用SPY++看它有一个子窗体是正常的游戏窗口.就像是网页内的一个FRAME一样,POST到这这个子窗中后鼠标信息就正常执行了.但是就影响鼠标了,干不了别的事了.
      

  3.   

    用SPY++来看消息过程.在主窗体上点击发现:
    <00001> 00010C08 S WM_PARENTNOTIFY FwEvent:WM_LBUTTONDOWN xPos:541 yPos:601
    <00002>          R
    <00003>          S WM_MOUSEACTIVATE hwndTopLevel:00010C08 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN
    <00004>          R WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE
    ------------------
    在子窗体上同样的位置点击发现:
    <00001> 00020c48 S WM_MOUSEACTIVATE hwndTopLevel:00020c3a nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN
    <00002>          R WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE
    <00003>          S WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:541 yPos:601
    <00004>          R WM_LBUTTONUP fwkeys:0000 xPos:541 yPos:601
    ------------------
    由上面信息可见主窗接收到的信息是一个WM_PARENTNOTIFY 左键在坐标的一个事件,然后是WM_MOUSEACTIVATE 事件,子窗体接收到了主窗体的WM_MOUSEACTIVATE 事件后就在这座标执行了LDOWN和LUP事件.似乎只要发送WM_MOUSEACTIVATE 事件就可以,主窗上的<00003>          S WM_MOUSEACTIVATE hwndTopLevel:00010C08 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN这个事件要怎么写呢?