Как регистрировать клик мыши только с левой стороны окна ? с помощью WinApi

"Создать два окна, одно из которых частично перекрывает другой. Щелчок правой кнопкой в левой половине верхнего окна активизирует перекрытое окно. Если до щелчка нажать клавишу «пробел», то перекрытое окно не активизируется."

Я смог организовать все кроме "Щелчок правой кнопкой в ЛЕВОЙ половине верхнего окна активизирует перекрытое окно". Как мне сделать так, чтобы щелчок работал только с левой половины окна, а не с полного с помощью winapi .

.386
.model flat, stdcall
option casemap :none
 
    include \MASM32\INCLUDE\WINDOWS.INC
    include \MASM32\INCLUDE\KERNEL32.INC
    include \MASM32\INCLUDE\USER32.INC
 
    includelib \MASM32\LIB\KERNEL32.LIB
    includelib \MASM32\LIB\USER32.LIB
 
    WinMain proto :DWORD, :DWORD, :DWORD, :DWORD
 
.data
ClassName   db "SimpleWinClass", 0
AppName1    db "первое окно", 0
AppName2    db "второе окно", 0
MutexName   db "mymutex", 0
Del     db 0   
 
.data?
hInstance   HINSTANCE   ?
CommandLine LPSTR       ?
hwnd        HWND        ?
hwnd2       HWND        ?
 
; #########################################################################
 
.code
start:
    invoke  GetModuleHandle, NULL
    mov hInstance, eax
    invoke  GetCommandLine
    mov CommandLine, eax
    invoke  WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
    invoke  ExitProcess, eax
 
WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:DWORD
LOCAL wc:WNDCLASSEX ;Структура для задания характеристик окна
LOCAL msg:MSG       ;Структура для получения сообщений 
                               
    ; Регистрация класса главного окна
    mov     wc.style, CS_HREDRAW or CS_VREDRAW ; стиль класса окна 
    mov     wc.lpfnWndProc, OFFSET WndProc ; указатель на оконную функцию
    mov     wc.cbClsExtra, NULL ; количество байтов дополнительной информации о классе
    mov     wc.cbWndExtra, NULL ; количество байтов дополнительной информации об окне
    mov wc.cbSize, SIZEOF WNDCLASSEX
    push    hInstance
    pop     wc.hInstance
    mov     wc.hbrBackground, COLOR_WINDOW + 1 ; запрос для закрашивания фона окна, светло-серой кистью из ресурсов Windows
    mov     wc.lpszMenuName, NULL ; указатель на строку с именем меню окна
    mov     wc.lpszClassName, OFFSET ClassName ; имя класса окна
    invoke  LoadIcon, NULL, IDI_APPLICATION ;вызов функции загрузки стандартной пиктограммы
    mov     wc.hIcon, eax
    mov     wc.hIconSm, eax
    invoke  LoadCursor, NULL, IDC_ARROW ; вызов функции загрузки курсора мыши – однонаправленной стрелки
    mov     wc.hCursor, eax
    invoke  RegisterClassEx, addr wc ; Вызов функции регистрации класса окна
    
    invoke  CreateWindowEx, NULL, addr ClassName, addr AppName2, WS_OVERLAPPEDWINDOW or WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,\
        400, 300, NULL, NULL, hInst, NULL
    mov     hwnd2, eax
    invoke  UpdateWindow, hwnd2
    
    invoke  CreateWindowEx, NULL, addr ClassName, addr AppName1, WS_OVERLAPPEDWINDOW or WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,\
        400, 300, NULL, NULL, hInst, NULL
    mov     hwnd, eax
    invoke  UpdateWindow, hwnd
    
    .WHILE  TRUE
        invoke  GetMessage, addr msg, NULL, 0, 0
        .BREAK  .IF(!eax)
        invoke  TranslateMessage, addr msg
        invoke  DispatchMessage, addr msg
    .ENDW
    mov     eax, msg.wParam
    ret
 
WinMain endp
  
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL lpwndpl:WINDOWPLACEMENT
LOCAL lpwndpl2:WINDOWPLACEMENT
    mov lpwndpl.iLength, SIZEOF WINDOWPLACEMENT
    mov lpwndpl2.iLength, SIZEOF WINDOWPLACEMENT
    .IF uMsg == WM_DESTROY
        invoke  PostQuitMessage, NULL
    .ELSEIF uMsg == WM_RBUTTONDOWN 
        .IF Del == 00h     
            
            invoke GetWindowPlacement, hwnd, ADDR lpwndpl
            invoke GetWindowPlacement, hwnd2, ADDR lpwndpl2
            invoke SetActiveWindow, hwnd
            invoke SetActiveWindow, hwnd2
            mov Del, 01h
        .ENDIF
    .ELSEIF uMsg==WM_KEYDOWN
        .IF wParam == VK_SPACE 
        mov Del, 01h 
            .IF Del == 01h
                invoke GetWindowPlacement, hwnd, ADDR lpwndpl
                invoke GetWindowPlacement, hwnd2,ADDR lpwndpl2
              
               ; mov Del, 00h
            .ENDIF
        .ENDIF
    .ELSE
        invoke  DefWindowProc, hWnd, uMsg, wParam, lParam
        ret
    .ENDIF
    xor eax, eax
    ret
WndProc endp
 
end start  

Ответы (0 шт):