Trait winsafe::prelude::user_Hmenu
source · pub trait user_Hmenu: Handle {
Show 28 methods
// Provided methods
fn append_item(&self, items: &[MenuItem<'_>]) -> SysResult<()> { ... }
fn item_info(&self, id_or_pos: IdPos) -> SysResult<MenuItemInfo> { ... }
fn iter_items(&self) -> impl Iterator<Item = SysResult<MenuItemInfo>> + '_ { ... }
fn track_popup_menu_at_point(
&self,
pos: POINT,
hwnd_parent: &HWND,
hwnd_coords_relative_to: &HWND
) -> SysResult<()> { ... }
fn AppendMenu(
&self,
flags: MF,
new_item: IdMenu<'_>,
content: BmpPtrStr
) -> SysResult<()> { ... }
fn CheckMenuItem(&self, id_or_pos: IdPos, check: bool) -> SysResult<MF> { ... }
fn CheckMenuRadioItem(
&self,
first: IdPos,
last: IdPos,
check: IdPos
) -> SysResult<()> { ... }
fn CreateMenu() -> SysResult<HMENU> { ... }
fn CreatePopupMenu() -> SysResult<HMENU> { ... }
fn DeleteMenu(&self, id_or_pos: IdPos) -> SysResult<()> { ... }
fn DestroyMenu(&mut self) -> SysResult<()> { ... }
fn EnableMenuItem(&self, id_or_pos: IdPos, enable: bool) -> SysResult<MF> { ... }
fn GetMenuDefaultItem(&self, by_pos: bool, flags: GMDI) -> SysResult<IdPos> { ... }
fn GetMenuInfo(&self, mi: &mut MENUINFO) -> SysResult<()> { ... }
fn GetMenuItemCount(&self) -> SysResult<u32> { ... }
fn GetMenuItemID(&self, item_index: i32) -> Option<u16> { ... }
fn GetMenuItemInfo(
&self,
id_or_pos: IdPos,
mii: &mut MENUITEMINFO
) -> SysResult<()> { ... }
fn GetMenuState(&self, id_or_pos: IdPos) -> SysResult<MF> { ... }
fn GetMenuString(&self, id_or_pos: IdPos) -> SysResult<String> { ... }
fn GetSubMenu(&self, pos: u32) -> Option<HMENU> { ... }
fn InsertMenuItem(
&self,
id_or_pos: IdPos,
mii: &MENUITEMINFO
) -> SysResult<()> { ... }
fn IsMenu(&self) -> bool { ... }
fn RemoveMenu(&self, id_or_pos: IdPos) -> SysResult<()> { ... }
fn SetMenuDefaultItem(&self, id_or_pos: IdPos) -> SysResult<()> { ... }
fn SetMenuInfo(&self, mi: &MENUINFO) -> SysResult<()> { ... }
fn SetMenuItemBitmaps(
&self,
id_or_pos: IdPos,
hbmp_unchecked: Option<&HBITMAP>,
hbmp_checked: Option<&HBITMAP>
) -> SysResult<()> { ... }
fn SetMenuItemInfo(
&self,
id_or_pos: IdPos,
mii: &MENUITEMINFO
) -> SysResult<()> { ... }
fn TrackPopupMenu(
&self,
flags: TPM,
location: POINT,
hwnd: &HWND
) -> SysResult<Option<i32>> { ... }
}
kernel
and user
only.Expand description
This trait is enabled with the user
feature, and provides methods for
HMENU
.
Prefer importing this trait through the prelude:
use winsafe::prelude::*;
Provided Methods§
sourcefn append_item(&self, items: &[MenuItem<'_>]) -> SysResult<()>
fn append_item(&self, items: &[MenuItem<'_>]) -> SysResult<()>
A more convenient
HMENU::AppendMenu
.
§Examples
Adding multiple entries at once, with their command IDs:
use winsafe::{self as w, prelude::*, seq_ids};
seq_ids! {
ID_FILE_OPEN = 2001;
ID_FILE_SAVE
ID_FILE_EXIT
}
let hmenu: w::HMENU; // initialized somewhere
hmenu.append_item(&[
w::MenuItem::Entry(ID_FILE_OPEN, "&Open"),
w::MenuItem::Entry(ID_FILE_OPEN, "&Save"),
w::MenuItem::Separator,
w::MenuItem::Entry(ID_FILE_EXIT, "E&xit"),
])?;
sourcefn item_info(&self, id_or_pos: IdPos) -> SysResult<MenuItemInfo>
fn item_info(&self, id_or_pos: IdPos) -> SysResult<MenuItemInfo>
Simpler version of
HMENU::GetMenuItemInfo
,
which returns a MenuItemInfo
instead of the
tricky MENUITEMINFO
.
§Examples
use winsafe::{self as w, prelude::*};
let hmenu: w::HMENU; // initialized somewhere
let item_info = hmenu.item_info(w::IdPos::Id(0))?;
match item_info {
w::MenuItemInfo::Entry(id, txt) => println!("item {} {}", id, txt),
w::MenuItemInfo::Separator => println!("separator"),
w::MenuItemInfo::Submenu(hsub, txt) => println!("submenu {} {}", hsub, txt),
}
sourcefn iter_items(&self) -> impl Iterator<Item = SysResult<MenuItemInfo>> + '_
fn iter_items(&self) -> impl Iterator<Item = SysResult<MenuItemInfo>> + '_
Returns an iterator over all menu items, including submenus and separators.
§Examples
use winsafe::{self as w, prelude::*};
let hmenu: w::HMENU; // initialized somewhere
for item_info in hmenu.iter_items() {
let item_info = item_info?;
match item_info {
w::MenuItemInfo::Entry(id, txt) => println!("item {} {}", id, txt),
w::MenuItemInfo::Separator => println!("separator"),
w::MenuItemInfo::Submenu(hsub, txt) => println!("submenu {} {}", hsub, txt),
}
}
Shows the popup menu anchored at the given coordinates using
TrackPopupMenu
, and
performs other needed operations.
This method will block until the menu disappears.
sourcefn AppendMenu(
&self,
flags: MF,
new_item: IdMenu<'_>,
content: BmpPtrStr
) -> SysResult<()>
fn AppendMenu( &self, flags: MF, new_item: IdMenu<'_>, content: BmpPtrStr ) -> SysResult<()>
AppendMenu
function.
This method is rather tricky, consider using
HMENU::append_item
.
sourcefn CheckMenuItem(&self, id_or_pos: IdPos, check: bool) -> SysResult<MF>
fn CheckMenuItem(&self, id_or_pos: IdPos, check: bool) -> SysResult<MF>
CheckMenuItem
function.
sourcefn CreateMenu() -> SysResult<HMENU>
fn CreateMenu() -> SysResult<HMENU>
CreateMenu
function.
Note: If not attached to a window, must be paired with an
HMENU::DestroyMenu
call.
sourcefn CreatePopupMenu() -> SysResult<HMENU>
fn CreatePopupMenu() -> SysResult<HMENU>
CreatePopupMenu
function.
Note: When a menu is attached to a window, it’s automatically
destroyed along with the window. However, if the menu is not attached to
any window, you must call
HMENU::DestroyMenu
.
sourcefn DeleteMenu(&self, id_or_pos: IdPos) -> SysResult<()>
fn DeleteMenu(&self, id_or_pos: IdPos) -> SysResult<()>
DeleteMenu
function.
sourcefn DestroyMenu(&mut self) -> SysResult<()>
fn DestroyMenu(&mut self) -> SysResult<()>
DestroyMenu
function.
After calling this method, the handle will be invalidated and further
operations will fail with
ERROR::INVALID_HANDLE
error code.
sourcefn EnableMenuItem(&self, id_or_pos: IdPos, enable: bool) -> SysResult<MF>
fn EnableMenuItem(&self, id_or_pos: IdPos, enable: bool) -> SysResult<MF>
EnableMenuItem
function.
§Examples
Disabling a menu item:
use winsafe::{self as w, prelude::*, seq_ids};
seq_ids! {
ID_FILE_OPEN = 101;
}
let hmenu: w::HMENU; // initialized somewhere
hmenu.EnableMenuItem(
w::IdPos::Id(ID_FILE_OPEN),
false,
)?;
Disabling multiple menu items at once:
use winsafe::{self as w, prelude::*, seq_ids};
seq_ids! {
ID_FILE_OPEN = 201;
ID_FILE_SAVE
}
let hmenu: w::HMENU; // initialized somewhere
[ID_FILE_OPEN, ID_FILE_SAVE]
.into_iter()
.try_for_each(|id|
hmenu.EnableMenuItem(
w::IdPos::Id(id),
false,
).map(|_| ())
)?;
sourcefn GetMenuDefaultItem(&self, by_pos: bool, flags: GMDI) -> SysResult<IdPos>
fn GetMenuDefaultItem(&self, by_pos: bool, flags: GMDI) -> SysResult<IdPos>
GetMenuDefaultItem
function.
sourcefn GetMenuInfo(&self, mi: &mut MENUINFO) -> SysResult<()>
fn GetMenuInfo(&self, mi: &mut MENUINFO) -> SysResult<()>
GetMenuInfo
function.
sourcefn GetMenuItemCount(&self) -> SysResult<u32>
fn GetMenuItemCount(&self) -> SysResult<u32>
GetMenuItemCount
function.
sourcefn GetMenuItemID(&self, item_index: i32) -> Option<u16>
fn GetMenuItemID(&self, item_index: i32) -> Option<u16>
GetMenuItemID
function.
If item_index
corresponds to a submenu, returns None
.
sourcefn GetMenuItemInfo(
&self,
id_or_pos: IdPos,
mii: &mut MENUITEMINFO
) -> SysResult<()>
fn GetMenuItemInfo( &self, id_or_pos: IdPos, mii: &mut MENUITEMINFO ) -> SysResult<()>
GetMenuItemInfo
function.
This method is rather tricky, consider using
HMENU::item_info
.
sourcefn GetMenuState(&self, id_or_pos: IdPos) -> SysResult<MF>
fn GetMenuState(&self, id_or_pos: IdPos) -> SysResult<MF>
GetMenuState
function.
sourcefn GetMenuString(&self, id_or_pos: IdPos) -> SysResult<String>
fn GetMenuString(&self, id_or_pos: IdPos) -> SysResult<String>
GetMenuString
function.
sourcefn GetSubMenu(&self, pos: u32) -> Option<HMENU>
fn GetSubMenu(&self, pos: u32) -> Option<HMENU>
GetSubMenu
function.
sourcefn InsertMenuItem(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>
fn InsertMenuItem(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>
InsertMenuItem
function.
sourcefn RemoveMenu(&self, id_or_pos: IdPos) -> SysResult<()>
fn RemoveMenu(&self, id_or_pos: IdPos) -> SysResult<()>
RemoveMenu
function.
sourcefn SetMenuDefaultItem(&self, id_or_pos: IdPos) -> SysResult<()>
fn SetMenuDefaultItem(&self, id_or_pos: IdPos) -> SysResult<()>
SetMenuDefaultItem
function.
sourcefn SetMenuInfo(&self, mi: &MENUINFO) -> SysResult<()>
fn SetMenuInfo(&self, mi: &MENUINFO) -> SysResult<()>
SetMenuInfo
function.
sourcefn SetMenuItemBitmaps(
&self,
id_or_pos: IdPos,
hbmp_unchecked: Option<&HBITMAP>,
hbmp_checked: Option<&HBITMAP>
) -> SysResult<()>
fn SetMenuItemBitmaps( &self, id_or_pos: IdPos, hbmp_unchecked: Option<&HBITMAP>, hbmp_checked: Option<&HBITMAP> ) -> SysResult<()>
SetMenuItemBitmaps
function.
sourcefn SetMenuItemInfo(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>
fn SetMenuItemInfo(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>
SetMenuItemInfo
function.
sourcefn TrackPopupMenu(
&self,
flags: TPM,
location: POINT,
hwnd: &HWND
) -> SysResult<Option<i32>>
fn TrackPopupMenu( &self, flags: TPM, location: POINT, hwnd: &HWND ) -> SysResult<Option<i32>>
TrackPopupMenu
function.
Note: If you just want to display a popup menu, consider the simpler
HMENU::track_popup_menu_at_point
.