Hello all. I am new to this forum and Notepad++ plug-in development. I'm a college student trying to make NPP interface with a refactoring engine developed at my University.
Right now I'm trying to find out how to populate the plug-in submenu based on the type of the currently displayed file. So (1) is there a way to add or remove items from the submenu on the go? Or (2) could I deactivate menu items even if they are visible?
Any help would be greatly appreciated!
Yes you can, probably I'm not doing this in most optimal way, but I guess if someone would say the better way, that would help me also.
At first you have to find your plugin's menu, by using something like this (YOUR_PLUGIN_NAME is const string equal to your plugin's name and YourPluginMenu is HMENU result):
HMENU PluginsMenu = (HMENU) SendMessage (NppHandle, NPPM_GETMENUHANDLE, NPPPLUGINMENU, 0);
HMENU YourPluginMenu = 0;
int Count = GetMenuItemCount (PluginsMenu);
int StrLen = 0;
TCHAR *Buf = 0;
for (int i = 0; i < Count; i++)
StrLen = GetMenuString (PluginsMenu, i, 0, 0, MF_BYPOSITION);
Buf = new TCHAR[StrLen + 1];
GetMenuString (PluginsMenu, i, Buf, StrLen + 1, MF_BYPOSITION);
if (_tcscmp (Buf, YOUR_PLUGIN_NAME) == 0)
Mif.fMask = MIIM_ID;
Mif.cbSize = sizeof (MENUITEMINFO);
BOOL Res = GetMenuItemInfo (PluginsMenu, i, TRUE, &Mif);
YourPluginMenu = (HMENU) Mif.wID;
delete  (Buf);
delete  (Buf);
After that you can just use SetMenuItemInfo with corresponding parameters and needed menu index to make it disabled.
The other approach would be I guess to get submenu of item found by string comparison and just completely rebuild it, using ids obtained by NPPM_ALLOCATECMDID command and then parse it's result by yourself in MessageProc on WM_COMMAND. That way you can build completely your own menu and change it however you like.
Sign up for the SourceForge newsletter:
You seem to have CSS turned off.
Please don't fill out this field.