aboutsummaryrefslogtreecommitdiff
path: root/core/sys
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-01-01 20:18:48 +0000
committergingerBill <bill@gingerbill.org>2019-01-01 20:18:48 +0000
commitc1ec45dc0a11bd2b30d88d18d2fe06edc6fd89d4 (patch)
treefbc6cb561703e1ef1c00a9b4d7357b03fddf5337 /core/sys
parent0778d18bc7ec7990ac521ed71130f7f26a6907d3 (diff)
Update sys/win32; Add Menu stuff
Diffstat (limited to 'core/sys')
-rw-r--r--core/sys/win32/windows.odin131
1 files changed, 131 insertions, 0 deletions
diff --git a/core/sys/win32/windows.odin b/core/sys/win32/windows.odin
index 75283e388..3ce33bad0 100644
--- a/core/sys/win32/windows.odin
+++ b/core/sys/win32/windows.odin
@@ -15,6 +15,7 @@ Hinstance :: distinct Handle;
Hicon :: distinct Handle;
Hcursor :: distinct Handle;
Hmenu :: distinct Handle;
+Hbitmap :: distinct Handle;
Hbrush :: distinct Handle;
Hgdiobj :: distinct Handle;
Hmodule :: distinct Handle;
@@ -28,6 +29,7 @@ Lresult :: distinct int;
Wnd_Proc :: distinct #type proc "c" (Hwnd, u32, Wparam, Lparam) -> Lresult;
Monitor_Enum_Proc :: distinct #type proc "std" (Hmonitor, Hdc, ^Rect, Lparam) -> bool;
+Uint_Ptr :: distinct uint;
Long_Ptr :: distinct int;
Bool :: distinct b32;
@@ -511,6 +513,7 @@ WM_SYSKEYDOWN :: 0x0104;
WM_SYSKEYUP :: 0x0105;
WM_USER :: 0x0400;
WM_WINDOWPOSCHANGED :: 0x0047;
+WM_COMMAND :: 0x0111;
WM_MOUSEWHEEL :: 0x020A;
WM_MOUSEMOVE :: 0x0200;
@@ -1034,6 +1037,134 @@ foreign user32 {
@(link_name="EnumDisplayMonitors") enum_display_monitors :: proc(hdc: Hdc, rect: ^Rect, enum_proc: Monitor_Enum_Proc, lparam: Lparam) -> bool ---;
}
+@(default_calling_convention = "c")
+foreign user32 {
+ @(link_name="CreateMenu") create_menu :: proc() -> Hmenu ---
+ @(link_name="CreatePopupMenu") create_popup_menu :: proc() -> Hmenu ---
+ @(link_name="DestroyMenu") destroy_menu :: proc(menu: Hmenu) -> Bool ---
+ @(link_name="DeleteMenu") delete_menu :: proc(menu: Hmenu, position: u32, flags: u32) -> Bool ---
+
+ @(link_name="EnableMenuItem") enable_menu_item :: proc(menu: Hmenu, id_enable_itme: i32, enable: u32) -> Bool ---
+ @(link_name="EndMenu") end_menu :: proc() -> Bool ---
+ @(link_name="GetMenu") get_menu :: proc(wnd: Hwnd) -> Hmenu ---
+ @(link_name="GetMenuBarInfo") get_menu_bar_info :: proc(wnd: Hwnd, id_object, id_item: u32, mbi: ^Menu_Bar_Info) -> Hmenu ---
+ @(link_name="GetMenuStringA") get_menu_string_a :: proc(menu: Hmenu, id_item: u32, s: string, cch_max: i32, flags: u32) -> i32 ---
+ @(link_name="GetMenuStringW") get_menu_string_w :: proc(menu: Hmenu, id_item: u32, s: Wstring, cch_max: i32, flags: u32) -> i32 ---
+ @(link_name="GetMenuState") get_menu_state :: proc(menu: Hmenu, id: u32, flags: u32) -> u32 ---
+ @(link_name="GetMenuItemRect") get_menu_item_rect :: proc(wnd: Hwnd, menu: Hmenu, id_item: u32, item: ^Rect) -> Bool ---
+
+ @(link_name="SetMenu") set_menu :: proc(wnd: Hwnd, menu: Hmenu) -> Hmenu ---
+
+ @(link_name="DrawMenuBar") draw_menu_bar :: proc(wnd: Hwnd) -> Bool ---
+ @(link_name="InsertMenuA") insert_menu_a :: proc(menu: Hmenu, position: u32, flags: u32, id_new_item: Uint_Ptr, new_item: cstring) -> Bool ---
+ @(link_name="InsertMenuW") insert_menu_w :: proc(menu: Hmenu, position: u32, flags: u32, id_new_item: Uint_Ptr, new_item: Wstring) -> Bool ---
+
+ @(link_name="InsertMenuItemA") insert_menu_item_a :: proc(menu: Hmenu, item: u32, by_position: bool, mi: ^Menu_Item_Info_A) -> Bool ---
+ @(link_name="InsertMenuItemW") insert_menu_item_w :: proc(menu: Hmenu, item: u32, by_position: bool, mi: ^Menu_Item_Info_W) -> Bool ---
+
+ @(link_name="AppendMenuA") append_menu_a :: proc(menu: Hmenu, flags: u32, id_new_item: Uint_Ptr, new_item: cstring) -> Bool ---
+ @(link_name="AppendMenuW") append_menu_w :: proc(menu: Hmenu, flags: u32, id_new_item: Uint_Ptr, new_item: Wstring) -> Bool ---
+
+ @(link_name="CheckMenuItem") check_menu_item :: proc(menu: Hmenu, id_check_item: u32, check: u32) -> u32 ---
+ @(link_name="CheckMenuRadioItem") check_menu_radio_item :: proc(menu: Hmenu, first, last: u32, check: u32, flags: u32) -> Bool ---
+
+ @(link_name="GetPropA") get_prop_a :: proc(wnd: Hwnd, s: cstring) -> Handle ---
+ @(link_name="GetPropW") get_prop_w :: proc(wnd: Hwnd, s: Wstring) -> Handle ---
+
+
+ @(link_name="MessageBoxExA") message_box_ex_a :: proc(wnd: Hwnd, text, caption: cstring, type: u32, language_id: u16) -> i32 ---
+ @(link_name="MessageBoxExW") message_box_ex_w :: proc(wnd: Hwnd, text, caption: Wstring, type: u32, language_id: u16) -> i32 ---
+}
+
+Menu_Bar_Info :: struct {
+ size: u32,
+ bar: Rect,
+ menu: Hmenu,
+ wnd_menu: Hwnd,
+ using fields: bit_field {
+ bar_focused: 1,
+ focuses: 1,
+ },
+}
+
+Menu_Item_Info_A :: struct {
+ size: u32,
+ mask: u32,
+ type: u32,
+ state: u32,
+ id: u32,
+ submenu: Hmenu,
+ bmp_checked: Hbitmap,
+ bmp_unchecked: Hbitmap,
+ item_data: u32,
+ type_data: cstring,
+ cch: u32,
+}
+Menu_Item_Info_W :: struct {
+ size: u32,
+ mask: u32,
+ type: u32,
+ state: u32,
+ id: u32,
+ submenu: Hmenu,
+ bmp_checked: Hbitmap,
+ bmp_unchecked: Hbitmap,
+ item_data: u32,
+ type_data: Wstring,
+ cch: u32,
+}
+
+MF_BYCOMMAND :: 0x00000000;
+MF_BYPOSITION :: 0x00000400;
+MF_BITMAP :: 0x00000004;
+MF_CHECKED :: 0x00000008;
+MF_DISABLED :: 0x00000002;
+MF_ENABLED :: 0x00000000;
+MF_GRAYED :: 0x00000001;
+MF_MENUBARBREAK :: 0x00000020;
+MF_MENUBREAK :: 0x00000040;
+MF_OWNERDRAW :: 0x00000100;
+MF_POPUP :: 0x00000010;
+MF_SEPARATOR :: 0x00000800;
+MF_STRING :: 0x00000000;
+MF_UNCHECKED :: 0x00000000;
+
+MB_ABORTRETRYIGNORE :: 0x00000002;
+MB_CANCELTRYCONTINUE :: 0x00000006;
+MB_HELP :: 0x00004000;
+MB_OK :: 0x00000000;
+MB_OKCANCEL :: 0x00000001;
+MB_RETRYCANCEL :: 0x00000005;
+MB_YESNO :: 0x00000004;
+MB_YESNOCANCEL :: 0x00000003;
+
+MB_ICONEXCLAMATION :: 0x00000030;
+MB_ICONWARNING :: 0x00000030;
+MB_ICONINFORMATION :: 0x00000040;
+MB_ICONASTERISK :: 0x00000040;
+MB_ICONQUESTION :: 0x00000020;
+MB_ICONSTOP :: 0x00000010;
+MB_ICONERROR :: 0x00000010;
+MB_ICONHAND :: 0x00000010;
+
+MB_DEFBUTTON1 :: 0x00000000;
+MB_DEFBUTTON2 :: 0x00000100;
+MB_DEFBUTTON3 :: 0x00000200;
+MB_DEFBUTTON4 :: 0x00000300;
+
+MB_APPLMODAL :: 0x00000000;
+MB_SYSTEMMODAL :: 0x00001000;
+MB_TASKMODAL :: 0x00002000;
+
+MB_DEFAULT_DESKTOP_ONLY :: 0x00020000;
+MB_RIGHT :: 0x00080000;
+MB_RTLREADING :: 0x00100000;
+MB_SETFOREGROUND :: 0x00010000;
+MB_TOPMOST :: 0x00040000;
+MB_SERVICE_NOTIFICATION :: 0x00200000;
+
+
+
@(default_calling_convention = "std")
foreign gdi32 {
@(link_name="GetStockObject") get_stock_object :: proc(fn_object: i32) -> Hgdiobj ---;