void CPluginsDlg::OnRClickPluginsList(NMHDR* pNMHDR, LRESULT* pResult) { DWORD dwID = GetSelectedPluginID(); KP_PLUGIN_INSTANCE *p = m_pPiMgr->GetPluginByID(dwID); UNREFERENCED_PARAMETER(pNMHDR); *pResult = 0; POINT pt; GetCursorPos(&pt); m_popmenu.LoadMenu(IDR_PLUGINS_MENU); m_popmenu.SetMenuDrawMode(BCMENU_DRAWMODE_XP); // <<<!=>>> BCMENU_DRAWMODE_ORIGINAL m_popmenu.SetSelectDisableMode(FALSE); m_popmenu.SetXPBitmap3D(TRUE); m_popmenu.SetBitmapBackground(RGB(255, 0, 255)); m_popmenu.SetIconSize(16, 16); m_popmenu.LoadToolbar(IDR_INFOICONS, IDB_INFOICONS_EX); BCMenu* psub = NewGUI_GetBCMenu(m_popmenu.GetSubMenu(0)); if(psub == NULL) { ASSERT(FALSE); psub = &m_popmenu; } // psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_ENABLE, m_pImgList, 2); // psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_DISABLE, m_pImgList, 45); psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_CONFIG, m_pImgList, 21); psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_ABOUT, m_pImgList, 22); CPwSafeDlg::_TranslateMenu(psub, FALSE, NULL); if(p != NULL) { // if(p->bEnabled == FALSE) // { // psub->EnableMenuItem(ID_PLUGIN_DISABLE, MF_BYCOMMAND | MF_GRAYED); // psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED); // psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED); // } // else psub->EnableMenuItem(ID_PLUGIN_ENABLE, MF_BYCOMMAND | MF_GRAYED); if(p->hinstDLL == NULL) { psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED); psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED); } } else { // psub->EnableMenuItem(ID_PLUGIN_ENABLE, MF_BYCOMMAND | MF_GRAYED); // psub->EnableMenuItem(ID_PLUGIN_DISABLE, MF_BYCOMMAND | MF_GRAYED); psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED); psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED); } psub->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); m_popmenu.DestroyMenu(); }
void NewGUI_RemoveInvalidSeparators(BCMenu *pMenu, BOOL bIsTopLevel) { ASSERT(pMenu != NULL); if(pMenu == NULL) return; int nSub = 0; while(true) { BCMenu *pSub = NewGUI_GetBCMenu(pMenu->GetSubMenu(nSub)); if(pSub == NULL) break; NewGUI_RemoveInvalidSeparators(pSub, FALSE); ++nSub; } BOOL bSepAllowed = FALSE; UINT uCount = pMenu->GetMenuItemCount(); for(UINT uItem = 0; uItem < uCount; ++uItem) { if(uItem == (uCount - 1)) bSepAllowed = FALSE; const UINT uState = pMenu->GetMenuState(uItem, MF_BYPOSITION); if((bIsTopLevel == FALSE) && ((uState & MF_SEPARATOR) != 0) && ((uState & MF_POPUP) == 0)) { if(bSepAllowed == FALSE) { pMenu->DeleteMenu(uItem, MF_BYPOSITION); --uCount; --uItem; if((uItem == (uCount - 1)) && (uItem >= 1)) --uItem; } bSepAllowed = FALSE; } else bSepAllowed = TRUE; } }