|
楼主 |
发表于 2020-5-22 15:15:48
|
显示全部楼层
群友告诉我 只要一个属性
<SOUI name="mainWindow" 。。。 sendWheel2Hover="1" 。。。/>
这么简单阿,我还想着折腾SOUI源代码,想想也是这个普遍功能,大佬肯定早想好了。
刚刚也是闲着,就追踪一下这个属性吧。以下比较无聊。。。可以忽略
void SwndContainerImpl::OnFrameMouseWheel( UINT uMsg,WPARAM wParam,LPARAM lParam )//
{
SWindow *pWndTarget =SWindowMgr::GetWindow(m_hCapture);
if(!pWndTarget)
{
if(IsSendWheel2Hover())//返回 sendWheel2Hover的值 即子窗口是否接受滚轮消息 这个函数代码往下看
{
m_hHover=SwndFromPoint(CPoint(GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)),FALSE);
pWndTarget=SWindowMgr::GetWindow(m_hHover); // pWndTarget目标窗口设为Hover窗口
}else
{
pWndTarget = SWindowMgr::GetWindow(m_focusMgr.GetFocusedHwnd());//只返回有焦点的窗口,就是为什么有输入焦点的子窗口才会响应滚轮消息
}
}
if(pWndTarget && !pWndTarget->IsDisabled(TRUE))
{
BOOL bMsgHandled = FALSE;
pWndTarget->SSendMessage(uMsg,wParam,lParam,&bMsgHandled);//把消息发送给 pWndTarget窗口即Hover窗口,这时候子窗口就会接收到滚轮消息
SetMsgHandled(bMsgHandled);
}else
{
SetMsgHandled(FALSE);
}
}
class SHostWnd:
{
...
protected:
SHostWndAttr m_hostAttr;
...
virtual BOOL IsSendWheel2Hover() const;
}
BOOL SHostWnd::IsSendWheel2Hover() const
{
return m_hostAttr.m_bSendWheel2Hover;// sendWheel2Hover的值
}
class SHostWndAttr
{
.....
ATTR_INT(L"sendWheel2Hover",m_bSendWheel2Hover,FALSE)
.......
DWORD m_bSendWheel2Hover:1; //将滚轮消息发送到hover窗口(后面的1表示只采用一个进制位,因为实际上是一个布尔值)
.....
}
|
|