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。

  • 相关阅读:
    0121 集合类 ArrayList 的练习
    0121 有关接口的使用练习
    泛型相关知识
    0120 父类与子类创建、重写及转型练习
    0118练习 单例模式
    java设计模式 略版
    0117 面向对象OOP有关方法、类、构造方法及权限修饰符的练习
    0115 创建类并调用
    [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)
    POJ1284 Primitive Roots (原根)
  • 原文地址:https://www.cnblogs.com/rufi/p/1666767.html
Copyright © 2011-2022 走看看