友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第27部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




//}}AFX_MSG_MAP  



END_MESSAGE_MAP( )  



//以上函数映射部分仅供读者选用菜单ID时参考。但是,  



//将这部分代码与实现系统菜单时的消息映射作一对比是有意义的。  



static UINT indicators'' =  



{  



ID_SEPARATOR; // status line indicator  



ID_INDICATOR_CAPS;  



ID_INDICATOR_NUM;  


…………………………………………………………Page 223……………………………………………………………

ID_INDICATOR_SCRL;  



};   



//此处为状态栏上的分配,具体我们在后面会有提及。  



/////////////////////////////////////////////////////////////////////////////  



// CMainFrame construction/destruction  



CMainFrame::CMainFrame()  



{  



// TODO: add member initialization code here  



bInsert=TRUE;//防止菜单被重复插入的控制变量  



bAppend=TRUE;//防止菜单被重复加入的控制变量  



bDelete=TRUE;//防止菜单被重复删除的控制变量  



bModify=TRUE;//防止菜单被重复修改的控制变量  



bBitmap=FALSE;//标识是否使用了图符菜单  



}  



//在CMainFrame类的构造函数中,我们加入了一部分支持菜单动态  



//处理控制的BOOL型变量,它们的定义在函数CMainFrame。h中  



// 。。。  



int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  



{  



// 。。。  



// 提示: 以下部分代码用于控制工具条提示及工具条本身实现,  



//如果不需要可以将下面两行代码移去  



m_wndToolBar。SetBarStyle(m_wndToolBar。GetBarStyle() |  



CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);  



//提示:下面三行代码控制工具条是否可以移动,如果你并不  



//希望工具条可以在屏幕内移动,可以删去它们。  


…………………………………………………………Page 224……………………………………………………………

m_wndToolBar。EnableDocking(CBRS_ALIGN_ANY);  



EnableDocking(CBRS_ALIGN_ANY);  



DockControlBar(&m_wndToolBar);  



hLongMenu。LoadMenu(IDR_MAINFRAME1);  



hNormalMenu。LoadMenu(IDR_MAINFRAME0);  



hLine。LoadBitmap(IDB_LINE);  



hCircle。LoadBitmap(IDB_CIRCLE);  



hRectangle。LoadBitmap(IDB_RECTANGLE);  



hText。LoadBitmap(IDB_TEXT);  



//以上几行代码装入资源 (菜单,位图),但由于上下文菜单  



//处理机制不一样,其资源并不在此处装入。  



return 0;  



}  



//以上省略代码用于调试,在程序的发行版中将被移去  



// 。。。  



/////////////////////////////////////////////////////////////////////////////  



// CMainFrame message handlers  



void CMainFrame::OnViewLongmenu()   



{  



// TODO: Add your mand handler code here  



SetMenu(&hLongMenu);  



hLongMenu。Detach();  



//以上部分代码用于实现至长菜单的切换  



}  



void CMainFrame::OnViewNormalmenu()   



{  


…………………………………………………………Page 225……………………………………………………………

// TODO: Add your mand handler code here  



SetMenu(&hNormalMenu);  



hNormalMenu。Detach();  



//以上部分代码用于实现至普通菜单的切换  



}  



void CMainFrame::OnDrawLine()   



{   



// TODO: Add your mand handler code here  



CClientDC ClientDC(this);//创建一客户区设备对象  



ClientDC。MoveTo(120;120);//移动对象起点至 (120,120)  



ClientDC。LineTo(260;260);//自 (120,120)至 (260,260)画直线  



//以上部分代码用于在程序主窗口中作一起点  



//为 (120,120),终点为 (260,260)的直线  



}  



void CMainFrame::OnDrawCircle()   



{  



// TODO: Add your mand handler code here  



CClientDC ClientDC(this);  



ClientDC。Arc(80;40;160;120;80;80;80;80);  



//以上代码部分用于在屏幕内画圆,基本同上,只是最后作图调用函数Arc   



}  



void CMainFrame::OnDrawRectangle()   



{  



// TODO: Add your mand handler code here  



CClientDC ClientDC(this);  



ClientDC。MoveTo(120;120);  


…………………………………………………………Page 226……………………………………………………………

ClientDC。LineTo(170;120);  



ClientDC。LineTo(170;150);  



ClientDC。LineTo(120;150);  



ClientDC。LineTo(120;120);  



//基本解释同上,使用设备对象画矩形  



}  



void CMainFrame::OnDyncmodifyInsert()   



