已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Visual C+编程技巧之八57、为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态需要将CFrameWnd: m_bAutomenuEnable设置为FALSE,如果该数据成员为TRUE(缺省值),工作框将自动地禁止没有ON_UPDATE_COMMAND_UI或者ON_COMMAND的菜单项。 /Disable MFC from automatically disabling menu items.m_bAuoMenuEnable=FALSE;/Now enable the menu item.CMenu* pMenu=GetMenu ();ASSERT_VALID (pMenu);pMenu-EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED);58、如何给系统菜单添加一个菜单项给系统菜单添加一个菜单项需要进行下述三个步骤: 首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols可以显示该对话)定义菜单项ID,该ID应大于0x0F而小于0xF000;其次,调用CWnd:GetSystemMenu获取系统菜单的指针并调用CWnd: Appendmenu将菜单项添加到菜单中。下例给系统菜单添加两个新的菜单项: int CMainFrame: OnCreate (LPCREATESTRUCT lpCreateStruct)/Make sure system menu item is in the right range.ASSERT (IDM_MYSYSITEM &0xFFF0)=IDM_MYSYSITEM);ASSERT (IDM-MYSYSITEMAppendmenu (MF_SEPARATOR);pSysMenu-AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem);现在,选择系统菜单项时用户应进行检测。使用ClassWizard处理WM_SYSCOMMAND消息并检测用户菜单的nID参数:void CMainFrame: OnSysCommand (UINT nID,LPARAM lParam)/Determine if our system menu item was selected.if ( (nID & 0xFFF0)=IDM_MYSYSITEM)/TODO-process system menu itemelseCMDIFrameWnd: OnSysCommand (nID, lParam); 最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基ID的串表的入口来实现。59、如何确定顶层菜单所占据的菜单行数这可以通过简单的减法和除法来实现。首先,用户需要计算主框窗口的高度和客户区;其次,从主框窗口的高度中减去客户区、框边界以及标题的高度;最后,除以菜单栏的高度。下例成员函数是一个计算主框菜单所占据的行数的代码实现。 int CMainFrame: GetMenuRows ()CRect rcFrame,rcClient;GetWindowRect (rcFrame);GetClientRect (rcClient);return (rcFrame.Height () -rcClient.Height ()- : GetSystemMetrics (SM_CYCAPTION) -(: getSystemMetrics (SM_CYFRAME) *2) /: GetSystemMetrics (SM_CYMENU);60、在用户环境中如何确定系统显示元素的颜色 调用SDK函数GetSysColor可以获取一个特定显示元素的颜色。下例说明了如何在MFC函数CMainFrameWnd: OnNcPaint中调用该函数设置窗口标题颜色。void CMiniFrameWnd: OnNcPaint ()dc.SetTextColor (: GetSysColor (m_bActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT); 61、如何查询和设置系统参数在Windows 3.1 SDK中介绍过SDK函数SystemParametersInfo,调用该函数可以查询和设置系统参数,诸如按键的重复速率设置、鼠标双击延迟时间、图标字体以及桌面覆盖位图等等。 /Create a font that is used for icon titles. LOGFONT stFont;: SystemParametersInfo (SPIF_GETICONTITLELOGFONT,sizeof (LOGFONT), &stFont, SPIF_SENDWININICHANGE);m_font.CreateFontIndirect (&stFont);/Change the wallpaper to leaves.bmp.: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,_T ( forest.bmp), SPIF_UPDATEINIFILE);62、如何使用一个预定义的Windows光标调用CWinApp: LoadStandardCursor并传送光标标识符。 BOOL CSampleDialog: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)/Display wait cursor if busy.if (m_bBusy)SetCursor (AfxGetApp () -LoadStandardCursor (IDC_WAIT);return TRUE;return CDialog: OnSetCursor (pWnd. nHitTest,message);63、如何确定当前屏幕分辨率调用SDK函数GetSystemMetrics,该函数可以检索有关windows显示信息,诸如标题大小、边界大小以及滚动条大小等等。 /Initialize CSize object with screen size. CSize sizeScreen (GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN);64、如何检索原先的Task Manager应用程序使用的任务列表原先的Task Manager应用程序显示顶层窗口的列表。为了显示该列表,窗口 必须可见、包含一个标题以及不能被其他窗口拥有。调用CWnd: GetWindow可以检索顶层窗口的列表,调用IsWindowVisible、GetWindowTextLength以及GetOwner 可以确定窗口是否应该在列表中。下例将把TaskManager窗口的标题填充到列表中。void GetTadkList (CListBox&list)CString strCaption; /Caption of window.list.ResetContent (); /Clear list box./Get first Window in window list.ASSERT_VALID (AfxGetMainWnd ();CWnd* pWnd=AfxGetMainWnd () -GetWindow (GW_HWNDFIRST);/Walk window list.while (pWnd)/ I window visible, has a caption, and does not have an owner?if (pWnd -IsWindowVisible () & pWnd -GetWindowTextLength () &! pWnd -GetOwner ()/Add caption o window to list box.pWnd -GetWindowText (strCaption);list.AddString (strCaption);/Get next window in window list.pWnd=pWnd-GetWindow (GW_HWNDNEXT);65、如何确定Windows和Windows系统目录 有两个SDK函数可以完成该功能。GetWindowsDirectory和GetSystemDirectory,下例说明了如何使用这两个函数: TCHAR szDir MAX_PATH;/Get the full path of the windows directory. : GetWindowsDirectory (szDir, MAX_PATH); TRACE (Windows directory %sn, szDir);/Get the full path of the windows system directory.: GetSystemDirectory (szDir, MAX_PATH);TRACE (Windows system directory %sn, szDir);66、在哪儿创建临文件调用SDK函数GetTemPath可以确定临时文件的目录,该函数首先为临时路径检测TMP环境变量:如果没有指定TMP,检测TMP环境变量,然后返回到当前目录。下例说明了如何创建一个临时文件。 /get unique temporary file.CString strFile;GetUniqueTempName (strFile);TRY/Create file and write data.Note that file is closed/in the destructor of the CFile object.CFile file (strFile,CFile: modeCreate | CFile: modeWrite);/write dataCATCH (CFileException, e)/error opening fileEND_CATCHVoid GetuniqueTempName (CString& strTempName)/Get the temporary files directory.TCHAR szTempPath MAX_PATH;DWORD dwResult=: GetTempPath (MAX_PATH, szTempPath);ASSERT (dwResult);/Create a unique temporary file.TCHAR szTempFile MAX_PATH;UINT nResult=GetTempFileName (szTempPath, _T (ex),0,szTempfile);ASSERT (nResult);strTempName=szTempFile;67、如何访问桌面窗口静态函数CWnd: GetDesktopWindow返回桌面窗口的指针。下例说明了MFC函数CFrameWnd:BeginModalStae是如何使用该函数进入内部窗口列表的。 void CFrameWnd:BeginModalState ()/first count all windows that need to be disabledUINT nCount=0;HWND hWnd=: GetWindow
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位教育岗面试易错题题库试卷及参考答案202
- 2026事业单位综合岗面试易错题题库及参考答案
- 2027年备考会计基础 【零基础学员必练】题库与答案
- 2027年备考会计基础 【零基础学员必练】能力提升试题卷附答案
- 2026年湖南网络工程职业学院高职单招笔试数学历年参考题库含答案解析
- 2026年湖南工商职业学院高职单招笔试数学历年参考题库含答案解析
- 2026年湖南交通职业技术学院高职单招笔试语文历年参考题库含答案解析
- 2026年渭南职业技术学院高职单招笔试职业适应性测验历年参考题库含答案解析
- 2026年海南政法职业学院高职单招笔试职业适应性测验历年参考题库含答案解析
- 2026年河北轨道运输职业技术学院高职单招笔试化学历年参考题库含答案解析
- 北京市朝阳区2026-2027学年度第一学期期中质量检测高三英语试卷(含答案)
- 2026山东省防疫安全协管员招聘考试(畜牧兽医)历年参考题库含答案详解
- 2026健康管理师考试理论知识真题及答案
- 2025 含聚谷氨酸有机水溶肥料在马铃薯种植中的应用技术规程
- 2026-2027学年清华附中九年级上册化学期中真题卷
- 2026年四川省成都市技能人才评价考评员考试题库(附答案)
- 正大集团人才评估行测题目
- 离散数学 (第七版) 课件 第二部分 集合论
- FMEA风险评估分析表实战培训
- 2025年进出口银行人员招聘笔试考试试题及答案详解
- 光伏组件拆除方案
评论
0/150
提交评论