msgbox in a proper windows message loop
This commit is contained in:
		
							parent
							
								
									d8d3fa204e
								
							
						
					
					
						commit
						b72469b046
					
				
					 1 changed files with 340 additions and 3 deletions
				
			
		|  | @ -3,12 +3,349 @@ const w = std.os.windows; | |||
| 
 | ||||
| extern "user32" fn MessageBoxA(hWnd: ?w.HANDLE, lpText: ?w.LPCSTR, lpCaption: ?w.LPCSTR, uType: w.UINT) callconv(w.WINAPI) c_int; | ||||
| 
 | ||||
| const WINDOW_EX_STYLE = enum(u32) { | ||||
|     DLGMODALFRAME = 1, | ||||
|     NOPARENTNOTIFY = 4, | ||||
|     TOPMOST = 8, | ||||
|     ACCEPTFILES = 16, | ||||
|     TRANSPARENT = 32, | ||||
|     MDICHILD = 64, | ||||
|     TOOLWINDOW = 128, | ||||
|     WINDOWEDGE = 256, | ||||
|     CLIENTEDGE = 512, | ||||
|     CONTEXTHELP = 1024, | ||||
|     RIGHT = 4096, | ||||
|     LEFT = 0, | ||||
|     RTLREADING = 8192, | ||||
|     // LTRREADING = 0, this enum value conflicts with LEFT | ||||
|     LEFTSCROLLBAR = 16384, | ||||
|     // RIGHTSCROLLBAR = 0, this enum value conflicts with LEFT | ||||
|     CONTROLPARENT = 65536, | ||||
|     STATICEDGE = 131072, | ||||
|     APPWINDOW = 262144, | ||||
|     OVERLAPPEDWINDOW = 768, | ||||
|     PALETTEWINDOW = 392, | ||||
|     LAYERED = 524288, | ||||
|     NOINHERITLAYOUT = 1048576, | ||||
|     NOREDIRECTIONBITMAP = 2097152, | ||||
|     LAYOUTRTL = 4194304, | ||||
|     COMPOSITED = 33554432, | ||||
|     NOACTIVATE = 134217728, | ||||
|     _, | ||||
|     pub fn initFlags(o: struct { | ||||
|         DLGMODALFRAME: u1 = 0, | ||||
|         NOPARENTNOTIFY: u1 = 0, | ||||
|         TOPMOST: u1 = 0, | ||||
|         ACCEPTFILES: u1 = 0, | ||||
|         TRANSPARENT: u1 = 0, | ||||
|         MDICHILD: u1 = 0, | ||||
|         TOOLWINDOW: u1 = 0, | ||||
|         WINDOWEDGE: u1 = 0, | ||||
|         CLIENTEDGE: u1 = 0, | ||||
|         CONTEXTHELP: u1 = 0, | ||||
|         RIGHT: u1 = 0, | ||||
|         LEFT: u1 = 0, | ||||
|         RTLREADING: u1 = 0, | ||||
|         LEFTSCROLLBAR: u1 = 0, | ||||
|         CONTROLPARENT: u1 = 0, | ||||
|         STATICEDGE: u1 = 0, | ||||
|         APPWINDOW: u1 = 0, | ||||
|         OVERLAPPEDWINDOW: u1 = 0, | ||||
|         PALETTEWINDOW: u1 = 0, | ||||
|         LAYERED: u1 = 0, | ||||
|         NOINHERITLAYOUT: u1 = 0, | ||||
|         NOREDIRECTIONBITMAP: u1 = 0, | ||||
|         LAYOUTRTL: u1 = 0, | ||||
|         COMPOSITED: u1 = 0, | ||||
|         NOACTIVATE: u1 = 0, | ||||
|     }) WINDOW_EX_STYLE { | ||||
|         return @intToEnum(WINDOW_EX_STYLE, (if (o.DLGMODALFRAME == 1) @enumToInt(WINDOW_EX_STYLE.DLGMODALFRAME) else 0) | (if (o.NOPARENTNOTIFY == 1) @enumToInt(WINDOW_EX_STYLE.NOPARENTNOTIFY) else 0) | (if (o.TOPMOST == 1) @enumToInt(WINDOW_EX_STYLE.TOPMOST) else 0) | (if (o.ACCEPTFILES == 1) @enumToInt(WINDOW_EX_STYLE.ACCEPTFILES) else 0) | (if (o.TRANSPARENT == 1) @enumToInt(WINDOW_EX_STYLE.TRANSPARENT) else 0) | (if (o.MDICHILD == 1) @enumToInt(WINDOW_EX_STYLE.MDICHILD) else 0) | (if (o.TOOLWINDOW == 1) @enumToInt(WINDOW_EX_STYLE.TOOLWINDOW) else 0) | (if (o.WINDOWEDGE == 1) @enumToInt(WINDOW_EX_STYLE.WINDOWEDGE) else 0) | (if (o.CLIENTEDGE == 1) @enumToInt(WINDOW_EX_STYLE.CLIENTEDGE) else 0) | (if (o.CONTEXTHELP == 1) @enumToInt(WINDOW_EX_STYLE.CONTEXTHELP) else 0) | (if (o.RIGHT == 1) @enumToInt(WINDOW_EX_STYLE.RIGHT) else 0) | (if (o.LEFT == 1) @enumToInt(WINDOW_EX_STYLE.LEFT) else 0) | (if (o.RTLREADING == 1) @enumToInt(WINDOW_EX_STYLE.RTLREADING) else 0) | (if (o.LEFTSCROLLBAR == 1) @enumToInt(WINDOW_EX_STYLE.LEFTSCROLLBAR) else 0) | (if (o.CONTROLPARENT == 1) @enumToInt(WINDOW_EX_STYLE.CONTROLPARENT) else 0) | (if (o.STATICEDGE == 1) @enumToInt(WINDOW_EX_STYLE.STATICEDGE) else 0) | (if (o.APPWINDOW == 1) @enumToInt(WINDOW_EX_STYLE.APPWINDOW) else 0) | (if (o.OVERLAPPEDWINDOW == 1) @enumToInt(WINDOW_EX_STYLE.OVERLAPPEDWINDOW) else 0) | (if (o.PALETTEWINDOW == 1) @enumToInt(WINDOW_EX_STYLE.PALETTEWINDOW) else 0) | (if (o.LAYERED == 1) @enumToInt(WINDOW_EX_STYLE.LAYERED) else 0) | (if (o.NOINHERITLAYOUT == 1) @enumToInt(WINDOW_EX_STYLE.NOINHERITLAYOUT) else 0) | (if (o.NOREDIRECTIONBITMAP == 1) @enumToInt(WINDOW_EX_STYLE.NOREDIRECTIONBITMAP) else 0) | (if (o.LAYOUTRTL == 1) @enumToInt(WINDOW_EX_STYLE.LAYOUTRTL) else 0) | (if (o.COMPOSITED == 1) @enumToInt(WINDOW_EX_STYLE.COMPOSITED) else 0) | (if (o.NOACTIVATE == 1) @enumToInt(WINDOW_EX_STYLE.NOACTIVATE) else 0)); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| extern "USER32" fn CreateWindowExA( | ||||
|     dwExStyle: WINDOW_EX_STYLE, | ||||
|     lpClassName: ?[*:0]const u8, | ||||
|     lpWindowName: ?[*:0]const u8, | ||||
|     dwStyle: WINDOW_STYLE, | ||||
|     X: i32, | ||||
|     Y: i32, | ||||
|     nWidth: i32, | ||||
|     nHeight: i32, | ||||
|     hWndParent: ?w.HWND, | ||||
|     hMenu: ?w.HMENU, | ||||
|     hInstance: ?w.HINSTANCE, | ||||
|     lpParam: ?*c_void, | ||||
| ) callconv(w.WINAPI) ?w.HWND; | ||||
| 
 | ||||
| const WNDPROC = fn ( | ||||
|     param0: w.HWND, | ||||
|     param1: u32, | ||||
|     param2: w.WPARAM, | ||||
|     param3: w.LPARAM, | ||||
| ) callconv(w.WINAPI) w.LRESULT; | ||||
| 
 | ||||
| const WNDCLASS_STYLES = enum(u32) { | ||||
|     VREDRAW = 1, | ||||
|     HREDRAW = 2, | ||||
|     DBLCLKS = 8, | ||||
|     OWNDC = 32, | ||||
|     CLASSDC = 64, | ||||
|     PARENTDC = 128, | ||||
|     NOCLOSE = 512, | ||||
|     SAVEBITS = 2048, | ||||
|     BYTEALIGNCLIENT = 4096, | ||||
|     BYTEALIGNWINDOW = 8192, | ||||
|     GLOBALCLASS = 16384, | ||||
|     IME = 65536, | ||||
|     DROPSHADOW = 131072, | ||||
|     _, | ||||
|     pub fn initFlags(o: struct { | ||||
|         VREDRAW: u1 = 0, | ||||
|         HREDRAW: u1 = 0, | ||||
|         DBLCLKS: u1 = 0, | ||||
|         OWNDC: u1 = 0, | ||||
|         CLASSDC: u1 = 0, | ||||
|         PARENTDC: u1 = 0, | ||||
|         NOCLOSE: u1 = 0, | ||||
|         SAVEBITS: u1 = 0, | ||||
|         BYTEALIGNCLIENT: u1 = 0, | ||||
|         BYTEALIGNWINDOW: u1 = 0, | ||||
|         GLOBALCLASS: u1 = 0, | ||||
|         IME: u1 = 0, | ||||
|         DROPSHADOW: u1 = 0, | ||||
|     }) WNDCLASS_STYLES { | ||||
|         return @intToEnum(WNDCLASS_STYLES, (if (o.VREDRAW == 1) @enumToInt(WNDCLASS_STYLES.VREDRAW) else 0) | (if (o.HREDRAW == 1) @enumToInt(WNDCLASS_STYLES.HREDRAW) else 0) | (if (o.DBLCLKS == 1) @enumToInt(WNDCLASS_STYLES.DBLCLKS) else 0) | (if (o.OWNDC == 1) @enumToInt(WNDCLASS_STYLES.OWNDC) else 0) | (if (o.CLASSDC == 1) @enumToInt(WNDCLASS_STYLES.CLASSDC) else 0) | (if (o.PARENTDC == 1) @enumToInt(WNDCLASS_STYLES.PARENTDC) else 0) | (if (o.NOCLOSE == 1) @enumToInt(WNDCLASS_STYLES.NOCLOSE) else 0) | (if (o.SAVEBITS == 1) @enumToInt(WNDCLASS_STYLES.SAVEBITS) else 0) | (if (o.BYTEALIGNCLIENT == 1) @enumToInt(WNDCLASS_STYLES.BYTEALIGNCLIENT) else 0) | (if (o.BYTEALIGNWINDOW == 1) @enumToInt(WNDCLASS_STYLES.BYTEALIGNWINDOW) else 0) | (if (o.GLOBALCLASS == 1) @enumToInt(WNDCLASS_STYLES.GLOBALCLASS) else 0) | (if (o.IME == 1) @enumToInt(WNDCLASS_STYLES.IME) else 0) | (if (o.DROPSHADOW == 1) @enumToInt(WNDCLASS_STYLES.DROPSHADOW) else 0)); | ||||
|     } | ||||
| }; | ||||
| const WINDOW_STYLE = enum(u32) { | ||||
|     OVERLAPPED = 0, | ||||
|     POPUP = 2147483648, | ||||
|     CHILD = 1073741824, | ||||
|     MINIMIZE = 536870912, | ||||
|     VISIBLE = 268435456, | ||||
|     DISABLED = 134217728, | ||||
|     CLIPSIBLINGS = 67108864, | ||||
|     CLIPCHILDREN = 33554432, | ||||
|     MAXIMIZE = 16777216, | ||||
|     CAPTION = 12582912, | ||||
|     BORDER = 8388608, | ||||
|     DLGFRAME = 4194304, | ||||
|     VSCROLL = 2097152, | ||||
|     HSCROLL = 1048576, | ||||
|     SYSMENU = 524288, | ||||
|     THICKFRAME = 262144, | ||||
|     GROUP = 131072, | ||||
|     TABSTOP = 65536, | ||||
|     // MINIMIZEBOX = 131072, this enum value conflicts with GROUP | ||||
|     // MAXIMIZEBOX = 65536, this enum value conflicts with TABSTOP | ||||
|     // TILED = 0, this enum value conflicts with OVERLAPPED | ||||
|     // ICONIC = 536870912, this enum value conflicts with MINIMIZE | ||||
|     // SIZEBOX = 262144, this enum value conflicts with THICKFRAME | ||||
|     TILEDWINDOW = 13565952, | ||||
|     // OVERLAPPEDWINDOW = 13565952, this enum value conflicts with TILEDWINDOW | ||||
|     POPUPWINDOW = 2156396544, | ||||
|     // CHILDWINDOW = 1073741824, this enum value conflicts with CHILD | ||||
|     ACTIVECAPTION = 1, | ||||
|     _, | ||||
|     pub fn initFlags(o: struct { | ||||
|         OVERLAPPED: u1 = 0, | ||||
|         POPUP: u1 = 0, | ||||
|         CHILD: u1 = 0, | ||||
|         MINIMIZE: u1 = 0, | ||||
|         VISIBLE: u1 = 0, | ||||
|         DISABLED: u1 = 0, | ||||
|         CLIPSIBLINGS: u1 = 0, | ||||
|         CLIPCHILDREN: u1 = 0, | ||||
|         MAXIMIZE: u1 = 0, | ||||
|         CAPTION: u1 = 0, | ||||
|         BORDER: u1 = 0, | ||||
|         DLGFRAME: u1 = 0, | ||||
|         VSCROLL: u1 = 0, | ||||
|         HSCROLL: u1 = 0, | ||||
|         SYSMENU: u1 = 0, | ||||
|         THICKFRAME: u1 = 0, | ||||
|         GROUP: u1 = 0, | ||||
|         TABSTOP: u1 = 0, | ||||
|         TILEDWINDOW: u1 = 0, | ||||
|         POPUPWINDOW: u1 = 0, | ||||
|         ACTIVECAPTION: u1 = 0, | ||||
|     }) WINDOW_STYLE { | ||||
|         return @intToEnum(WINDOW_STYLE, (if (o.OVERLAPPED == 1) @enumToInt(WINDOW_STYLE.OVERLAPPED) else 0) | (if (o.POPUP == 1) @enumToInt(WINDOW_STYLE.POPUP) else 0) | (if (o.CHILD == 1) @enumToInt(WINDOW_STYLE.CHILD) else 0) | (if (o.MINIMIZE == 1) @enumToInt(WINDOW_STYLE.MINIMIZE) else 0) | (if (o.VISIBLE == 1) @enumToInt(WINDOW_STYLE.VISIBLE) else 0) | (if (o.DISABLED == 1) @enumToInt(WINDOW_STYLE.DISABLED) else 0) | (if (o.CLIPSIBLINGS == 1) @enumToInt(WINDOW_STYLE.CLIPSIBLINGS) else 0) | (if (o.CLIPCHILDREN == 1) @enumToInt(WINDOW_STYLE.CLIPCHILDREN) else 0) | (if (o.MAXIMIZE == 1) @enumToInt(WINDOW_STYLE.MAXIMIZE) else 0) | (if (o.CAPTION == 1) @enumToInt(WINDOW_STYLE.CAPTION) else 0) | (if (o.BORDER == 1) @enumToInt(WINDOW_STYLE.BORDER) else 0) | (if (o.DLGFRAME == 1) @enumToInt(WINDOW_STYLE.DLGFRAME) else 0) | (if (o.VSCROLL == 1) @enumToInt(WINDOW_STYLE.VSCROLL) else 0) | (if (o.HSCROLL == 1) @enumToInt(WINDOW_STYLE.HSCROLL) else 0) | (if (o.SYSMENU == 1) @enumToInt(WINDOW_STYLE.SYSMENU) else 0) | (if (o.THICKFRAME == 1) @enumToInt(WINDOW_STYLE.THICKFRAME) else 0) | (if (o.GROUP == 1) @enumToInt(WINDOW_STYLE.GROUP) else 0) | (if (o.TABSTOP == 1) @enumToInt(WINDOW_STYLE.TABSTOP) else 0) | (if (o.TILEDWINDOW == 1) @enumToInt(WINDOW_STYLE.TILEDWINDOW) else 0) | (if (o.POPUPWINDOW == 1) @enumToInt(WINDOW_STYLE.POPUPWINDOW) else 0) | (if (o.ACTIVECAPTION == 1) @enumToInt(WINDOW_STYLE.ACTIVECAPTION) else 0)); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| const WNDCLASSA = extern struct { | ||||
|     style: WNDCLASS_STYLES, | ||||
|     lpfnWndProc: ?WNDPROC, | ||||
|     cbClsExtra: i32, | ||||
|     cbWndExtra: i32, | ||||
|     hInstance: ?w.HINSTANCE, | ||||
|     hIcon: ?w.HICON, | ||||
|     hCursor: ?w.HCURSOR, | ||||
|     hbrBackground: ?w.HBRUSH, | ||||
|     lpszMenuName: ?[*:0]const u8, | ||||
|     lpszClassName: ?[*:0]const u8, | ||||
| }; | ||||
| 
 | ||||
| extern "USER32" fn RegisterClassA( | ||||
|     lpWndClass: ?*const WNDCLASSA, | ||||
| ) callconv(w.WINAPI) u16; | ||||
| 
 | ||||
| const WS_OVERLAPPEDWINDOW = WINDOW_STYLE.TILEDWINDOW; | ||||
| const CW_USEDEFAULT = @as(i32, -2147483648); | ||||
| const BOOL = i32; | ||||
| 
 | ||||
| const MSG = extern struct { | ||||
|     hwnd: ?w.HWND, | ||||
|     message: u32, | ||||
|     wParam: w.WPARAM, | ||||
|     lParam: w.LPARAM, | ||||
|     time: u32, | ||||
|     pt: w.POINT, | ||||
| }; | ||||
| const SHOW_WINDOW_CMD = enum(u32) { | ||||
|     FORCEMINIMIZE = 11, | ||||
|     HIDE = 0, | ||||
|     MAXIMIZE = 3, | ||||
|     MINIMIZE = 6, | ||||
|     RESTORE = 9, | ||||
|     SHOW = 5, | ||||
|     SHOWDEFAULT = 10, | ||||
|     // SHOWMAXIMIZED = 3, this enum value conflicts with MAXIMIZE | ||||
|     SHOWMINIMIZED = 2, | ||||
|     SHOWMINNOACTIVE = 7, | ||||
|     SHOWNA = 8, | ||||
|     SHOWNOACTIVATE = 4, | ||||
|     SHOWNORMAL = 1, | ||||
|     // NORMAL = 1, this enum value conflicts with SHOWNORMAL | ||||
|     // MAX = 11, this enum value conflicts with FORCEMINIMIZE | ||||
|     // PARENTCLOSING = 1, this enum value conflicts with SHOWNORMAL | ||||
|     // OTHERZOOM = 2, this enum value conflicts with SHOWMINIMIZED | ||||
|     // PARENTOPENING = 3, this enum value conflicts with MAXIMIZE | ||||
|     // OTHERUNZOOM = 4, this enum value conflicts with SHOWNOACTIVATE | ||||
|     // SCROLLCHILDREN = 1, this enum value conflicts with SHOWNORMAL | ||||
|     // INVALIDATE = 2, this enum value conflicts with SHOWMINIMIZED | ||||
|     // ERASE = 4, this enum value conflicts with SHOWNOACTIVATE | ||||
|     SMOOTHSCROLL = 16, | ||||
|     _, | ||||
|     pub fn initFlags(o: struct { | ||||
|         FORCEMINIMIZE: u1 = 0, | ||||
|         HIDE: u1 = 0, | ||||
|         MAXIMIZE: u1 = 0, | ||||
|         MINIMIZE: u1 = 0, | ||||
|         RESTORE: u1 = 0, | ||||
|         SHOW: u1 = 0, | ||||
|         SHOWDEFAULT: u1 = 0, | ||||
|         SHOWMINIMIZED: u1 = 0, | ||||
|         SHOWMINNOACTIVE: u1 = 0, | ||||
|         SHOWNA: u1 = 0, | ||||
|         SHOWNOACTIVATE: u1 = 0, | ||||
|         SHOWNORMAL: u1 = 0, | ||||
|         SMOOTHSCROLL: u1 = 0, | ||||
|     }) SHOW_WINDOW_CMD { | ||||
|         return @intToEnum(SHOW_WINDOW_CMD, (if (o.FORCEMINIMIZE == 1) @enumToInt(SHOW_WINDOW_CMD.FORCEMINIMIZE) else 0) | (if (o.HIDE == 1) @enumToInt(SHOW_WINDOW_CMD.HIDE) else 0) | (if (o.MAXIMIZE == 1) @enumToInt(SHOW_WINDOW_CMD.MAXIMIZE) else 0) | (if (o.MINIMIZE == 1) @enumToInt(SHOW_WINDOW_CMD.MINIMIZE) else 0) | (if (o.RESTORE == 1) @enumToInt(SHOW_WINDOW_CMD.RESTORE) else 0) | (if (o.SHOW == 1) @enumToInt(SHOW_WINDOW_CMD.SHOW) else 0) | (if (o.SHOWDEFAULT == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWDEFAULT) else 0) | (if (o.SHOWMINIMIZED == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWMINIMIZED) else 0) | (if (o.SHOWMINNOACTIVE == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWMINNOACTIVE) else 0) | (if (o.SHOWNA == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWNA) else 0) | (if (o.SHOWNOACTIVATE == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWNOACTIVATE) else 0) | (if (o.SHOWNORMAL == 1) @enumToInt(SHOW_WINDOW_CMD.SHOWNORMAL) else 0) | (if (o.SMOOTHSCROLL == 1) @enumToInt(SHOW_WINDOW_CMD.SMOOTHSCROLL) else 0)); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| extern "USER32" fn ShowWindow( | ||||
|     hWnd: ?w.HWND, | ||||
|     nCmdShow: SHOW_WINDOW_CMD, | ||||
| ) callconv(w.WINAPI) BOOL; | ||||
| 
 | ||||
| extern "USER32" fn GetMessageA( | ||||
|     lpMsg: ?*MSG, | ||||
|     hWnd: ?w.HWND, | ||||
|     wMsgFilterMin: u32, | ||||
|     wMsgFilterMax: u32, | ||||
| ) callconv(w.WINAPI) BOOL; | ||||
| 
 | ||||
| extern "USER32" fn TranslateMessage( | ||||
|     lpMsg: ?*const MSG, | ||||
| ) callconv(w.WINAPI) BOOL; | ||||
| 
 | ||||
| const LRESULT = isize; | ||||
| 
 | ||||
| extern "USER32" fn DispatchMessageA( | ||||
|     lpMsg: ?*const MSG, | ||||
| ) callconv(w.WINAPI) LRESULT; | ||||
| 
 | ||||
| pub export fn wWinMain(hInstance: w.HINSTANCE, hPrevInstance: ?w.HINSTANCE, lpCmdLine: w.PWSTR, nCmdShow: w.INT) w.INT { | ||||
|     _ = hInstance; | ||||
|     _ = hPrevInstance; | ||||
|     _ = lpCmdLine; | ||||
|     _ = nCmdShow; | ||||
| 
 | ||||
|     _ = MessageBoxA(null, "all your codebase are belong to us", "title", 0); | ||||
|     // Register the window class. | ||||
|     var wc: WNDCLASSA = .{ | ||||
|         .lpszClassName = "Clipboard watcher", | ||||
|         .hInstance = hInstance, | ||||
|         .lpfnWndProc = MainWndProc, | ||||
|         // default vals | ||||
|         .style = WNDCLASS_STYLES.initFlags(.{}), | ||||
|         .cbClsExtra = 0, | ||||
|         .cbWndExtra = 0, | ||||
|         .hIcon = null, | ||||
|         .hCursor = null, | ||||
|         .hbrBackground = null, | ||||
|         .lpszMenuName = null, | ||||
|     }; | ||||
| 
 | ||||
|     _ = RegisterClassA(&wc); | ||||
| 
 | ||||
|     // Create the window. | ||||
| 
 | ||||
|     var hwnd = CreateWindowExA( | ||||
|         WINDOW_EX_STYLE.initFlags(.{}), // Optional window styles. | ||||
|         wc.lpszClassName.?, // Window class | ||||
|         "Windows program - in zig", // Window text | ||||
|         WS_OVERLAPPEDWINDOW, // Window style | ||||
| 
 | ||||
|         // Size and position | ||||
|         CW_USEDEFAULT, | ||||
|         CW_USEDEFAULT, | ||||
|         CW_USEDEFAULT, | ||||
|         CW_USEDEFAULT, | ||||
| 
 | ||||
|         null, // Parent window | ||||
|         null, // Menu | ||||
|         hInstance, // Instance handle | ||||
|         null, // Additional application data | ||||
|     ); | ||||
| 
 | ||||
|     if (hwnd == null) | ||||
|         return 0; | ||||
| 
 | ||||
|     _ = ShowWindow(hwnd, @intToEnum(SHOW_WINDOW_CMD, nCmdShow)); | ||||
| 
 | ||||
|     // Run the message loop. | ||||
| 
 | ||||
|     var msg: MSG = .{ | ||||
|         .hwnd = null, | ||||
|         .message = 0, | ||||
|         .wParam = 0, | ||||
|         .lParam = 0, | ||||
|         .time = 0, | ||||
|         .pt = .{ | ||||
|             .x = 0, | ||||
|             .y = 0, | ||||
|         }, | ||||
|     }; | ||||
| 
 | ||||
|     while (GetMessageA(&msg, null, 0, 0) > 0) { | ||||
|         _ = TranslateMessage(&msg); | ||||
|         _ = DispatchMessageA(&msg); | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| fn MainWndProc(hwnd: w.HWND, uMsg: u32, wParam: w.WPARAM, lParam: w.LPARAM) callconv(w.WINAPI) w.LRESULT { //APIENTRY { | ||||
|     _ = hwnd; | ||||
|     _ = uMsg; // uMsg is actually a pointer to the message | ||||
|     _ = wParam; | ||||
|     _ = lParam; | ||||
| 
 | ||||
|     _ = MessageBoxA(null, "all your codebase are belong to us", "title", 0); | ||||
|     std.time.sleep(2 * std.time.ns_per_s); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue