无焦点工具窗口需要点击两次才获得输入焦点的问题解决

前提条件:

1、透明的分层窗口作为画布:

LONG stl = GetWindowLong(hWndCavas, GWL_EXSTYLE);

LONG s = ::SetWindowLong(hWndCavas, GWL_EXSTYLE, stl | WS_EX_LAYERED);

::SetWindowLong(hWndCanvas, GWL_EXSTYLE, stl| WS_EX_TRANSPARENT);

2、工具条窗口无焦点,为画布提供画笔选择

setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);

::SetWindowPos((HWND)winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);

导致问题:鼠标从画布移动到工具条,点击工具条窗口,这时候输入焦点还在画布(尽管工具条浮在画布上面), 第一次点击事件投递给了画布,第二次点击事件才投递给工具条,导致需要点击两次才能切换到工具条输入。

解决方法:

1、捕获画布窗口的WM_MOUSELEAVE事件

TRACKMOUSEEVENT csTME;

csTME.cbSize = sizeof(csTME);

csTME.dwFlags = TME_LEAVE;// 捕获WM_MOUSELEAVE事件

csTME.hwndTrack = hWndCanvas;// hWndCanvas为画布窗口

csTME.dwHoverTime = 20;

::_TrackMouseEvent(&csTME);

2、在画布窗口的WM_MOUSELEAVE事件处理函数中,激活工具条窗口

POINT pt;

GetCursorPos(&pt);

HWND hWnd = WindowFromPoint(pt);

if (hWnd && hWnd == toolbarWnd)

{

::SetWindowPos(toolbarWnd, NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); // active the toolbar window

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值