友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第50章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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是几种可创建用来接收某些命令输入并向用 

户显示状态消息的类中的一用户可以用工具条来立即访问程序命令。 

工具条是直接可以看到的,而不是象菜单那样需要一层一层的深入, 

或象键盘那样需要记忆。由于它占用屏幕空间,因此一定要确保你的 

工具条包括的是最经常使用的命令。大型程序通常有多个工具条来为 

不同的用户任务服务
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!