InsertMenuItem обрезает строку до первого символа - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь изменить системное меню окна, используя 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);

Результат приведенного выше кода enter image description here

1 Ответ

0 голосов
/ 01 сентября 2018

Хорошо, я наконец понял это. Я оставлю это здесь, так что, возможно, кто-то еще позже найдет это, когда он будет сбит с толку.

Причиной было то, что p / invink InsertMenuItem был определен с

[DllImport ("user32.dll")] на сайте pinvoke.net - см. https://www.pinvoke.net/default.aspx/user32/insertmenu.html?diff=y

и должно быть

[DllImport ("user32.dll", CharSet = CharSet.Auto)]

Я изменил страницу pinvoke.net, чтобы отразить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...