Cum folosesc SetMenuItemBitmaps ?

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
Post Reply
mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Cum folosesc SetMenuItemBitmaps ?

Post by mesajflaviu » 14 Jun 2012, 22:31

Am vazut in msdn un exemplu de folosire a metodei CMenu::SetMenuItemBitmaps(...) pe care am reprodus-o in exemplu atasat, (pentru exemplu scoala e numa' bun):

Code: Select all

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if(CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;
	
...
...
///*//////////////////////////////////////////////////////////////
	ASSERT(m_BitmapAlert.LoadBitmap(IDB_BITMAP_ALERT));
	ASSERT(m_BitmapBreak.LoadBitmap(IDB_BITMAP_BREAK));

	CMenu* pMenu = GetMenu();
	CMenu* pSubMenu = pMenu->GetSubMenu(0);
	if(pSubMenu)
	{
		pSubMenu->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_BitmapAlert,NULL);
		pSubMenu->SetMenuItemBitmaps(1,MF_BYPOSITION,&m_BitmapBreak,NULL);
	}
///*//////////////////////////////////////////////////////////////
	return 0;
}
raman totusi unele probleme : cu codul de mai sus am incarcat de test 2 bitmap-uri in meniul IDR_MAINFRAME, nu si in IDR_TESTMETYPE ... unde as putea incarca aceste bitmap-uri in ambele meniuri ? Si cum in situatia reala e vorba de mai mult de 2 bitmap-uri, nu as putea incarca un CImageList ? Ca detaliu, cum pot scapa de fundalul alb al bitmap-urilor ?
Am gasit gasit pe net niste controale derivate din CMenu dar nu cred ca ar fi nevoie de asa ceva de vreme ce CMenu stie sa puna bitmap-uri deja ... plus ca toate aceste controale suprascriu OwnerDraw care pe urma face probleme la stilul sistemului de operare ...
Orice ajutor e binevenit, oricat de mic ...
Attachments
TestMenu.zip
(117.86 KiB) Downloaded 292 times



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Cum folosesc SetMenuItemBitmaps ?

Post by Ovidiu Cucu » 15 Jun 2012, 12:15

Intr-un MDI, framework-ul isi incarca dinamic meniurile in functie de ce document template este activ.
Parca am mai sapat odata prin tema asta in forum, insa nu mai stiu daca am gasit sau nu o functie virtuala in care sa prind aceste momente.

Oricum insa, un mod bun (si universal) de a customiza item-urile de menu este in WM_INITMENUPOPUP.

Exemplu

Code: Select all

void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
   CMDIFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

   pPopupMenu->SetMenuItemBitmaps(ID_FILE_NEW, MF_BYCOMMAND, &m_bmpFileNew, NULL);
   pPopupMenu->SetMenuItemBitmaps(ID_FILE_OPEN, MF_BYCOMMAND, &m_bmpFileOpen, NULL);
}
That's all.

mesajflaviu
Membru++
Membru++
Posts: 687
Joined: 10 Sep 2008, 21:40
Judet: Cluj

Re: Cum folosesc SetMenuItemBitmaps ?

Post by mesajflaviu » 15 Jun 2012, 12:26

Brici ! Este exact ce imi trebuia ! I thank you !

Post Reply