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>> { ... }
}
Available on crate features 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§

source

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"),
])?;
source

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),
}
source

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),
    }
}
source

fn track_popup_menu_at_point( &self, pos: POINT, hwnd_parent: &HWND, hwnd_coords_relative_to: &HWND ) -> SysResult<()>

Shows the popup menu anchored at the given coordinates using TrackPopupMenu, and performs other needed operations.

This method will block until the menu disappears.

source

fn AppendMenu( &self, flags: MF, new_item: IdMenu<'_>, content: BmpPtrStr ) -> SysResult<()>

AppendMenu function.

This method is rather tricky, consider using HMENU::append_item.

source

fn CheckMenuItem(&self, id_or_pos: IdPos, check: bool) -> SysResult<MF>

CheckMenuItem function.

source

fn CheckMenuRadioItem( &self, first: IdPos, last: IdPos, check: IdPos ) -> SysResult<()>

CheckMenuRadioItem function.

§Panics

Panics if first, last and check don’t use the same enum field.

source

fn CreateMenu() -> SysResult<HMENU>

CreateMenu function.

Note: If not attached to a window, must be paired with an HMENU::DestroyMenu call.

source

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.

source

fn DeleteMenu(&self, id_or_pos: IdPos) -> SysResult<()>

DeleteMenu function.

source

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.

source

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(|_| ())
    )?;
source

fn GetMenuDefaultItem(&self, by_pos: bool, flags: GMDI) -> SysResult<IdPos>

source

fn GetMenuInfo(&self, mi: &mut MENUINFO) -> SysResult<()>

GetMenuInfo function.

source

fn GetMenuItemCount(&self) -> SysResult<u32>

GetMenuItemCount function.

source

fn GetMenuItemID(&self, item_index: i32) -> Option<u16>

GetMenuItemID function.

If item_index corresponds to a submenu, returns None.

source

fn GetMenuItemInfo( &self, id_or_pos: IdPos, mii: &mut MENUITEMINFO ) -> SysResult<()>

GetMenuItemInfo function.

This method is rather tricky, consider using HMENU::item_info.

source

fn GetMenuState(&self, id_or_pos: IdPos) -> SysResult<MF>

GetMenuState function.

source

fn GetMenuString(&self, id_or_pos: IdPos) -> SysResult<String>

GetMenuString function.

source

fn GetSubMenu(&self, pos: u32) -> Option<HMENU>

GetSubMenu function.

source

fn InsertMenuItem(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>

InsertMenuItem function.

source

fn IsMenu(&self) -> bool

IsMenu function.

source

fn RemoveMenu(&self, id_or_pos: IdPos) -> SysResult<()>

RemoveMenu function.

source

fn SetMenuDefaultItem(&self, id_or_pos: IdPos) -> SysResult<()>

source

fn SetMenuInfo(&self, mi: &MENUINFO) -> SysResult<()>

SetMenuInfo function.

source

fn SetMenuItemBitmaps( &self, id_or_pos: IdPos, hbmp_unchecked: Option<&HBITMAP>, hbmp_checked: Option<&HBITMAP> ) -> SysResult<()>

source

fn SetMenuItemInfo(&self, id_or_pos: IdPos, mii: &MENUITEMINFO) -> SysResult<()>

SetMenuItemInfo function.

source

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.

Object Safety§

This trait is not object safe.

Implementors§