mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-07 05:23:12 +00:00
Update sys/win32; Add Menu stuff
This commit is contained in:
@@ -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 ---;
|
||||
|
||||
Reference in New Issue
Block a user