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

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

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!





{  



ID_SEPARATOR; // status line indicator  



ID_INDICATOR_CAPS;  



ID_INDICATOR_NUM;  



ID_INDICATOR_SCRL;  



//状态条空间分配  



};  



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


…………………………………………………………Page 245……………………………………………………………

// DMainFrame construction/destruction  



DMainFrame::DMainFrame()  



{  



d_pToolbar2 = 0;  



d_bToolbarVisible = FALSE;  



//在此处我们为工具条初始化加入代码;新建工具条初始时不可见  



//以上二变量在文件mainfrm。h中定义:  



//public:  



// CToolBar * d_pToolbar2; // Pointer for dynamic toolbar。  



// BOOL d_bToolbarVisible; // Flag for toolbar visibility。  



}  



DMainFrame::~DMainFrame()  



{  



//mainframe类析构函数  



}  



int DMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)  



{  



if (CFrameWnd::OnCreate(lpCreateStruct) == …1)  



return …1;  



//以下代码创建一工具条  



if (!m_wndToolBar。Create(this) ||  



!m_wndToolBar。LoadBitmap(IDR_MAINFRAME) ||  



!m_wndToolBar。SetButtons(buttons;  



sizeof(buttons)/sizeof(UINT)))  



{  



TRACE0(〃Failed to create toolbarn〃);  


…………………………………………………………Page 246……………………………………………………………

return …1; // fail to create  



}  



//以下代码创建一可移动工具条;如程序不希望如此;可删除下列代码  



m_wndToolBar。EnableDocking(CBRS_ALIGN_ANY);  



EnableDocking(CBRS_ALIGN_ANY);  



DockControlBar(&m_wndToolBar);  



//此下代码使能工具提示;如不需要;可移去  



m_wndToolBar。SetBarStyle(m_wndToolBar。GetBarStyle() |  



CBRS_TOOLTIPS | CBRS_FLYBY);  



//以下代码创建状态条   



if (!m_wndStatusBar。Create(this) ||  



!m_wndStatusBar。SetIndicators(indicators;  



sizeof(indicators)/sizeof(UINT)))  



{  



TRACE0(〃Failed to create status barn〃);  



return …1; // fail to create  



}  



return 0;  



//以上部分为系统对给出的工具条;状态条的初始化;读者不妨对其仔细研究一下。  



}  



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



// DMainFrame diagnostics  



// 。。。  



//其中删节部分调试程序时有用  



// 。。。  



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


…………………………………………………………Page 247……………………………………………………………

// DMainFrame message handlers  



//以下为消息处理函数  



// 菜单项Toolbar|Create消息处理;用于创建工具条  



void DMainFrame::OnToolbarCreate()   



