Как регистрировать клик мыши только с левой стороны окна ? с помощью 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