{  



// TODO: Add your mand handler code here  



if(bInsert)//控制重复加入变量为真时允许加入  



{  



CMenu *pMenu=GetMenu( );//取得程序主菜单指针  



CMenu *pSubMenu=pMenu…》GetSubMenu(3);  



//函数GetSubMenu()用于从0基取得菜单项指针  



pSubMenu…》InsertMenu(ID_APP_ABOUT;  



MF_BYMAND;ID_HELP_INSERT;〃&I'm inserted here!〃);  



bInsert=FALSE;  



}  



//以上部分代码用于在HELP菜单中About…。项前  



//加入一新菜单”I’m inserted here!”  



}  



void CMainFrame::OnHelpInsert()   



{  



// TODO: Add your mand handler code here  



MessageBox(〃I'm inserted in the help menu!〃);  



//显示一标准消息框,当然,此处对加入菜单的响应较简单,  


…………………………………………………………Page 227……………………………………………………………

//仅仅是为了说明问题而已;在后面的函数实现中我们遵循同样的原则,  



//读者如果有兴趣,尽可以以自己编写的函数响应代替之  



//以上为新加入菜单的响应函数,请读者  



//注意前面所讲的加入该响应函数的方法  



}  



void CMainFrame::OnAppExit()   



{  



// TODO: Add your mand handler code here  



MessageBox(〃Thank you for using this programe!〃);  



PostMessage(WM_CLOSE);//发送程序退出消息  



//我们对程序退出进行控制,由于程序退出总会产生对该函数的调用,  



//在这里,我们力图使我们的程序显得有礼貌些,这一部分读者也可以  



//改写之以实现自己所期望的功能  



}  



void CMainFrame::OnDyncmodifyAppend()   



{  



// TODO: Add your mand handler code here  



if(bAppend)//动态加菜单项至菜单末尾BOOL型控制变量  



{  



CMenu *pMenu=GetMenu();  



CMenu *pSubMenu=pMenu…》GetSubMenu(3);  



pSubMenu…》AppendMenu(MF_STRING;ID_HELP_APPEND;〃&I'm appended here!〃);  



bAppend=FALSE;  



}  



//以上部分代码在Help菜单的最末尾加入一菜单项”I’m appended here!”  



}  


…………………………………………………………Page 228……………………………………………………………

void CMainFrame::OnHelpAppend()   



{  



// TODO: Add your mand handler code here  



MessageBox(〃I'm appended in the help menu!〃);  



//菜单项”I’m appended here!”的消息响应函数  



}  



void CMainFrame::OnDyncmodifyDelete()   



{  



// TODO: Add your mand handler code here  



if(bDelete)//动态删除菜单项BOOL型控制变量  



{  



CMenu *pMenu=GetMenu();  



CMenu *pSubMenu=pMenu…》GetSubMenu(0);  



pSubMenu…》DeleteMenu(5;MF_BYPOSITION);  



//这里我们采用用位置对菜单项定位,注意菜单项是0基的  



//注意:菜单项分隔线也是菜单项  



bDelete=FALSE;  



}  



//以上部分代码删除File中第六个菜单项  



}  



void CMainFrame::OnDyncmodifyModify()   



{  



// TODO: Add your mand handler code here  



if(bModify)//动态修改菜单项BOOL型控制变量  



{  



CMenu *pMenu=GetMenu();  


…………………………………………………………Page 229……………………………………………………………

CMenu *pSubMenu=pMenu…》GetSubMenu(3);  



pSubMenu…》ModifyMenu(ID_APP_ABOUT;  



MF_BYMAND;ID_APP_ABOUT;〃&Version information!〃);  



bModify=FALSE;  



}  



//动态的改变Help菜单中显示程序版本信息对话框的菜单文本  



//(这种改变后菜单项是不是更能较贴切的反应菜单项真实内容)?  



}  



void CMainFrame::OnDyncmodifyModifysystemmenu()   



{  



// TODO: Add your mand handler code here  



CMenu *pSystemMenu=GetSystemMenu(FALSE);  



//以FALSE调用系统菜单,以便对其进行修改,  



//但请注意其消息响应函数的特殊性  



pSystemMenu…》ModifyMenu(1;MF_BYPOSITION;ID_FILE_NEW;〃&I'll draw a rectangle!〃);  



//改变系统菜单中 “移动”菜单项,以实现在程序窗口中画一矩形  



//以上代码修改了系统菜单  



}  



void CMainFrame::OnDyncmodifyReset()   



{  



// TODO: Add your mand handler code here  



CMenu *pSystemMenu=GetSystemMenu(TRUE);  



//以上部分以TRUE为参数调用系统菜单,实现了系统菜单的复原  



}  



void CMainFrame::OnChange()   



{  


…………………………………………………………Page 230……………………………………………………………

// TODO: Add your mand handler code here  



if(!bBitmap)//控制使用何种菜单的变量  



{  



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………………………………………………
返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!