新手提问:关于动态菜单的问题
习题:
动态菜单,用户点击“更多菜单”,增加一些菜单项。
其实,自画菜单原理不难理解.AppendMenu的风格选自画,将自画用的信息(指针)强制转化成LPCTSTR,再重
载DrawItem就行了,注意自画用的信息不要提前delete了.
我的问题:
怎么把上面的代码加到程序里去,在编译运行看效果?我是新手,才学习VC,往大家多指点,说详细点,把每个步骤都说一下,我跟这走,谢谢了
例子附带的代码如下:
COwnerMenu.h中
class CMenuItem
{
public:
CString m_szText;
COLORREF m_color;
CMenuItem(CString szText,COLORREF color)
{
m_szText = szText;
m_color = color;
}
};
#include
class COwnerMenu : public CMenu
{
public:
void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
bool AppendMenu(UINT nIDNewItem,CString caption,COLORREF color);
COwnerMenu();
CTypedPtrList m_MenuList;
virtual ~COwnerMenu();
};
COwnerMenu.cpp中
COwnerMenu::~COwnerMenu()
{
while(m_MenuList.GetCount())
{
CMenuItem *pMenuItem = m_MenuList.GetHead();
delete pMenuItem;
m_MenuList.RemoveHead();
}
}
bool COwnerMenu::AppendMenu(UINT nIDNewItem, CString caption, COLORREF color)
{
CMenuItem * pMenuItem = new CMenuItem(caption,color);
m_MenuList.AddTail(pMenuItem);
return CMenu::AppendMenu(MF_OWNERDRAW,nIDNewItem,(LPCTSTR)pMenuItem);
}
void COwnerMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->SetTextColor(((CMenuItem*)lpDrawItemStruct->itemData)->m_color);
pDC->TextOut(0,0,((CMenuItem*)lpDrawItemStruct->itemData)->m_szText);
}
在使用菜单的地方(不要忘记了加头文件):
void COwnerMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
COwnerMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(ID_1,"1",RGB(0,0,128));
ClientToScreen(&point);
menu.TrackPopupMenu(TPM_LEFTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);
CView::OnRButtonDown(nFlags, point);
}
我的问题:怎么把上面的代码加到程序里去,在编译运行看效果?我是新手,才学习VC,往大家多指点,说详细点,把每个步骤都说一下,我跟这走,谢谢了