在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:

09-10 04:53
查看更多