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。

  • 相关阅读:
    插件化架构深入剖析<一>-----插庄式实现Activity跳转机制剖析
    网易云音乐动态式换肤框架分析与手写实现<三>
    网易云音乐动态式换肤框架分析与手写实现<二>
    网易云音乐动态式换肤框架分析与手写实现<一>
    跨进程架构HermesEventBus原理分析到手写实现<三>
    在eclipse里用jdbc连接MySQL
    jdk环境变量配置
    oracle设置主键自增
    关于Navicat连接oralcle出现Cannot load OCI DLL 87,126,193 ,ORA-28547等错误
    Oracle 11g 安装过程及测试方法
  • 原文地址:https://www.cnblogs.com/rufi/p/1666767.html
Copyright © 2011-2022 走看看