【发布时间】:2015-09-27 14:24:50
【问题描述】:
使用 .NET 有几种方法可以做到这一点(以 this 为例),但我无法仅使用 C++ win32 重现相同的内容。
我的方法是使用WS_EX_LAYERED,然后使用SetLayeredWindowAttributes 对不透明度进行一些控制,但我阅读了更多内容,发现WS_EX_TRANSPARENT '更好'——它允许点击。
但是,使用
hWnd = CreateWindowEx(WS_EX_TRANSPARENT, fooName, fooName, WS_OVERLAPPEDWINDOW | WS_POPUP | WS_CLIPSIBLINGS, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
似乎没有办法。还有一件事:一旦我让点击窗口工作,我可以使用
PostMessage(hWnd, WM_LBUTTONUP, 0, MAKELPARAM(GET_X_LPARAM(lParam) ,GET_Y_LPARAM(lParam)));
阻止拖动状态通过?
注意:拖动状态是使用触摸板设备产生的。
【问题讨论】:
-
Like the cake, WS_EX_TRANSPARENT is a lie, or at least not the entire truth。伪造
WM_LBUTTONUP消息将无法更新对输入处理至关重要的内部状态。根据您询问的对象是否按下鼠标左键,您会得到不同的答案。 -
您是否注意到 STATIC 窗口不接收点击消息? WM_LBUTTONDOWN 和/UP 转到父窗口。这似乎不依赖于创建标志,而是依赖于 Window 类。
标签: c++ user-interface winapi click window