新手提问:关于动态菜单的问题

ysysbaobei 2008-12-30 09:55:32
习题:
动态菜单,用户点击“更多菜单”,增加一些菜单项。
其实,自画菜单原理不难理解.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,往大家多指点,说详细点,把每个步骤都说一下,我跟这走,谢谢了
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysysbaobei 2008-12-30
  • 打赏
  • 举报
回复
Compiling...
vc1229_2View.cpp
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(112) : error C2065: 'COwnerMenu' : undeclared identifier
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(112) : error C2146: syntax error : missing ';' before identifier 'menu'
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(112) : error C2065: 'menu' : undeclared identifier
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(113) : error C2228: left of '.CreatePopupMenu' must have class/struct/union type
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(115) : error C2228: left of '.AppendMenuA' must have class/struct/union type
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(115) : error C2065: 'ID_1' : undeclared identifier
D:\Program Files\Microsoft Visual Studio\vc\vc1229_2\vc1229_2View.cpp(118) : error C2228: left of '.TrackPopupMenu' must have class/struct/union type
COwnerMenu.cpp
d:\program files\microsoft visual studio\vc\vc1229_2\cownermenu.cpp(28) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Generating Code...
Error executing cl.exe.
Creating browse info file...
BSCMAKE: error BK1506 : cannot open file '.\Debug\COwnerMenu.sbr': No such file or directory
Error executing bscmake.exe.

vc1229_2.exe - 9 error(s), 0 warning(s)
顶上去
ysysbaobei 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 id27145 的回复:]
已经什么都写好了。。
先建两个文件COwnerMenu.h/cpp 把COwnerMenu的声明,定义放进去
建一工程,包含这两个文件, 再在你想要效果的地方添加右击响应函数,如CxxxView里或CxxDlg里
把上面OnRButtonDown里的东西拷过去

CTypedPtrList m_MenuList; -这个写法?
CTypedPtrList <CObList, CMenuItem*> m_MenuList;
[/Quote]
能否从头到尾,说一下?
才接触VC,不太懂
id27145 2008-12-30
  • 打赏
  • 举报
回复
已经什么都写好了。。
先建两个文件COwnerMenu.h/cpp 把COwnerMenu的声明,定义放进去
建一工程,包含这两个文件, 再在你想要效果的地方添加右击响应函数,如CxxxView里或CxxDlg里
把上面OnRButtonDown里的东西拷过去

CTypedPtrList m_MenuList; -这个写法?
CTypedPtrList<CObList, CMenuItem*> m_MenuList;
ysysbaobei 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fandh 的回复:]
先用VC生成一个工程,然后,添加文件,再将头文件包含,建议楼主找本书先看一下,呵呵
[/Quote]
在跟着找的资料自学,卡住了,走不下去
生成那种工程?要选择的吧?
fandh 2008-12-30
  • 打赏
  • 举报
回复
先用VC生成一个工程,然后,添加文件,再将头文件包含,建议楼主找本书先看一下,呵呵
ysysbaobei 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 id27145 的回复:]
已经什么都写好了。。
先建两个文件COwnerMenu.h/cpp 把COwnerMenu的声明,定义放进去
建一工程,包含这两个文件, 再在你想要效果的地方添加右击响应函数,如CxxxView里或CxxDlg里
把上面OnRButtonDown里的东西拷过去

CTypedPtrList m_MenuList; -这个写法?
CTypedPtrList <CObList, CMenuItem*> m_MenuList;
[/Quote]

建立什么类型的?
MFC AppWizard(exe) ?
还是
Win32 Console Application ?
还是?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