1use std::ptr::null_mut;
2
3use winapi::shared::minwindef::{HINSTANCE, LPARAM, LRESULT, UINT, WPARAM};
4use winapi::shared::windef::HWND;
5use winapi::um::wingdi::CreateSolidBrush;
6use winapi::um::winuser::{
7 LoadCursorW, LoadIconW, PostQuitMessage, ShowWindow, IDC_ARROW, IDI_APPLICATION, SW_SHOWNORMAL,
8 WM_DESTROY, WS_OVERLAPPEDWINDOW,
9};
10
11use win_win::{WindowBuilder, WindowClass, WindowProc};
12
13struct MyWindowProc;
14
15impl WindowProc for MyWindowProc {
16 fn window_proc(
17 &self,
18 _hwnd: HWND,
19 msg: UINT,
20 _wparam: WPARAM,
21 _lparam: LPARAM,
22 ) -> Option<LRESULT> {
23 println!("msg {}", msg);
24 if msg == WM_DESTROY {
25 unsafe {
26 PostQuitMessage(0);
27 }
28 }
29 None
30 }
31}
32
33fn main() {
34 unsafe {
35 let icon = LoadIconW(0 as HINSTANCE, IDI_APPLICATION);
36 let cursor = LoadCursorW(0 as HINSTANCE, IDC_ARROW);
37 let brush = CreateSolidBrush(0xff_ff_ff);
38 let win_class = WindowClass::builder("rust")
39 .icon(icon)
40 .cursor(cursor)
41 .background(brush)
42 .build()
43 .unwrap();
44 let hwnd = WindowBuilder::new(MyWindowProc, &win_class)
45 .name("win-win example")
46 .style(WS_OVERLAPPEDWINDOW)
47 .build();
48 ShowWindow(hwnd, SW_SHOWNORMAL);
49 win_win::runloop(null_mut());
50 }
51}