msgbox in a proper windows message loop
This commit is contained in:
parent
d8d3fa204e
commit
b72469b046
|
@ -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;
|
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 {
|
pub export fn wWinMain(hInstance: w.HINSTANCE, hPrevInstance: ?w.HINSTANCE, lpCmdLine: w.PWSTR, nCmdShow: w.INT) w.INT {
|
||||||
_ = hInstance;
|
|
||||||
_ = hPrevInstance;
|
_ = hPrevInstance;
|
||||||
_ = lpCmdLine;
|
_ = 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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user