按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
{
bBitmap=TRUE;
CMenu *pMenu=GetMenu( );
CMenu *pSubMenu=pMenu…》GetSubMenu(3);
pSubMenu…》ModifyMenu(ID_DRAW_LINE;MF_BYMAND;ID_DRAW_LINE;&hLine);
pSubMenu…》ModifyMenu(ID_DRAW_CIRCLE;MF_BYMAND;ID_DRAW_CIRCLE;&hCircle);
pSubMenu…》ModifyMenu(ID_DRAW_RECTANGLE;
MF_BYMAND;ID_DRAW_RECTANGLE;&hRectangle);
pSubMenu…》ModifyMenu(ID_CHANGE;MF_BYMAND;ID_CHANGE;&hText);
}
//以上部分分别以位图对象指针作ModifyMenu( )函数的最后一个参数,
//将菜单换为了图符菜单
else
{
bBitmap=FALSE;
CMenu *pMenu=GetMenu();
CMenu *pSubMenu=pMenu…》GetSubMenu(3);
pSubMenu…》ModifyMenu(ID_DRAW_LINE;MF_BYMAND;ID_DRAW_LINE;〃&Line〃);
pSubMenu…》ModifyMenu(ID_DRAW_CIRCLE;MF_BYMAND;ID_DRAW_CIRCLE;〃&Circle〃);
pSubMenu…》ModifyMenu(ID_DRAW_RECTANGLE;
MF_BYMAND;ID_DRAW_RECTANGLE;〃&Rectangle〃);
pSubMenu…》ModifyMenu(ID_CHANGE;MF_BYMAND;ID_CHANGE;〃&Bitmap〃);
}
//以上部分分别以相应文本对象指针作ModifyMenu( )函数的最后一个参数,
…………………………………………………………Page 231……………………………………………………………
//将菜单换为了文本菜单
//以上部分代码实现Draw的图符菜单与文本菜单的切换
}
//注意下面这一部分代码,系统菜单的消息响应总是调用函数
//OnSysmand( ),同时注意该函数的映射接口的特殊性
//系统菜单发送的消息为WM_SYSMAND;而普通的菜单
//发送消息WM_MAND,这一点通过Spy++工具可以很
//明显的看出
void CMainFrame::OnSysmand(UINT nID; LPARAM lParam)
{
if ((nID&0xFFF0)==ID_FILE_NEW)
//在消息WM_SYSMAND中;参数nID的低四位为
//Windows系统内部使用,在应用程序使用其值时,
//应与0Xfff0求与后使用方能得到正确结果。
{
CMainFrame::OnFileNew();
}
//此处产生正常调用,在应用程序没有涉及的消息映射,
//应调用系统标准调用处理
else
{
CFrameWnd::OnSysmand(nID; lParam);
}
//以上部分代码改变了系统缺省菜单的行为,当然,读者对
//系统菜单的改变可能更具创造性
…………………………………………………………Page 232……………………………………………………………
}
void CMainFrame::OnFileNew()
{
// TODO: Add your mand handler code here
CMainFrame::OnDrawRectangle();
MessageBox(〃I've drawn a rectangle!〃);
//系统菜单中的一个消息响应函数,它的编写没有什么特殊之处
}
//以下为函数MenuView。cpp的代码
// MenuView。cpp :类CMenuView的实现
//
#include 〃stdafx。h〃
// 。。。
/////////////////////////////////////////////////////////////////////////////
// CMenuView
IMPLEMENT_DYNCREATE(CMenuView; CView)
BEGIN_MESSAGE_MAP(CMenuView; CView)
//{{AFX_MSG_MAP(CMenuView)
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//以上为消息响应人口
/////////////////////////////////////////////////////////////////////////////
// CMenuView construction/destruction
CMenuView::CMenuView()
{
…………………………………………………………Page 233……………………………………………………………
// TODO: add construction code here
//CMenuView类构造函数,在文档/视一章中我们将对此作详细的解释
}
CMenuView::~CMenuView()
{
//CMenuView类析构函数,在文档/视一章中我们将对此作详细的解释
}
BOOL CMenuView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
//在此处可以改变窗口的实现
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMenuView drawing
void CMenuView::OnDraw(CDC* pDC)
{
CMenuDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//文档绘图调用函数
// TODO: add draw code for native data here
}
// CMenuView diagnostics
// 。。。
//以上部分为调试代码时用,在程序的发行版中将被移去
…………………………………………………………Page 234……………………………………………………………
CMenuDoc* CMenuView::GetDocument( ) // 该函数非调试时为内联函数
{
ASSERT(m_pDocument…》IsKindOf(RUNTIME_CLASS(CMenuDoc)));
return (CMenuDoc*)m_pDocument;
}
//获得文档指针
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// 以下为CMenuView 类消息处理函数
//下面的代码处理了右击鼠标时上下文菜单的处理,当然,你也
//可以改在别的鼠标事件时使用上下文菜单
void CMenuView::OnRButtonDown(UINT nFlags; CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu contextMenu;
if(!ContextMenu。LoadMenu(IDR_CONTEXTMENU))
AfxThrowResourceException();
//装入上下文菜单资源,装入失败时调用异常处理函数
CMenu *pPopupMenu=ContextMenu。GetSubMenu(0);
ASSERT(pPopupMenu!=NULL);//使用断言,方便调试
ClientToScreen(&point);//转换客户区坐标至屏幕坐标
pPopupMenu…》TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON;
point。x;point。y;AfxGetMainWnd());//将菜单作为上下文菜单显示
CView::OnRButtonDown(nFlags; point);
}
//以上部分为上下文菜单的处理函数
…………………………………………………………Page 235……………………………………………………………
//以下部分代码摘自MainFrm。h中
// 。。。
// Attributes
public:
BOOL bInsert;
BOOL bAppend;
BOOL bDelete;
BOOL bModify;
BOOL bBitmap;
//以上部分代码为控制变量
CMenu hLongMenu;
CMenu hNormalMenu;
//以上部分为菜单资源对象
// 。。。
第二节 工具条
首先让我们从MFC控制条谈起。
MFC的工具条类CToolBar是几种可创建用来接收某些命令输入并向用
户显示状态消息的类中的一用户可以用工具条来立即访问程序命令。
工具条是直接可以看到的,而不是象菜单那样需要一层一层的深入,
或象键盘那样需要记忆。由于它占用屏幕空间,因此一定要确保你的
工具条包括的是最经常使用的命令。大型程序通常有多个工具条来为
不同的用户任务服务