VC的一些实用技巧和注意事项

[IDE下载和安装]                                                                                                         
1、VC和MSDN的下载
    强烈建议安装英文版!
    
2、安装程序制作工具下载
    InstallShield系列,可以去缘网下载。

3、VC插件的下载
    推荐Visual Assist,其良好的提示功能使开发程序方便很多
    似乎中文版不能使用 Visual Assist,vs没有key,但有破解

[IDE环境使用]                                                                                                           

1、如何彻底删除一个类:
    选择FileView标签把相应的.cpp和.h删除,然后关闭工程,删掉.clw文件,
如果愿意,还可以把没用的.cpp和.h文件从硬盘删除。重新进入工程,按Ctrl+W,
会提示不存在.clw文件,是否重新建立该文件,选确定后,选择全部文件,再按OK。

2、在编辑状态下发现成员变量或函数不能显示
    删除该项目扩展名为.ncb文件,重新打开该项目。

3、debug和release的区别,及如何设置
    编译在VC++中有两种模式,一种是Release Build另一种是Debug Build。它们之

间的区别在于,Release Build不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC

Release库,编译十对应用程序的速度进行优化,而Debug Build则正好相反,它允许对源

代码进行调试,可以定义和使用MFC的诊断宏,采用MFC Debug库,对速度没有优化。所以

我们应该在Debug模式下开发应用程序,然后在Release模式下发布应用程序。在我们的工

程文件夹下会有一个Debug文件夹和一个Release文件夹分别存放输出文件和中间文件。
    在VC中菜单中选择Build->Set Active Configuration,里面可以选择win32

Release或win32 Debug,来设置目前程序的模式为release版本或debug版本


1、编译:
Q:unexpected end of file while looking for precompiled header directive

A:
(1)使用MFC,未包含stdafx.h

(2)函数或成员函数的"{""}"未匹配

(3)预编译指令未匹配

(4)在编译选项中选择了using precompiled header,而.cpp没有直接或者间接

#incldue 相应的头文件

其实(1)就是(4)的一个特例,只不过一般编写程序的时候很少用到precompiled

header,而MFC程序,哦,其实只要使用AppWizard建的C++工程都会自动使用这个

功能,造成高出错率。

Q:Error spawning c1.exe
A:tool->Option->Directories ,select Executable files,add your executable

filepath,such as :F:/Program Files/Microsoft Visual Studio/VC98/BIN

Q:Cannot open precompiled header file: ''Debug/server.pch''
A: rebuild all,或者不用预编译头文件

2、链接
一般link出错的类型如下:

(1).关于类,比如类中成员函数声明而未实现,或者类的静态成员变量在.cpp文件中

没有声明

(2).使用开发环境中工程类型错误,比如应用console工程的,建了个win
application工程

(3).有些类库的使用需要加载.lib文件,在VC中可以通过#pragma comment(lib,

"lib direction")来解决,或者在project->setting->link->input中填入该lib文
件的路径和名字
(4).变量定义冲突,解决方法一般为在.h中声明该变量,而在.cpp文件中定义该变量

(5).有些code generation需为mulitthread,比如多线程CreateThread函数,在

project->setting->C/C++->code generation中将single thread改为MT(具体看
要求);或者与加载的dll or lib的code generation冲突,具体可查询必要的资料。

其实在VC中出现link错误都有个错误码,可以查询MSDN来了解该错误的阐述,

3.得到文档类,视图类,应用程序对象以及MainFrame类的指针
    得到应用程序对象的指针:AfxGetApp();
    对于单文档:
    在MainFrame里得到Doc的指针:CMainFrame::GetActiveDocument();
    在View里得到Doc的指针:CView::GetDocument();
    得到MainFrame的指针:CMainFrame* pFrame=(CMainFrame*)AfxGetMainWnd();
    然后再用pFrame做想做的任何事。
    对于多文档:
    在MainFrame里等到Doc的指针:
    CFrameWnd* pActiveFrame=GetActiveFrame();
    CDocument* pDoc=pActiveFrame->GetActiveDocument();
    注意不能直接使用CMainFrame()->GetActiveDocument(),不然会发现得到的是

    空指针。

4.如何防止重画闪烁
    如果每一次都是对整个画面进行填充的话,可以试试处理WM_ERASEBKGROUND
消息,在CWnd::OnEraseBkGround()函数里,不要调用基类,直接return TRUE好了。
如果是小区域更新,可以使用InvalidataRect(rect)函数,其中rect指定了更新的区域。

另外还有一种方法是使用内存DC,先将图画在内存DC中,然后画在屏幕上,具体方法可以

