zoukankan      html  css  js  c++  java
  • Total Commander里Help菜单在菜单栏右对齐的效果的实现方法

    Total Commander里Help菜单在菜单栏右对齐的效果是什么原理,用C#怎么做?

    如图:

     谢谢 游民一族 的指点,终于找到方法了。

            [StructLayout(LayoutKind.Sequential)]
            
    public class MenuItemInfo
            {
                
    public Int32 cbSize;
                
    public Int32 fMask;
                
    public Int32 fType;
                
    public Int32 fState;
                
    public Int32 wID;
                
    public IntPtr hSubMenu;
                
    public IntPtr hbmpChecked;
                
    public IntPtr hbmpUnchecked;
                
    public IntPtr dwItemData;
                
    public string dwTypeData;
                
    public Int32 cch;
            }

            [DllImport(
    "user32.dll", CharSet = CharSet.Auto)]
            
    public static extern bool GetMenuItemInfo(
                HandleRef menuHandle,
                Int32 itemIndex,
                
    bool byPosition,
                [In, Out]MenuItemInfo menuItemInfo);

            [DllImport(
    "user32.dll", CharSet = CharSet.Auto)]
            
    public static extern bool SetMenuItemInfo(
                HandleRef menuHandle,
                Int32 itemIndex,
                
    bool byPosition,
                MenuItemInfo menuItemInfo);

            
    const Int32 MIIM_FTYPE = 0x00000100;
            
    const Int32 MFT_RIGHTJUSTIFY = 0x00004000;

            
    public static void RightJustifyMenuItem(MenuItem menuItem)
            {
                HandleRef menuHandle 
    = new HandleRef(menuItem.Parent, menuItem.Parent.Handle);
                MenuItemInfo menuItemInfo 
    = new MenuItemInfo();
                menuItemInfo.cbSize 
    = Marshal.SizeOf(typeof(MenuItemInfo));
                menuItemInfo.fMask 
    = MIIM_FTYPE;
                GetMenuItemInfo(menuHandle, menuItem.Index, 
    true, menuItemInfo);
                menuItemInfo.fType 
    = menuItemInfo.fType | MFT_RIGHTJUSTIFY;
                SetMenuItemInfo(menuHandle, menuItem.Index, 
    true, menuItemInfo);
            }

    刚开始我把MenuItemInfo定义为struct,总是报Attempted to read or write protected memory的异常,搞了好半天才发现要用class。

  • 相关阅读:
    GMS问题_ThemeHostTest#testThemes
    解压system.img
    Android10_原理机制系列_AMS(ATMS)之应用的第一次启动的过程
    Android10_原理机制系列_AMS之AMS的启动
    如何用云开发高效快捷地实现短信验证码登录?
    推荐一款强大的前端CLI命令行工具
    CloudBase Framework丨第一个 Deno 部署工具是如何打造的?
    实战 | 打造一个双端自动发布的博客体系(下)
    从java注解漫谈到typescript装饰器——注解与装饰器
    TS数据类型:从C++/Java/Python到TS看元组tuple—元组的来龙去脉
  • 原文地址:https://www.cnblogs.com/rufi/p/1666767.html
Copyright © 2011-2022 走看看