




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一.基本知识1.1链接器选项1./HEAP 设置堆的大小,默认大小为1MB2./OPT:REF|NOREF:是否消除从未引用的函数,数据3./OPT:WIN98|NOWIN98;是否进行Windows98优化4./OUT 指定输出文件名5./STACK 设置栈的大小,默认为1MB1.2 使用VA快捷操作1.mx 消息框,输出结果2.rt 返回值3.wm Windows程序4.fh 函数说明5.ft 文件说明6.fd 头文件卫士1.3插入Splash1.4 VC库 1.5 注意点1.删除类要先删除头文件,源文件,再删除二.相关函数2.1隐藏或显示控件已知ID的情况下可用下面两行代码隐藏控件:CWnd* pWnd=GetDlgItem(IDC_LIST); /IDCLIST表控件IDpWnd-ShowWindow(0); /0表隐藏1表显示也可在类向导中为控件添加控制变量,如m_ctlListm_ctlList.ShowWindow(0); /含义与上述相同 2.2 用代码隐藏、最小化、最大化窗口CWnd:ShowWindow(0); /HideCWnd:ShowWindow(2); /MixCWnd:ShowWindow(3); /Max更详细请参考:CWnd:ShowWindowBOOL ShowWindow( int nCmdShow );返回值如果窗口原来可见,则返回非零值;如果CWnd原来是隐藏的,则返回0。参数nCmdShow指定了CWnd应如何被显示。它必须是下列值之一:SW_HIDE 隐藏窗口并将活动状态传递给其它窗口。SW_MINIMIZE 最小化窗口并激活系统列表中的顶层窗口。SW_RESTORE 激活并显示窗口。如果窗口是最小化或最大化的,Windows恢复其原来的大小和位置。SW_SHOW 激活窗口并以其当前的大小和位置显示。SW_SHOWMAXIMIZED 激活窗口并显示为最大化窗口。SW_SHOWMINIMIZED 激活窗口并显示为图标。SW_SHOWMINNOACTIVE 将窗口显示为图标。当前活动的窗口将保持活动状态。SW_SHOWNA 按照当前状态显示窗口。当前活动的窗口将保持活动状态。SW_SHOWNOACTIVATE 按窗口最近的大小和位置显示。当前活动的窗口将保持活动状态。SW_SHOWNORMAL 激活并显示窗口。如果窗口是最小化或最大化的,则Windows恢复它原来的大小和位置。说明这个函数设置窗口的可视状态。 2.3用mci播放Mp3的一个示例1、新建一个对话框工程 Mp3Player2、在对话框类中添加变量 HWND m_hwndMCI3、为对话框添加一个按钮Play,并为其单击事件添加函数,添加代码:if(m_hwndMCI!=NULL)MCIWndDestroy(m_hwndMCI); /建立一个MCIWND窗口int type=2; /隐藏默认工具栏 0表显示CString filename=星空无限.mp3;/要播放的文件文件名m_hwndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),type,filename);MCIWndPlay(m_hwndMCI);4、在stdafx.h中加入:#include#pragma comment(lib,vfw32.lib)更多控制函数请自己打开vfw.h文件查看如:MCIWndGetPosition(m_hwndMCI) 得到当前播放位置,用于控制播放进度滑块MCIWndGetLength(m_hwndMCI) 文件播放长度MCIWndSetVolume(m_hwndMCI,iVol) 设置音量,大小为iVol,最大为1000MCIWndGetVolume(m_hwndMCI) 得到当前音量值MCIWndPlayFromTo(m_hwndMCI, lStart, lEnd) 播放片段一. CFileDialog类CFileDialog类用于实现文件选择对话框,以支持文件的打开和保存操作。用户要打开或保存文件,就会和文件选择对话框打交道,图5.13显示了一个标准的用于打开文件的文件选择对话框。用MFC AppWizard建立的应用程序中自动加入了文件选择对话框,在File菜单选Open或Save As命令会启动它们。文件选择对话框的创建过程与一般对话框的类似,首先是在堆栈上构建一个CFileDialog对象,然后调用CFileDialog:DoModal( )来启动对话框。文件对话框的构造函数为 CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );如果参数bOpenFileDialog的值为TRUE,将创建Open(打开文件)对话框,否则就创建Save As(保存文件)对话框。参数lpszDefExt用来指定缺省的文件扩展名。lpszFileName用于规定初始文件名。dwFlags用于设置对话框的一些属性。lpszFilter指向一个过滤字符串,用户如果只想选择某种或某几种类型的文件,就需要指定过滤字符串。参数pParentWnd是指向父窗口或拥有者窗口的指针。 过滤字符串有特定的格式,它实际上是由多个子串组成,每个子串由两部分组成,第一部分是过滤器的字面说明,如“Text file (*.txt)”,第二部分是用于过滤的匹配字符串,如“*.txt”,子串的两部分用竖线字符“ | ”分隔开。各子串之间也要用“ | ”分隔,且整个串的最后两个字符必须是两个连续的竖线字符“ | ”。一个典型的过滤字符串如下面所示:char szFilter=“All files (*.*)|*.*|Text files(*.txt)|*.txt|Word documents(*.doc)|*.doc|”;若CFileDialog:DoModal返回的是IDOK,那么可以用表5.7列出的CFileDialog类的成员函数来获取与所选文件有关的信息。表5.7 CFileDialog类辅助成员函数函数名 用途 GetPathName 返回一个包含有全路径文件名的CString对象。 GetFileName 返回一个包含有文件名(不含路径)的CString对象。 GetFileExt 返回一个只含文件扩展名的CString对象。 GetFileTitle 返回一个只含文件名(不含扩展名)的CString对象。 二. CFindReplaceDialog类CFindReplaceDialog类用于实现Find(搜索)和Replace(替换)对话框,这两个对话框都是非模态对话框,用于在正文中搜索和替换指定的字符串。图5.14显示了一个Find对话框,图5.15显示了一个Replace对话框。由于Find和Replace对话框是非模式对话框,它们的创建方式与其它四类公用对话框不同。CFindReplaceDialog对象是用new操作符在堆中创建的,而不是象普通对话框那样以变量的形式创建。要启动Find/Replace对话框,应该调用CFindReplaceDialog:Create函数,而不是DoModal。Create函数的声明是BOOL Create( BOOL bFindDialogOnly, LPCTSTR lpszFindWhat, LPCTSTR lpszReplaceWith = NULL, DWORD dwFlags = FR_DOWN, CWnd* pParentWnd = NULL );当参数bFindDialogOnly的值为TRUE时,创建的是Find对话框,为FALSE时创建的是Replace对话框。参数lpszFindWhat指定了要搜索的字符串,lpszReplaceWith指定了用于替换的字符串。dwFlags用来设置对话框,其缺省值是FR_DOWN(向下搜索),该参数可以是几个FR_XXX常量的组合,用户可以通过该参数来决定诸如是否要显示Match case、Match Whole Word检查框等设置。参数pParentWnd指明了对话框的父窗口或拥有者窗口。 Find/Replace对话框与其它公用对话框的另一个不同之处在于它在工作过程中可以重复同一操作而对话框不被关闭,这就方便了频繁的搜索和替换。CFindReplaceDialog类只提供了一个界面,它并不会自动实现搜索和替换功能。CFindReplaceDialog使用了一种特殊的通知机制,当用户按下了操作的按钮后,它会向父窗口发送一个通知消息,父窗口应在该消息的消息处理函数中实现搜索和替换。CFindReplaceDialog类提供了一组成员函数用来获得与用户操作有关的信息,如表5.8所示,这组函数一般应在通知消息处理函数中调用。表5.8 CFindReplaceDialog类的辅助成员函数函数名 用途 FindNext 如果用户点击了Findnext按钮,该函数返回TRUE。 GetNotifier 返回一个指向当前CFindReplaceDialog对话框的指针。 GetFindString 返回一个包含要搜索字符串的CString对象。 GetReplaceString 返回一个包含替换字符串的CString对象。 IsTerminating 如果对话框终止了,则返回TRUE。 MatchCase 如果选择了对话框中的Match case检查框,则返回TRUE。 MatchWholeWord 如果选择了对话框中的Match Whole Word检查框,则返回TRUE。 ReplaceAll 如果用户点击了Replace All按钮,该函数返回TRUE。 ReplaceCurrent 如果用户点击了Replace按钮,该函数返回TRUE。 SearchDown 返回TRUE表明搜索方向向下,返回FALSE则向上。 CEditView类自动实现了Find和Replace对话框的功能,但MFC AppWizard并未提供相应的菜单命令。读者可以在前面的Register工程的Edit菜单中加入&Find.和&Replace.两项,并令其ID分别为ID_EDIT_FIND和ID_EDIT_REPLACE,则Find/Replace对话框的功能就可以实现。对话框的数据成员的初始化工作一般在其构造函数中完成,而对话框和控件的初始化是在OnInitDialog函数中完成的。模态对话框拥有自己的消息循环,它垄断了用户的输入。模态对话框对象是以变量的形式构建的,CDialog:DoModal用来启动一个模态对话框,在对话框关闭后该函数才返回。如果用户按下了IDOK按钮确认设置,那么DoModal返回IDOK,若用户按下了IDCANCEL按钮取消设置,则DoModal返回IDCANCEL。非模态对话框与应用程序共用消息循环,它不垄断用户的输入。非模态对话框对象应该用new操作符在堆中创建,应该调用CDialog:Create而不是CDialog:DoModal来显示对话框,需要注意对话框的可见性问题。应该调用CWnd:DestroyWindow而不是CDialog:EndDialog来关闭非模态对话框,所以一般需要重新编写OnOK和OnCancel函数。非模态对话框对象应该是自动清除的,所以应该重写PostNcDestroy函数并在该函数中用delete删除对象本身。二.常用全局函数1.AfxBeginThread 开始一个新的线程2.AfxEndThread 结束一个旧的线程3.AfxFormatString,字符串格式化.4.AfxMessageBox 5.AfxOutputDebugString 将字符串输出出错处理VC常见编译错误解决外部符号错误:_main,_WinMain16,_beginthreadex 在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有柚煤孟钅坎问? 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain16 msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain16 nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _endthreadex 1. Windows子系统设置错误, 提示: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Windows项目要使用Windows子系统, 而不是Console, 可以这样设置: Project - Settings - 选择Link属性页, 在Project Options中将/subsystem:console改成/subsystem:windows 2. Console子系统设置错误, 提示: LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain16 控制台项目要使用Console子系统, 而不是Windows, 设置: Project - Settings - 选择Link属性页, 在Project Options中将/subsystem:windows改成/subsystem:console 3. 程序入口设置错误, 提示: msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain16 通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口: Project - Settings - 选择Link属性页, 在Category中选择Output, 再在Entry-point symbol中填入wWinMainCRTStartup, 即可 4. 线程运行时库设置错误, 提示: nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _beginthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol _endthreadex 这是因为MFC要使用多线程时库, 需要更改设置: Project - Settings - 选择C/C+属性页, 在Category中选择Code Generation, 再在Use run-time library中选择Debug Multithreaded或者multithreaded 咸鱼游侠(75374355) 12:11:11 其中, Single-Threaded 单线程静态链接库(release版本) Multithreaded 多线程静态链接库(release版本) multithreaded DLL 多线程动态链接库(release版本) Debug Single-Threaded 单线程静态链接库(debug版本) Debug Multithreaded 多线程静态链接库(debug版本) Debug Multithreaded DLL 多线程动态链接库(debug版本) 单线程: 不需要多线程调用时, 多用在DOS环境下 多线程: 可以并发运行 静态库: 直接将库与程序Link, 可以脱离MFC库运行 动态库: 需要相应的DLL动态库, 程序才能运行 release版本: 正式发布时使用 debug版本: 调试阶段使用 三.使用TODO待办注释一.尽量使用枚举类型一定不要使用制表符。不同的文字编辑器使用不同的空格来生成制表符 ,这就带来了格式混乱。所有代码都应该使用4个空格来表示缩进。二.可以配置Visual Studio 文字编辑器,以空格代替制表符 。1.使用前要判断句柄是否有效,如果发生错误,返回值为GetLastError();2.使用后要关闭句柄3.要希望程序在特定Windows版本上运行,可在编译时规定_WIN32_WINNT版本4.命名基本要求 b 表示byte dw 表示dword h 表示句柄 lp 表示指针 sz 表示以0结尾的字符串 m_ :类的成员变量 ms_:类的静态成员变量 s_ :静态全局变量 g_ :普通全局变量 c_ :数量5. 对参数要进行必要的合法性检测.6. 申请要释放7. 在判断语句中将常量写在左边8. 用sizeof(szBuffer)/sizeof(TCHAR) 来表示缓冲区大小,malloc(nCharacters*sizeof(TCHAR)来分配缓冲区大小,malloc是按字节进行内存单元分配的9. 定义函数时, 参数顺序依次为: 输入参数, 然后是输出参数.10.TODO注释, 对那些临时的, 短期的解决方案, 或已经够好但仍不完美的代码使用11. 一定请尽量少用全局变量。为了正确的使用全局变量,一般是将它们作为参数传入函数。永远不要在函数或类内部直接引用全局变量,因为这会引起一个副作用:在调用者不知情的情况下改变了全局变量的状态。这对于静态变量同样适用。如果您需要修改全局变量,您应该将其作为一个输出参数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年河南轻工职业学院单招《语文》试题附参考答案详解(综合卷)
- 2026届河南省郑州枫杨外国语中学化学九上期中调研试题含解析
- 2026届广东省惠州市惠东燕岭学校九上化学期中调研模拟试题含解析
- 四川省绵阳市江油实验学校2026届化学九年级第一学期期中学业水平测试试题含解析
- 医疗保障工作总结
- 窗口部门工作总结
- 黑龙江省哈尔滨市道里区2026届英语九年级第一学期期末复习检测模拟试题含解析
- 2026届山东省滨州市部分学校九年级化学第一学期期末统考试题含解析
- 2026届黑龙江省桦南县九年级化学第一学期期中达标检测试题含解析
- 山东省德州市德城区2026届英语九年级第一学期期末考试试题含解析
- 海底捞会员管理制度
- 特斯拉供应商手册
- 2025年国家能源集团神东煤炭招聘笔试冲刺题(带答案解析)
- 吉林:用水定额(DB22-T 389-2019)
- 威士忌餐吧策划书3
- 《应用语文(第三版)》课件 第三单元 特殊情境口语交际
- 果农电商合同协议
- 武汉网约车从业资格证考试题库及答案
- DB1411T 65-2024 旱垣地高粱田间测产操作规程
- 数码印花操作培训课件
- GB/T 44808.2-2024人类工效学无障碍设计第2部分:考虑颜色视觉随年龄变化的颜色组合方法
评论
0/150
提交评论