win32 または atl/wtl c++ でレイヤード ウィンドウを使用する場合、メイン ウィンドウのアルファを 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
);
IF、私は WS_EX_TRANSPARENT フラグを削除するように設定しましたが、メインはクリックスルーですが、偽のウィンドウはクリック可能です。何も反応しません!クリック/ドラッグします。なし。