in native/desktop-win32/src/win32/event_loop.rs [299:340]
fn on_nchittest(event_loop: &EventLoop, window: &Window, wparam: WPARAM, lparam: LPARAM) -> Option<LRESULT> {
if !window.has_custom_title_bar() || !window.is_resizable() {
return None;
}
let hwnd = window.hwnd();
let original_ht = {
let mut dwm_result = LRESULT(0);
if unsafe { DwmDefWindowProc(hwnd, WM_NCHITTEST, wparam, lparam, &raw mut dwm_result) }.as_bool() {
dwm_result
} else {
unsafe { DefWindowProcW(hwnd, WM_NCHITTEST, wparam, lparam) }
}
};
if original_ht != LRESULT(HTCLIENT as _) {
return Some(original_ht);
}
let mouse_x = GET_X_LPARAM!(lparam.0);
let mouse_y = GET_Y_LPARAM!(lparam.0);
let event = NCHitTestEvent { mouse_x, mouse_y };
let handled = event_loop.handle_event(window, event.into());
if handled.is_some() {
return Some(LRESULT(HTCLIENT as _));
}
let mut window_rect = RECT::default();
let _ = unsafe { GetWindowRect(hwnd, &raw mut window_rect) };
let current_dpi = unsafe { GetDpiForWindow(hwnd) };
let resize_handle_height = unsafe {
let current_dpi = GetDpiForWindow(hwnd);
GetSystemMetricsForDpi(SM_CXPADDEDBORDER, current_dpi) + GetSystemMetricsForDpi(SM_CYSIZEFRAME, current_dpi)
};
let title_bar_height = resize_handle_height + unsafe { GetSystemMetricsForDpi(SM_CYSIZE, current_dpi) };
let is_on_resize_border = mouse_y < (window_rect.top + resize_handle_height) as _;
let is_within_title_bar = mouse_y < (window_rect.top + title_bar_height) as _;
let hit_test_result = if is_on_resize_border {
HTTOP
} else if is_within_title_bar {
HTCAPTION
} else {
HTCLIENT
};
Some(LRESULT(hit_test_result as _))
}