本文介绍了为什么我的GetMenuItemInfo调用不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我正在使用它来检索菜单作为字符串列表并将其返回到主程序。请注意,Win32只是一个单独的类,我编写了一些主要的Win32调用。



So, I'm currently using this to retrieve a menu as a list of strings and return it back to the main program. Please note that "Win32" is just a separate class where I coded some of the main Win32 calls.

List<string> ls = new List<string>();
            IntPtr hMenu = Win32.GetMenu(hWnd);

                if (hMenu.ToInt32() != 0)
                {

                    for (int i = Win32.GetMenuItemCount(hMenu); i >= 0; i--)
                    {
                        uint MIIM_STRING = 0x00000040;
                        uint MFT_STRING  = 0x00000000;
                        Win32.MENUITEMINFO mif = new Win32.MENUITEMINFO();
                        mif.cbSize = (uint)Marshal.SizeOf(typeof(Win32.MENUITEMINFO));
                        mif.fMask = MIIM_STRING;
                        mif.fType = MFT_STRING;
                        mif.dwTypeData = null;
                        bool a = Win32.GetMenuItemInfo(hMenu, 0, true, ref mif);
                        ls.Add(mif.dwTypeData);
                    }
                }

            return ls;





然而,每当我运行程序时,dwTypeData仍然返回null。我知道我的声明和语法是正确的,因为GetMenuItemInfo返回true。必须有一些我缺少的东西......任何想法?



Yet, whenever I run the program, dwTypeData still returns null. I know my declarations and syntax is correct because GetMenuItemInfo returns true. There must be something I'm missing... any ideas?

推荐答案

List<string> ls = new List<string>();
IntPtr hMenu = Win32.GetMenu(hWnd);

    if (hMenu.ToInt32() != 0)
    {
        char[] szString = new char[256];
        for (int i = Win32.GetMenuItemCount(hMenu); i >= 0; i--)
        {
            uint MIIM_STRING = 0x00000040;
            uint MFT_STRING  = 0x00000000;
            Win32.MENUITEMINFO mif = new Win32.MENUITEMINFO();
            mif.cbSize = (uint)Marshal.SizeOf(typeof(Win32.MENUITEMINFO));
            mif.fMask = MIIM_STRING;
            mif.fType = MFT_STRING;
            mif.cch = 256;
            mif.dwTypeData = szString;

            bool a = Win32.GetMenuItemInfo(hMenu, 0, true, ref mif);
            ls.Add(mif.dwTypeData);
        }
    }

return ls;


这篇关于为什么我的GetMenuItemInfo调用不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-08 18:57