Ich versuche, ein benutzerdefiniertes Popup-Menü auf MFC-Single-Dokument-Schnittstelle (SDI) Projekt zu zeichnen.
Von here, fand ich The framework calls this member function for the owner of an owner-draw button control, combo-box control, list-box control, or menu when a visual aspect of the control or menu has changed.
So habe ich den Griff OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
und einige Codes in dieser Funktion hinzugefügt, aber ich fand, dass dieser Rückruf nicht vom Framework aufgerufen werden, als ich rechts auf der Ansicht klicken, wie folgt:
Wie mache ich ein Popup-Menü dynamisch?Wie zeichne ich ein benutzerdefiniertes Menü auf MFC SDI dynamisch
Hier ist, wie ich mein Pop-up-Menü:
void Cdynamic_menu_sdiView::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
if (IDR_MY_MENU == 0)
return;
CMenu dynamicMenu, proxyMenu;
if (dynamicMenu.GetSafeHmenu())
dynamicMenu.DestroyMenu();
// Create a new popup menu.
if (dynamicMenu.CreatePopupMenu() == FALSE)
return;
if (proxyMenu.LoadMenu(IDR_MY_MENU) == FALSE)
return;
int nSubMenu = 1;
CMenu* pProxyMenu = proxyMenu.GetSubMenu(nSubMenu);
build_dynamic_menu(m_map_menu_element_2, pProxyMenu, dynamicMenu, CString(""));
//m_menu_on_draw = &dynamicMenu; // link up the dynamic menu to the on draw menu, so that we can print it on the screen
CPoint ptCurPos; // current cursor position
GetCursorPos(&ptCurPos);
dynamicMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, ptCurPos.x, ptCurPos.y, AfxGetMainWnd(), NULL);
}
Innerhalb der Funktion build_dynamic_menu()
, es ist eine Tiefe erste Suchfunktion, ich InsertMenu(i, MF_BYPOSITION | MF_POPUP | MF_OWNERDRAW, uSubMenuID, strLabel);
, so dass ich den Text der Popup-Menüs ändern kann dynamisch .
Da es zu lang ist, um die Funktion hier zu setzen, sage ich nur die Idee.
Ich möchte auch die Textfarbe und Hintergrundfarbe dynamisch ändern, also versuche ich, eine Möglichkeit zu finden, das Menü nach Code zu zeichnen.
Wo soll ich anfangen? Ist Ansatz gut für mich?
Ist es ein Menü für Besitzer? Wenn nicht, wird diese Funktion nicht aufgerufen. – immibis
Danke, @immibis, ich werde versuchen, diese zuerst zu betrachten: http://www.codeproject.com/Articles/7073/Wie_Eigener_Eigener_Eigener-gezeichnet-menus-Schritt-für-Schritt' – sflee
It doesn habe nichts mit 'OnDrawItem' zu tun. Zeigen Sie, wie Sie das Popup-Menü laden. –