网上查一下。

5.如何在程序中调用其它应用程序
    WinExec,CreateProcess,ShellExcute
    最简单的是使用ShellExecute()函数。
    比如:
   ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
   文章出处:http://www.diybl.com/course/3_program/vc/vc_js/2008410/108854_2.html

6.检测程序中的括号是否匹配
把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。

7.格式化一段乱七八糟的源代码
选中那段源代码,按ATL+F8。
8.如何整理ClassView视图中大量的类
可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.
9.定位预处理指定
在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.
10.如何添加系统中Lib到当前项目
在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib之间用空格格开.
11.如何添加系统中的头文件(.h)到当前项目.
#include <FileName.h>,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找.
12.如何在Studio使用汇编调试
在WorkBench的Debugger状态下按CTRL+F7.
13.怎样处理ClassZiard找不到的系统消息
如果要在ClassWizard中处理WM_NCHITTEST等系统消息,请在ClassWizard中Class Info页中将Message filter改为Window就有了.
14.在Studio中快速切换两个文件
有时,我们需要在最近使用的两个文件中快速切换,换Ctrl+F6。这在两个文件不相今的时候就有用的。
15.取得源程序预处理后的结果:
在Studio里,可以在->PROJECT->SETTINGS->C/C++->Project Options中,在最后加上 /P /EP 这两个编译开关即可做到"只进行预处理".就可以了。编译以后就可以在源程序目录中发现“文件名.I ”的文本文件。这就是预处理后的结果。 15.在Debug模式中查看WINAPI调用后的返回值:
很简单,且实用:在watch中加入@hr,err。在CSDN的文档中心有一篇讲得更细,请参考。
16.产生指定源程序文件的汇编代码:
从IDE菜单的Project->Setting打开项目设置,按如下文件做:
1.先在左边选择指定文件,可以多选。
2. 在右边的C++属性页中,在category中选择List Files,接着在下面的List Files Type中选择Assembly and source code(或选择其它),最后在List File Name中输入在个C/C++源文件产生的相应的汇编代码的文件。
3.编译整个工程。
17.手工编译纯资源成dll:
Rc.exe /v data.rc
Cvtre*.**e /machine:ix86 data.res
Link /SUBSYSTEM:WINDOWS /DLL /NOENTRY data.res ;编译成DLL文件
这种方式创建的DLL是最小的,比起你用Win 32 Dynamic Libray等产生的更小。
阅读文档中心里的“充分挖掘你的VC++ IDE的潜能”,作者:zhengyun_ustc,这是一系列的好文章
(注意注:区分大小定,请用大定/P)

[其它]                                                                                                                  

1、常见数据类型之间的转换
例如:
    char数组或char*到CString的转换
        有char型的数组char buffer[row][col],将它转换成CString类型的
    CString str=CString((char*)buffer,row*col);

    CStirng与string的转换
    string转化为CString:
        string s;
        s="hello";
        CString str(s.c_str());

    int,long,float,double 等转换为CString

    int i=1;
    CString s;
    s.Format("%d",i);
    类似printf的格式化写法

    CString 转换为int,float,double等类型
    请参见atoi,atof,atol 等函数

2、CSocket ,CAsyncSock 调用Create()函数失败

    请先在CXXXApp::InitInstance里面调用AfxSocketInit函数

文章出处:http://www.diybl.com/course/3_program/vc/vc_js/2008410/108854_3.html

-----------------------------------------------------------------------------------------------------------------------------------

附:VC项目文件说明
.dsp 项目参数配置文件,这个文件太重要,重点保护对象。.
.dsw 工作区文件,重要性一般,因为它信息不我,容易恢复。
以下文件在项目中是可丢弃的,有些文件删除后,VC会自动生成的。
.clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用ClassWizard的时候绘提示你是否重建.
.ncb 无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。build后会自动生成。
.opt 工程关于开发环境的参数文件。如工具条位置等信息;(可丢弃)
.aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他.
.plg 是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大.在Tools->Options里面有个选项可以控制这个文件的生成.
.hpj (Help Project)是生成帮助文件的工程,用microsfot Help Compiler可以处理.
.mdp (Microsoft DevStudio Project)是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式.
.bsc 是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件.如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,可以加快编译速度.
.map 是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着.
.pch (Pre-Compiled File)是预编译文件,可以加快编译速度,但是文件非常大.
.pdb (Program Database)记录了程序有关的一些数据和调试信息,在调试的时候可能有用.
.exp 只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息.一般也没什么用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值