{  



// 仅在工具条不存在时断言成立  



ASSERT(d_pToolbar2 == 0);  



// 创建工具条对象;由于正文中已作较多解释;此处从简  



d_pToolbar2 = new CToolBar();  



d_pToolbar2…》Create(this; WS_CHILD | CBRS_TOP |   



CBRS_TOOLTIPS | CBRS_FLYBY;  



0x9100);  



//获得位图;并与工具条相联系  



d_pToolbar2…》LoadBitmap(IDR_TOOLS);  



d_pToolbar2…》SetButtons(Toolbar2Buttons;   



sizeof(Toolbar2Buttons)/sizeof(UINT));  



//使能工具条移动  



d_pToolbar2…》EnableDocking(CBRS_ALIGN_ANY);  



EnableDocking(CBRS_ALIGN_ANY);  



DockControlBar(d_pToolbar2);  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// 选项Toolbar|Show消息处理  



void DMainFrame::OnToolbarShow()   



{  



ASSERT(d_pToolbar2 != 0);  


…………………………………………………………Page 248……………………………………………………………

//查询工具条当前状态  



BOOL bVisible = (d_pToolbar2…》GetStyle() & WS_VISIBLE);  



//显隐切换  



int nShow = (bVisible) ? SW_HIDE : SW_SHOWNORMAL;  



d_pToolbar2…》ShowWindow(nShow);  



//发送工具条变化通知  



RecalcLayout();  



//记录工具条显示状态以留作后用  



d_bToolbarVisible = (!bVisible);  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



//处理消息 Toolbar|Create ON_MAND_UPDATE_UI;对菜单项 Toolbar|Create作使能检查  



void DMainFrame::OnUpdateToolbarCreate(CCmdUI* pCmdUI)   



{  



pCmdUI…》Enable(d_pToolbar2 == 0);  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



//处理消息 Toolbar|Show ON_MAND_UPDATE_UI;对菜单项 Toolbar|Create作选择检查  



void DMainFrame::OnUpdateToolbarShow(CCmdUI* pCmdUI)   



{  



pCmdUI…》Enable(d_pToolbar2 != 0);  



int nCheck = (d_bToolbarVisible) ? 1 : 0;  



pCmdUI…》SetCheck(nCheck);  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// 消息Edit|Copy选择处理;为了简化程序;对各选项我们的处理是仅仅显示一对话  


…………………………………………………………Page 249……………………………………………………………

//框显示该菜单项已被选择而已  



void DMainFrame::OnEditCopy()   



 {  



AfxMessageBox(_T(〃Edit|Copy mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for Edit|Cut。  



void DMainFrame::OnEditCut()   



 {  



AfxMessageBox(_T(〃Edit|Cut mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for Edit|Paste。  



void DMainFrame::OnEditPaste()   



 {  



AfxMessageBox(_T(〃Edit|Paste mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for Edit|Undo。  



void DMainFrame::OnEditUndo()   



 {  



AfxMessageBox(_T(〃Edit|Undo mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for File|New。  



void DMainFrame::OnFileNew()   


…………………………………………………………Page 250……………………………………………………………

{  



AfxMessageBox(_T(〃File|New mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for File|Open。  



void DMainFrame::OnFileOpen()   



{  



AfxMessageBox(_T(〃File|Open。。。 mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for File|Save。  



void DMainFrame::OnFileSave()   



{  



AfxMessageBox(_T(〃File|Save mand selected。〃));  



}  



//……………………………………………………………………………………………………………………………………………………………………………… 



// WM_MAND handler for File|Save。  



void DMainFrame::OnFilePrint()   



{  



AfxMessageBox(_T(〃File|Print。。。 mand selected。〃));  



}  



                            第三节 快捷键消息响应  



键盘加速键有时也叫键盘捷径;它使用户可用键盘发出命令。Windows  

API提供了加速键表资源;用以保存加速键定义集合。AppWizard生成 

一单文档或多文档应用程序时;提供一个加速键表当通过调用 

CFrameWnd::LoadFrame来初始化一个帧(CFrameWnd)窗口时;则加速键 

表被自动连接到该帧窗口。  


…………………………………………………………Page 251……………………………………………………………

但有几点我们必须提出来说一下。首先;在Microsoft研制Windows 

时,并没有考虑到加速键系统。毕竟在当时看来,Windows所要支持 

的,最主要的应该是鼠标和菜单――毫无疑问,这是当时许多的GUI 

系统 (包括著名的Star   和Apple的Macintosh)得以成功的巨大原 

因。但出于Microsoft对第三方厂家软件的一贯支持,Windows系统中 

还是加入了加速键支持部分。在今天看来,Microsoft的这一步,实 

际上具有重大的意义,这至少可以从两个方面加以说明:并不能强迫 

所有的计算机都以鼠标作为输入手段,也并不是在所有的情形下,鼠 

标输入都较键盘输入为快,而且,对一些已经习惯了键盘输入的用户 

来说,使用鼠标输入即使只是一个很容易的转变,可毕竟也还是一个 

转变,用户需要对此有一个适应的过程。  



同时也应该指出的时,Microsoft在 

中特别提出,为增强Windows95应用程序的一致性,键盘命令 “不应 

该是进行特定操作的唯一方法。”实际上,指南中将加速键称为 “捷 

径”多少说明了Microsoft的倾向:它应该也只能是其它命令输入机 

制的一种补充而不是替代。它只应该是以鼠标作为主要输入手段的 

Windows系统的一种平衡。实际上,我们需要注意的一点就是,我们 

所建立的加速键,要么是使用菜单项进行逐项选择较麻烦,或者是我 

们在系统中使用频率相当高的部分,同时,加速键要尽量简单,否则 

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