在win32或atl / wtl c++中使用分层窗口时,如果我将主窗口的alpha设置为0并在子窗口(即假窗口)上绘画,以使其可见并单击该窗口,则整个窗口都是单击。
我希望仅使窗口的一部分区域可以单击,而不是整个窗口,如果我要绘制一个圆角窗口,可以使底部/主窗口可以单击,但是我不想上部的“假”窗口要单击,我希望能够单击它。我怎么做?
我到目前为止的位置:
在主窗口的OnInitDialog函数中:
::SetWindowLong( m_hWnd, GWL_EXSTYLE, ::GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
BYTE bTran = 0;
::SetLayeredWindowAttributes( m_hWnd, 0, bTran, LWA_ALPHA);
当我创建假窗口时:
m_hFakeWnd = ::CreateWindowEx( WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE | WS_EX_LEFT
, m_strWndClassName
, NULL
, WS_VISIBLE | WS_OVERLAPPED
, rc.left
, rc.top
, rc.Width()
, rc.Height()
, GetSafeHwnd()
, NULL
, ::GetModuleHandle(NULL)
, NULL
);
如果设置了WS_EX_TRANSPARENT标志,则设置为消除假窗口是可单击的,而主要窗口是单击即可,但是!它什么也没反应!单击/拖动。没有。
最佳答案
听起来您只是为了拦截点击而覆盖另一个窗口?
无论如何,您需要处理window的 WM_NCHITTEST
消息,以便能够让系统知道特定位置是透明的,在这种情况下,您将返回HTTRANSPARENT
: