InsertMenuItem将字符串切断为第一个char
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了InsertMenuItem将字符串切断为第一个char相关的知识,希望对你有一定的参考价值。
我试图使用InsertMenuItem修改窗口的系统菜单(而不是InsertMenu - 原因是我想最终插入子菜单)。语言是C#。
尝试插入一个新项目,尝试获取现有项目并重新插入它,它插入,但项目字符串仅在菜单中显示为第一个字符。任何人都知道我错过了什么?
// try creating one from scratch
MENUITEMINFO it = new MENUITEMINFO();
it.cbSize = (uint)Marshal.SizeOf(it);
it.fMask = 64;// MIIM_STRING
it.wID = 12345;
it.dwTypeData = "Now is the time";
it.fType = 0;
it.cch = 0;
InsertMenuItem(hSysMenu, 7, true, ref it);
//try copying one
GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
it.cch += 10;
it.dwTypeData = new string(' ', (int)(menuItemInfo.cch+10));
GetMenuItemInfo(hSysMenu, (uint)0, true, ref it);
it.wID = 123456;
var err = InsertMenuItem(hSysMenu, 1, true, ref it);
答案
好吧,我终于明白了。我会把它留在这里,所以当他们对此感到困惑时,也许其他人会发现它。
原因是InsertMenuItem p / invoke是用。定义的
pinvoke.net网站中的[DllImport(“user32.dll”)] - 请参阅https://www.pinvoke.net/default.aspx/user32/insertmenu.html?diff=y
它需要
[DllImport(“user32.dll”,CharSet = CharSet.Auto)]
我更改了pinvoke.net页面以反映它。
以上是关于InsertMenuItem将字符串切断为第一个char的主要内容,如果未能解决你的问题,请参考以下文章
不确定为啥 toupper() 会切断 C 中的最后一个字母
编写有字符型参数c和整型参数N的函数,让它显示出由字符c组成的三角形。其方式为第1行有一个字符c,第2行有2个字符c等等-简单