vc++技巧
新手必知20点VC技巧
Project Configuration...,在弹出的对话框中选中 myprj.exe Win32 Debug。(Checking your Active configuration is Debug or Release,虽然两种状态下均可调试,但
1.知道控件id号怎么快速的在资源里找到对应的控件
解决方法:点击菜单中View->Resource Symbols ,在对话框中选择要找的ID点击按钮View Use便可。
2.打的断点太多,太乱,打开VC也会报内存被非法访问的错误。想编辑自己的断点
解决方法:点击菜单中Edit->Breakpoints ,在对话框中选择Location在,Breakpoint选择要删除的IDs中选择断点位置,点击按钮Remove便可。
3.打开workplace的快捷键
解决方法:Alt+0;
4.开机立即打开VC会出现: the file is binary and cnnot be read问题.
解决方法:重启电脑后,等一会打开VC。。。。。我无语了。
5.没有VC 助手工具条,卸载,重装。。。。。我无语了。
解决方法:tools->customize->Add-ins and Macro Files
工程文件中搜索你想要的东西了。也不能完全依赖vc的搜索工具(VC搜索工具尤其是在大点的工程中不一能把你要找的所有位置中你要找的东西信息显示出来):比如我想搜索一
s t a c k 的 常 见 用 法
VC调试技巧之Call StackVC调试技巧之Call Stack简单介绍调试是程序开发者必备技巧。
如果不会调试,自己写的程序一旦出问题,往往无从下手。
本人总结10年使用VC经验,对调试技巧做一个粗浅的介绍。
希望对大家有所帮助。
今天简单的介绍介绍调用堆栈。
调用堆栈在我的专栏的文章VC 调试入门提了一下,但是没有详细介绍。
首先介绍一下什么叫调用堆栈:假设我们有几个函数,分别是function1,function2,function3,funtion4,且function1调用function2,function2调用function3,function3调用function4。
在function4运行过程中,我们可以从线程当前堆栈中了解到调用他的那几个函数分别是谁。
把函数的顺序关系看,function4、function3、function2、function1呈现出一种“堆栈”的特征,最后被调用的函数出现在最上方。
因此称呼这种关系为调用堆栈(call stack)。
当故障发生时,如果程序被中断,我们基本上只可以看到最后出错的函数。
利用call stack,我们可以知道当出错函数被谁调用的时候出错。
这样一层层的看上去,有时可以猜测出错误的原因。
常见的这种中断时ASSERT宏导致的中断。
在程序被中断时,debug工具条的右侧倒数第二个按钮一般是call stack按钮,这个按钮被按下后,你就可以看到当前的调用堆栈。
实例一:介绍我们首先演示一下调用堆栈。
首先我们创建一个名为Debug的对话框工程。
工程创建好以后,双击OK按钮创建消息映射函数,并添加如下代码:?void CDebugDlg::OnOK()?-- TODO: Add extra validation here?ASSERT(FALSE);?我们按F5开始调试程序。
程序运行后,点击OK按钮,程序就会被中断。
这时查看call stack窗口,就会发现内容如下:?CDebugDlg::OnOK() line 176 + 34 bytes_AfxDispatchCmdMsg(CCmdTarget * 0x0012fe74 {CDebugDlg}, unsigned int 1, int 0, void (void)* 0x5f402a00 `vcall'(void), void * 0x00000000, unsigned int 12, AFX_CMDHANDLERINFO * 0x00000000) line 88CCmdTarget::OnCmdMsg(unsigned int 1, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 302 + 39 bytesCDialog::OnCmdMsg(unsigned int 1, int 0, void * 0x00000000, AFX_CMDHANDLERINFO * 0x00000000) line 97 + 24 bytes CWnd::OnCommand(unsigned int 1, long 656988) line 2088CWnd::OnWndMsg(unsigned int 273, unsigned int 1, long 656988, long * 0x0012f83c) line 1597 + 28 bytesCWnd::WindowProc(unsigned int 273, unsigned int 1, long 656988) line 1585 + 30 bytesAfxCallWndProc(CWnd * 0x0012fe74 {CDebugDlg hWnd=?}, HWND__ * 0x001204b0, unsigned int 273, unsigned int 1, long 656988) line 215 + 26 bytesAfxWndProc(HWND__ * 0x001204b0, unsigned int 273, unsigned int 1, long 656988) line 368AfxWndProcBase(HWND__ * 0x001204b0, unsigned int 273, unsigned int 1, long 656988) line 220 + 21 bytesUSER32! 77d48709()USER32! 77d487eb()USER32! 77d4b368()USER32! 77d4b3b4()NTDLL! 7c90eae3()USER32! 77d4b7ab()USER32! 77d7fc9d()USER32! 77d76530()USER32! 77d58386()USER32! 77d5887a()USER32! 77d48709()USER32! 77d487eb()USER32! 77d489a5()USER32! 77d489e8()USER32! 77d6e819()USER32! 77d65ce2()CWnd::IsDialogMessageA(tagMSG * 0x004167d8 {msg=0x00000202 wp=0x00000000 lp=0x000f001c}) line 182 CWnd::PreTranslateInput(tagMSG * 0x004167d8 {msg=0x00000202 wp=0x00000000 lp=0x000f001c}) line 3424 CDialog::PreTranslateMessage(tagMSG * 0x004167d8 {msg=0x00000202 wp=0x00000000 lp=0x000f001c}) line 92 CWnd::WalkPreTranslateTree(HWND__ * 0x001204b0, tagMSG * 0x004167d8 {msg=0x00000202 wp=0x00000000 lp=0x000f001c}) line 2667 + 18 bytesCWinThread::PreTranslateMessage(tagMSG * 0x004167d8 {msg=0x00000202 wp=0x00000000 lp=0x000f001c}) line 665 + 18 bytesCWinThread::PumpMessage() line 841 + 30 bytesCWnd::RunModalLoop(unsigned long 4) line 3478 + 19 bytes CDialog::DoModal() line 536 + 12 bytesCDebugApp::InitInstance() line 59 + 8 bytesAfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ *0x00000000, char * 0x00141f00, int 1) line 39 + 11 bytes WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00141f00, int 1) line 30WinMainCRTStartup() line 330 + 54 bytesKERNEL32! 7c816d4f()这里,CDebugDialog::OnOK作为整个调用链中最后被调用的函数出现在call stack的最上方,而内核中程序的启动函数Kernel32! 7c816d4f()则作为栈底出现在最下方。
与VC谈判技巧
与VC谈判技巧因为面对的投资者不一样,很多时候可能会同时面对多个投资人,他们的背景、喜好、知识结构等都不一样,因此,他们所关心的问题及提问方式也不相同,所谓的技巧,实际上是一个心理准备过程,在这个过程里,我们可以增加自己的自信,降低自己的弱势。
一、在几分钟的时间内,最好的介绍方式是找对应物(行业中,成功或失败的例子),谈对应物会让对方非常容易了解你在做什么。
同时也考察了投资商对你领域了解程度。
同时要告诉对方自己在市场中的位置,包括是处于早期还是晚期,每年的销售额,在市场中的份额等。
当然,这里最重要的一点是,可以立刻区分开您与竞争对手的不同之处,以强化自己的项目优势。
二、介绍自己时不要说描述性很多的语言。
要用几个点去定位,让对方清楚知道你做什么,企业的状况。
如果站在投资商角度想问题,会更容易地抓住其注意力。
因为每个投资商都会接到很多商业计划书,会见到很多人,关键在于怎样把你与别人区分开来。
然后,告诉对方未来的发展规划。
此时投资商会和自己投资的策略进行定位。
如果正好符合,自然会开始感兴趣。
三、想要多少钱。
这个问题一定要投资商首先提出,这是一个技巧。
大家都明白一个道理,最后开价的人最值钱,虽然计划书里面有详细的资金使用额度与财务分析等,但投资商还会问你,如果他不问,你不要强调你想要多少钱,而是要把话题重点放在你的优势和他的收益上。
四、奇迹来源于积累,需要不停地做很小的事情。
与投资商的见面往往只留下一个印象,所以需要进一步进行跟踪。
实际上投资商的时间是非常有限,如果愿意在你身上花时间,对你来说是一个重大利好消息。
如果一个投资商不愿意在你身上花什么,说明他对你不感兴趣。
如果有投资商愿意跟你谈,要很好地接待,处理好关系,使投资人逐渐深入了解你,并越来越向企业核心的问题前进。
五、企业核心问题是财务预测,例如商业模式、团队、现有的市场的形式、竞争环境、服务对象、未来3到5年的收入与利润等,财务预测反映出来的是商业模式与盈利模式,同时需要说服投资商确实能够实现这样的目标。
VC6.0 显示,关闭,销毁模态与非模态对话框技巧
VC6.0 显示,关闭,销毁模态与非模态对话框技巧一、显示对话框:1.显示模式对话框:CDialogDemo dlg;dlg.DoModal();2.显示非模式对话框:CDialogDemo *dlg=new CDialogDemo(this);dlg->Create(IDD_GENERAL_CONTROL);dlg->ShowWindow(SW_SHOW);二、关闭对话框:1.CDialog::OnOK();2.CDialog::DestoryWindow();3.CDialog::EndDialog(0);注:CDialog::CloseWindow(); 仅仅是最小化对话框PostMessage(WM_CLOSE)相关函数详解:CloseWindow函数功能:该函数最小化指定的窗口,但并不销毁该窗口。
函数原型:BOOL CloseWindow(HWND hWnd);参数:hWnd:将要最小化的窗口的句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。
若想获得更多错误信息,请调用GetLastError函数。
备注:窗口尺寸被最小化成一个图标,并移动到屏幕的图标区域。
系统显示窗口的图标而不显示窗口,并在图标下显示窗口标题。
应用程序必须使用DestroyWindow函数销毁窗口。
DestroyWindow函数功能:销毁指定的窗口。
这个函数通过发送WM_DESTROY 消息和WM_NCDESTROY 消息使窗口无效并移除其键盘焦点。
这个函数还销毁窗口的菜单,清空线程的消息队列,销毁与窗口过程相关的定时器,解除窗口对剪贴板的拥有权,打断剪贴板器的查看链。
函数原型:BOOL DestroyWindow( HWND hWnd // handle to window to destroy);hWnd :将被销毁的窗口的句柄。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。
VC、MFC各前辈学习方法及感受整理
绍VC6.018个实用小技巧
绍VC6.0的18个实用小技巧[关键字:vc6.0技巧,宏的定义,格式化代码,整理视图,添加lib,添加头文件]1.检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。
如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
2.查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。
相当可喜的是,它也可以看到Microsoft定义的系统宏,非常good.3.格式化一段乱七八糟的源代码选中那段源代码,按ATL+F8。
4.在编辑状态下发现成员变量或函数不能显示删除该项目扩展名为.ncb文件,重新打开该项目。
5.如何整理ClassView视图中大量的类可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.6.定位预处理指定在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.7.如何添加系统中Lib到当前项目在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib之间用空格格开.8.如何添加系统中的头文件(.h)到当前项目.#include <FileName.h>,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找.9.如何在Studio使用汇编调试在WorkBench的Debugger状态下按CTRL+F7.10.怎样处理ClassZiard找不到的系统消息如果要在ClassWizard中处理WM_NCHITTEST等系统消息,请在ClassWizard中Class Info页中将Message filter改为Window就有了.11.如何干净的删除一个类先从Workspace中的FileView中删除对应的.h和.cpp文件,再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件与.clw文件。
VC程序调试.
VC程序调试VC程序调试调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
一、VC程序调试方法 VC的调试功能:首先,再次强调要用Go命令运行一个将要调试的程序;如果要中止调试状态下的运行程序可以点击Stop Debugging命令,还可以通过Break选项以可恢复方式中断调试程序的运行流程(用Restart选项可以重新开始运行程序);Step Into选项表示每次只执行一行语句(单步执行),但如果当前代码是调用一个函数,那么Step Into表示进入该函数,全部函数语句执行完后返回,而Step Over则是跳出这个函数;Step To Cursor 选项表示程序将执行到光标所在的可执行语句行上;在调试多线程程序时,可以在线程函数或主应用程序线程中设置断点,还可以用Break选项结束线程后用Threads选项查看运行线程列表,也可以选择悬挂和恢复每个线程;在设置断点后,在VC "查看"菜单的"调试窗口"中可以查看变量、内存、调用堆栈、寄存器以及反汇编语句。
在程序中设置断点的方法是,点击要设置的代码行并点击设置代码的工具栏按钮,会出现在代码行最左边的一个小黑点即是断点标志,这时再选Go 程序会在执行到端点处停下来,如果要继续执行可以再选Go。
通过选择VC"工具"菜单下的"源浏览器"可以生成一个.BSC文件,使用浏览器可以从中发现多种信息:程序中任何一个变量、函数、类或宏在何处定义及引用;可以列出所有声明的函数类、变量、宏;可以发现调用一个指定函数的所有函数;可以找到一个指定类的派生来源或者它派生出哪些类。
在使用微软程序开发库MSDN时,我们会发现其中的VC示例经常采用看似多余的ASSERT语句,其作用就是使程序具有"维护"性。
提升C语言技术水平的10个实用技巧
提升C语言技术水平的10个实用技巧C语言是一门广泛应用于系统开发和嵌入式编程的高级编程语言。
随着软件行业的发展,掌握C语言的技术水平对于程序员来说变得越来越重要。
本文将介绍10个提升C语言技术水平的实用技巧,帮助读者更好地掌握和应用这门编程语言。
1. 熟悉C语言标准库C语言标准库是C语言开发的基础,掌握常用的标准库函数,如stdio.h、stdlib.h和string.h等,可以提高编程效率和代码质量。
阅读官方文档和参考书籍,了解标准库函数的使用方法和常见应用场景,能够更好地解决实际问题。
2. 学习指针的使用指针是C语言的重要特性,理解和熟练使用指针可以提高程序的效率和灵活性。
掌握指针的基本概念和语法,学会指针的运算和指针与数组的关系,能够更好地处理内存和数据结构。
3. 掌握内存管理技巧C语言没有自动垃圾回收机制,程序员需要手动管理内存。
了解动态内存分配函数malloc和free的使用方法,避免内存泄漏和内存溢出的问题。
同时,熟悉内存布局和堆栈的概念,能够更好地优化程序的内存使用。
4. 编写可维护的代码良好的代码风格和结构可以提高代码的可读性和可维护性。
使用有意义的变量和函数命名,注释代码的关键部分,遵循一致的代码缩进和格式,能够更好地理解和修改代码。
此外,合理使用函数和模块化编程,能够提高代码的复用性和可测试性。
5. 调试和测试技巧调试是程序开发过程中不可或缺的一部分。
熟悉调试工具和技巧,如断点调试、变量监视和堆栈跟踪,能够快速定位和修复程序中的错误。
同时,编写测试用例和进行单元测试,能够提高代码的质量和稳定性。
6. 学习常用数据结构和算法掌握常用的数据结构和算法,如链表、栈、队列和排序算法等,能够更好地解决实际问题。
了解数据结构的特点和应用场景,熟练使用相关的操作和算法,能够提高程序的效率和性能。
7. 多阅读优秀的C语言代码阅读优秀的C语言代码是提升技术水平的有效方法。
通过阅读开源项目和经典的编程书籍,学习其他程序员的设计思路和编程技巧,能够拓宽视野,提高自己的编程能力。
vc 入门经典 教程
实验一:熟悉VC 开发环境,体验MFC(Microsoft Foundation Class)编程方式 1 V isual C++集成开发环境下面是Visual Studio 界面,可以进行c/c++程序的编辑、编译和运行。
2 “不做任何事情”的应用程序1)运行AppWizard 来产生SDI 应用程序。
VC 提供了一个AppWizard 向导来帮助用户创建不同类型的应用程序,这里我们创建较为简单的单文档程序。
在File 菜单项中选择New,然后在New 对话框中单击Project 标签,显示如下:确保选择MFC AppWizard(exe),并填好上面的项目名称(project name 标签)和项目所在目录(location标签)。
单击OK按钮,我们下面通过一系列AppWizard屏幕操作来建立项目,首先是下面的屏幕:这里选择Single Document选项。
然后在接下去的四个屏幕节目上都接受默认参数。
最后的屏幕提示如下图所示:注意,类名和源文件名已经根据项目名产生了,一般类名的默认取名规则是以C开头,接着是项目名,称最后接上功能名称。
上图中的这几个类分别继承于MFC提供的类CView、CWinApp、CFrameWnd和CDocument。
CTest01App的对象代表了应用程序,CMainFrame 类的对象代表着应用程序的主框架窗口。
一般文件的命名比类的命名少开头的C字母。
单击Finish按钮。
在AppWizard产生源代码之前,他将显示New Project Information对话框,如下图所示。
用鼠标单击OK按钮,AppWizard就会开始创建应用程序的子目录(比如此例,在F:\myproject\下的test01)和该子目录下的一些文件。
2)对所产生的代码进行编译和链接。
可以通过选择Build菜单中的Build test01.exe菜单项来创建应用程序或者单击工具栏按钮。
如果创建成功,在应用程序所在目录F:\myproject\test01下将建立一个新的Debug目录,在该目录下将生成一个可执行文件test01.exe。
VC小技巧
VC小技巧1) 有时候,你可能在编译的时候,计算机突然非法关机了(可能某人不小心碰了电源或你的内存不稳定等原因)。
当你重启机器后打开刚才的项目,重新进行编译,发现VC会崩掉。
你或许以为你的VC编译器坏了,其实不然(你试试编译其它项目,还是好的!),你只要将项目的.ncb、.opt、.aps、.clw文件以及Debug、Release目录下的所有文件都删掉,然后重新编译就行了。
2) 如果你想与别人共享你的源代码项目,但是把整个项目做拷贝又太大。
你完全可以删掉以下文件:.dsw、.ncb、.opt、.aps、.clw、. plg文件以及Debug、Release目录下的所有文件。
3) 当你的Workspace中包含多个Project的时候,你可能不能直观地、一眼看出来哪个是当前项目。
可以如下设置:Tools->Options->Format,然后在Category中选择Workspace window,改变其默认的字体(比如设成Fixedsys)就行了。
4) 如何给已有的Project改名字?将该Project关掉。
然后以文本格式打开.dsp文件,替换原来的Project名字即可。
5) VC6对类成员的智能提示功能很有用,但有时候会失灵。
你可以先关掉项目,将.clw 和.ncb删掉,然后重新打开项目,点击菜单项View->ClassWizard,在弹出的对话框中按一下“Add All”按钮;重新Rebuild All。
应该可以解决问题。
1.检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。
如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
2.查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。
VC学习经验谈
VC学习经验谈一、VC是什么?学VC是学什么?首先VC是一个软件(IDE集成开发环境)(编译、编辑、调试)C和C++。
WindowsSDK(软件开发工具)VC的灵魂:MFC(微软基础类库)ATL(ActiveX模板类库)其他的SDK,如OpenGL,DirectX,ActiveMoive,DrawDib(WinG) VC是许许多多技术的综合,就好像少林72般绝技,一般在应用中学会其中很少一部分就够了。
我们的现在目的,其实不过是学一套少林长拳。
这套长拳应包括:1、养成一种严谨的软件开发习惯,熟悉软件工程的基本原则。
2、C语言基础3、C++最基本内容:类、继承性、封装性、多态性的概念4、如何用向导建立一个程序框架5、设计菜单6、设计工具条7、设计和使用对话框,熟悉最常用的对话框控件:按钮、静态文本、编辑框等8、知道怎样新建类、成员函数、成员变量、消息处理函数。
9、了解最常用的Windows消息:如WM_PAINT(重绘窗口),鼠标按下、弹起、移动,初始化对话框,等。
10、了解最简单的GDI(图形设备接口):写文字、画框、画点、画线、画圆,设置画笔、画刷。
11、熟悉最常用的MFC类:CWndCDocumentCViewCDCCDialogCWinAppCGdiObject及子类CString、CPoint、CRect、CSize等简单数据类型CFile以上提到的这些内容,是每个人都会用到的内容。
二、MFC简介上述主要内容都是与实际操作关系非常密切的,在此不可能讲清楚;而且,这些在一般的书里都会讲到。
我主要将最重要的MFC介绍一下。
MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。
应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。
vc6.0安装教程与调试技巧
vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。
3.打开VC6CN文件夹,其中有如下图标,鼠标双击。
4.如下图所示就是我们安装的第一步,单击下一步。
5.选择“接受协议”后单击下一步。
6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。
7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。
8.单击下一步。
9.如下界面,单击“继续”,开始安装软件。
10.点击“确定”。
11.选择“是”,继续安装。
12.选择“typical”继续安装13.选择“ok”。
14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。
17.选择“是”,取消MSDN的安装。
18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++ 6.0”就可以运行程序了。
也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。
调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release状态。
“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
vc6.0调试技巧
/Zi
Program Database
创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI
Program Database for Edit and Continue
除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效
Life is like a box of chocolate, you never know what you are going to get.
二、调试的一些技巧
1、使用ASSERT和VERIFY(原则:尽量简单)
ASSERT:它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。
vc6.0调试技巧
一、基本的调试设置
1、CTRL+F10:运行到当前光标处 DEBUG模式下 用F9在要看的语句上打好断点,F5调试运行,F10单步运行。
2、设置
为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。
LocalFree( lpMsgBuf );
LPVOID lpMsgBuf;
但是也要注意:由于用GetLastError插得代码七零八碎。在Watch窗里使用变量@err时就可以立即看到当前的LastError码。
VC入门教程
VC入门教程vc入门教程一走进 Visual C++1 理解VC工程2 MFC编程特点3使用Wizard二 MFC 程序结构分析1 WINDOWS程序工作原理2 建立应用程序3 程序结构剖析3(1 类CMYAPP3(2 类CMAINFRAME3(3类CMyView与CMyDoc三深入MFC类库1 处理用户输入1(1 定义对话框资源1(2 定义对话框类2 有关屏幕输出2(1 设备上下文工作原理2(2 实例绘图原理剖析2(3 绘图操作实现2(4 有关屏幕映射方式3 文件处理3(1 对象持续化简述3(2 实例分析3(3 与文件处理关系密切的类CFile4 DAO技术4(1 DAO与ODBC4(2 使用MFC实现DAO技术5 打印5.1打印和显示5.2打印分页5.3 打印工作的开始和结束5.4 打印程序实例四、VC程序调试1(1 调试环境的建立1(2调试的一般过程1(3 如何设置断点1(4 控制程序的运行1(5 查看工具的使用2 高级调试技术2.1 TRACE 宏的利用2.2 ASSERT宏的利用2.3 ASSERT_VALID宏的利用以及类的AssertValid()成员函的重载2.4对象的DUMP函数的利用3 内存漏洞的检查五 Visual C++ 与多媒体1 对声音的处理1(1媒体控制接口1(2波形混音器2 多媒体文件I/O3多媒体图形图像技术;4图像合成;5 FLC动画;6热点;一走进 Visual C++Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。
Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。
本光盘教学软件的目的就是为了让你学会在Visual C++环境下,利用微软的基本类库MFC开发出功能强大的Windows应用程序。
在本章节的内容当中,我们将向您介绍使用VC开发软件需要用到的一些基本概念,使用MFC进行编程的基本特点,以及VISUAL C++集成开发环境提供的一系列编程辅助工具--WIZARD的使用方法。
VC 67个技巧
页码,4/29
MDI窗口: 如果是创建新的应用程序,可以用 MFC AppWizard 的Advanced 按钮并在 MDI子窗口风格组中检测最大化或最小化; 还可以重载 MDI Window 的 PreCreateWindow函数,设置WS_MAXMIZE or WS_MINMIZE; 如果 从 CMDIChildWnd 派生,调用 OnInitialUpdate函数中的 CWnd::Show Window来指定 MDI Child Window 的 风格。 13. 如何使程序保持极小状态? 很有意思的 问题 这么办: 在恢复程序窗体大小时, Windows会发送WM_QUERY-OPEN消息, 用 ClassWizard设置成员函数 OnQueryOpen() ,add following code: Bool CMainFrame:: OnQueryOpen( ) { Return false; } 14. 如何限制窗口的 大小? 也就是 FixedDialog形式。 Windows 发送 WM_GETMAXMININFO消息来跟踪, 响应它,在 OnGetMAXMININFO 中写代码: 15. 如何使窗口不可 见? 很简单,用SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow 控制. 16. 如何使窗口始终在最前方? 两种途径. BringWindowToTop(Handle); SetWindowPos函数,指定窗口的 最顶风格,用WS_EX_TOPMOST扩展窗口的 风格 Example: void ToggleTopMost( CWnd *pWnd) { ASSERT_VALID(pWnd); pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)? &wndNoTopMOST: &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE); }
VC调试方法大全
VC调试方法大全VC调试方法大全一、调试基础调试快捷键F5:开始调试Shift+F5: 停止调试F10:调试到下一句,这里是单步跟踪F11:调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9:设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口Release调试1、经常测试你的Debug和Release版本2、不要移除调试代码,如用ASSERT, TRACE等。
3、初始化变量,特别是全局变量,malloc的内存,new的内存4、当你移除某个资源时,确保你移除了所有跟这个资源相关的申明(主要是在resouce.h文中)5、使用3或者4级的警告级编译你的代码,并确保没有警告,project->setting->c/c++->warninglevel(中文版是项目->属性->C/C++->常规->警告等级)6、 _debug改成NDEBUG进行调试,project->setting->C/C++->Preprocessordefinitions(中文版是项目->属性->C/C++->预处理器->预处理定义)(这里是debug和Release编译的重要不同之一)7、在Release中调试源代码,project->setting->C/C++->debug info选择programDataBase(中文版是项目->属性->C/C++->常规->调试信息格式->用于“编辑并继续”的程序数据库),project->setting->link选上Generate debug info(中文版是项目->属性->链接器->调试->生成调试信息)8、走读代码,特别关注堆栈和指针二、TRACE宏当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。
VC6.0 IDE的使用和程序调试技巧
项目工作区窗口
ClassView页
FileView页 ResourceView页
FileView页
ClassView页
File->New->Proj32 Application
基于WINDOWS平台的32位开发环境开发应用程序,SDK程序。 入口函数为WinMain
文件类型 Active Server Page Bitmap File C/C++ Header File HTML Page Resource Script Resource Template
Visual C++6.0 可以创建的文件类型 说明 文件类型 网页制作 Binary File 创建位图文件 C++ Source File 创建 C/C++头文件 Cursor File 创建 HTML 文件 Icon File 创建资源脚本文件 Text File 创建资源模板文件 SQL Script File
6:使用单步执行到程序结束
设置断点以后,调试运行程序时,程序 开始执行,并且运行到断点处暂停下来, 此时我们有机会观察程序的运行情况, 并且诊断程序目前的状态是否如我们所 预期的那样。 不过我们先不着急观察程序的状态,而 是来看看如何控制程序的运行,以便在 我们需要的时候让程序暂停下来,并且 以我们需要的方式走走停停!
方法是使用单步执行手段stepover让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置对比调试运行时出现的调试菜单debug和调试工具栏根据图标查找对应项设置断点调试运行程序此时程序暂停在断点处等待选择debug菜单找到最后一项quickwatch并点击输入想要观察的变量变量名变量的值点击addwatch点击addwatch看到如下画点击单步执行按钮或者菜单程序则向前单独运行一个步骤每向前执行一步就会暂停下来这样我们就有充足的时间观察所关心的变量名称按下f5键可以让程序从当前位置向前执行直到遇见下一个断点或者程序结束下面是赠送的ppt模板不需要朋友可以下载后编辑删除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC++ Tab Control控件的使用1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish.2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl.3. 在对话框的初始化函数OnInitDialog里面添加如下代码:m_tab.InsertItem(0,"参数一"); //添加参数一选项卡m_tab.InsertItem(1,"参数二"); //添加参数二选项卡m_tab.InsertItem(2,"结果"); //添加结果选项卡4.在对话框资源里面添加三个对话框资源, ID分别命名为IDD_PARA1, IDD_PARA2,IDD_RESULT. 字体为宋体, 字号为9, style为Child, Border为None, 宽度调整为161. 再分别为其添加对应的基于CDialog类CPara1, CPara2, CResult.5. 在CMyTabDlg类中添加三个成员变量m_para1, m_para2, m_result, 分别是三个子对话框的实例. 代码如下:CResult m_result;CPara2 m_para2;CPara1 m_para1;6. 在IDD_PARA1对话框上添加静态文本控件内容为"参数一" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara1;在IDD_PARA2对话框上添加静态文本控件内容为"参数二" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nPara2;在IDD_RESULT对话框上添加静态文本控件内容为"结果" 再在后面插入一个文本框控件, 用ClassWizard将其关联为一个int型变量,名为m_nResult;7. 为CPara1类添加成员函数int GetParaValue() 代码如下:int CPara1::GetParaValue(){return m_nPara1;}为CPara2类添加成员函数int GetParaValue() 代码如下:int CPara2::GetParaValue(){return m_nPara2;}为CResult类添加成员函数void SetResultValue(int nResult) 代码如下:void CResult::SetResultValue(int nResult){m_nResult = nResult;}8. 在IDD_MYTAB_DIALOG对话框的初始化函数OnInitDialog里面添加如下代码://关联对话框,并且将IDC_TABTEST控件设为父窗口m_para1.Create(IDD_PARA1,GetDlgItem(IDC_TABTEST));m_para2.Create(IDD_PARA2,GetDlgItem(IDC_TABTEST));m_result.Create(IDD_RESULT,GetDlgItem(IDC_TABTEST));//获得IDC_TABTEST客户区大小CRect rs;m_tab.GetClientRect(&rs);//调整子对话框在父窗口中的位置rs.top+=1;rs.bottom-=60;rs.left+=1;rs.right-=2;//设置子对话框尺寸并移动到指定位置m_para1.MoveWindow(&rs);m_para2.MoveWindow(&rs);m_result.MoveWindow(&rs);//分别设置隐藏和显示m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);//设置默认的选项卡m_tab.SetCurSel(0);9. 添加Tab Control控件的TCN_SELCHANGE事件响应函数OnSelchangeTabtest(NMHDR* pNMHDR, LRESULT* pResult) ,函数体代码如下:int CurSel = m_tab.GetCurSel();switch(CurSel){case 0:m_para1.ShowWindow(true);m_para2.ShowWindow(false);m_result.ShowWindow(false);break;case 1:m_para1.ShowWindow(false);m_para2.ShowWindow(true);m_result.ShowWindow(false);break;case 2:m_para1.ShowWindow(false);m_para2.ShowWindow(false);m_result.ShowWindow(true);break;default:;}*pResult = 0;10. 在IDD_MYTAB_DIALOG对话框下面添加一个按钮, 标题为"计算" 为其添加事件响应函数, 代码如下:m_para1.UpdateData(true);m_para2.UpdateData(true);m_result.SetResultValue(m_para1.GetParaValue()+m_para2.GetParaValue());m_result.UpdateData(false);11.这个小程序很简单,但是他说明了T ab Control控件的基本用法.VC6.0中如何改变对话框的背景颜色---- 笔者曾在《软件报》2000年第5期中讨论过如何改变控件的颜色,但还有相当一部分的读者来信提问:一个基于对话框的MFC AppWizard应用程序中,如何改变对话框的背景颜色呢?对于这个问题,其实可以由几种不同的方法来实现,具体如下(粗斜体代码为增添的):---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。
下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:---- ①新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。
---- ②在CExampleDlgApp ::InitInstance()中添加如下代码:BOOL CExampleDlgApp: : InitInstance ( ){…CExampleDlgDlg dlg;m_pMainWnd = &dlg;//先于DoModal()调用,将对话框设置为蓝色背景、红色文本SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));int nResponse = dlg.DoModal();…}---- 编译并运行,此时对话框的背景色和文本色已发生了改变。
值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
---- 方法二:重载OnPaint(),即WM_PAINT消息。
有关代码如下(以上例工程为准):void CExampleDlgDlg::OnPaint(){if (IsIconic())…else{CRect rect;CPaintDC dc(this);GetClientRect(rect);dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景CDialog::OnPaint();}---- 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR 消息。
具体步骤如下(以上例工程为准):---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:class CExampleDlgDlg : public CDialog{...protected:CBrush m_brush;...};---- ②在OnInitDialog()函数中添加如下代码:BOOL CExampleDlgDlg::OnInitDialog(){...// TODO: Add extra initialization herem_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子...}---- ③利用ClassWizard重载OnCtlC olor(…),即WM_CTLCOLOR消息:HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){/*** 这里不必编写任何代码!**下行代码要注释掉** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);*/return m_brush; //返加绿色刷子}---- 方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。
具体步骤如下(以上例工程为准):---- 步骤①、②同上方法三中的步骤①、②。
---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:HBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//在这加一条是否为对话框的判断语句if(nCtlColor ==CTLCOLOR_DLG)return m_brush; //返加绿色刷子return hbr;}---- 编译并运行即可。
---- 关于如何改变对话框背景颜色的问题,可能还有很多种不同方法可以实现,笔者在这仅举出四种常见的方法。