从vc6升级到vc7的一些问题及解决方法

从vc6升级到vc7的一些问题及解决方法

1. 编译时出现: WINVER not defined. Defaulting to 0×0501 (Windows XP and Windows .NET Server)
这个问题是因为没有指定工程要使用的平台 SDK的版本。
Minimum system required
Macros to define
Windows Server 2003 family
_WIN32_WINNT>=0×0502
Windows XP
_WIN32_WINNT>=0×0501
Windows 2000
_WIN32_WINNT>=0×0500
Windows NT 4.0
_WIN32_WINNT>=0×0400
Windows Me
_WIN32_WINDOWS=0×0490
Windows 98
_WIN32_WINDOWS>=0×0410
Internet Explorer 6.0
_WIN32_IE>=0×0600
Internet Explorer 5.01, 5.5
_WIN32_IE>=0×0501
Internet Explorer 5.0, 5.0a, 5.0b
_WIN32_IE>=0×0500
Internet Explorer 4.01
_WIN32_IE>=0×0401
Internet Explorer 4.0
_WIN32_IE>=0×0400
Internet Explorer 3.0, 3.01, 3.02
_WIN32_IE>=0×0300
解决办法:
属性, C/C++,命令行,附加项中添加 /D_WIN32_WINNT=0×0501 (因为我是在xp下工作的所以是0×0501)
 
2. Link是出现: LINK : warning LNK4075: 忽略”/EDITANDCONTINUE”(由于”/INCREMENTAL:NO”规范)
这个问题是因为在 vc6中,工程使用的增量编译。
解决办法:
属性,链接器,常规,启动增量链接 选择 是 (INCREMENTAL)
 
3. 编译时出现: warning C4129: “U” : 不可识别的字符转义序列
error C3847: 通用字符中的错误符号;必须使用十六进制数字
原因:为开发全球通用的应用程序, .NET Framework 使用 Unicode UTF-16(Unicode 转换格式,16 位编码形式)来表示字符。在某些情况下,.NET Framework 在内部使用 UTF-8。引入通用字符名称的格式是 \u####\U########
解决办法:
//#include MAKEPATH(MAIN_IMAGE_PATH, FunUtil\\Unit_star.txt)
#include “..\\ImageData\\ML128160\\FunUtil\\Unit_star.txt”
 
4. 链接是出现: LIBCMTD.lib(crt0dat.obj) : error LNK2005: _exit 已经在 MSVCRTD.lib(MSVCR71D.dll) 中定义 等类似错误
原因:
Run-Time Library
•Run-Time Library是编译器提供的标准库,提供一些基本的库函数和系统调用。
我们一般使用的Run-Time Library是C Run-Time Libraries。当然也有Standard C++ libraries。
C Run-Time Libraries实现ANSI C的标准库。VC安装目录的CRT目录有C Run-Time库的大部分源代码。 C Run-Time Libraries有静态库版本,也有动态链接库版本;有单线程版本,也有多线程版本;还有调试和非调试版本。
•动态链接库版本:
/MD Multithreaded DLL 使用导入库MSVCRT.LIB
/MDd Debug Multithreaded DLL 使用导入库MSVCRTD.LIB
•静态库版本:
/ML Single-Threaded 使用静态库LIBC.LIB
/MLd Debug Single-Threaded 使用静态库LIBCD.LIB
/MT Multithreaded 使用静态库LIBCMT.LIB
/MTd Debug Multithreaded 使用静态库LIBCMTD.LIB
若要使用此运行时库
请忽略这些库
单线程 (libc.lib)
libcmt.lib、 msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
多线程 (libcmt.lib)
libc.lib、 msvcrt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
使用 DLL 的多线程 (msvcrt.lib)
libc.lib、 libcmt.lib、libcd.lib、libcmtd.lib、msvcrtd.lib
调试单线程 (libcd.lib)
libc.lib、 libcmt.lib、msvcrt.lib、libcmtd.lib、msvcrtd.lib
调试多线程 (libcmtd.lib)
libc.lib、 libcmt.lib、msvcrt.lib、libcd.lib、msvcrtd.lib
使用 DLL 的调试多线程 (msvcrtd.lib)
libc.lib、 libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib
解决方法:
属性,链接器,输入,忽略指定库 libc.lib、libcmt.lib、msvcrt.lib、libcd.lib、libcmtd.lib (这是我需要忽略的,你可以根据你工程的实际情况选择。)

update(20060205):
5. 链接是出现不能打开 mfc4xx.lib的错误时,这是因为VC7对MFC的dll进行了升级。

解决办法:
属性,链接器,输入,附加依赖项 中 添加mfc71d.lib。
 
2, 简述在VC6建立的工程中后缀为.cpp,.h,.rc,.dsp,.dsw的文件的作用是什么?
.cpp是源程序代码C++文件
.h是包含函数声明和变量定义的头文件
.rc是定义资源的资源脚本文件
.dsp是工程文件,记录当前工程的有关信息
.dsw是工作区文件,一个工作区可能包含一个或多个工程
 
3, 已知一个对话框上有一个编辑框控件,ID为IDC_EDIT1,为其关联了CEdit类型的变量m_edit1,使用两种方法,说明如何改变编辑框内部的文本为"Hello",写出程序代码的片断。
第一种方法:m_edit1.SetSel(0,-1);         
             m_edit1.ReplaceSel("Hello");      
第二种方法:SetWindowText("Hello");    
 
4, 简述使用Windows API编写的一个基本的Windows应用程序框架的结构。
Windows API编写的基本应用程序框架至少应该包含程序入口函数 WinMain和窗口函数WndProc。在主函数WinMain里面包含窗口类的定义和注册,窗口的创建和显示以及消息循环。
 
5, 消息在 Windows中的数据类型是什么,它有哪些成员变量,各有什么含义
消息的数据类型是MSG,它是一个结构体,其成员变量主要包括hwnd,表示消息的窗口句柄;message代表消息的类型;wParam和lParam包含消息的附加信息,随不同的消息有所不同。
 
6, Windows的鼠标消息的长参数 lParam与字参数wParam的含义是什么
鼠标消息的长参数lParam的低字节包含了鼠标光标位置的x坐标值,lParam的高字节包含了鼠标光标位置的y坐标值;字参数wParam内包含了指示当前按下的各种虚键状态的值。
 
7, 说明使用一个非模态对话框的注意问题和用到的 Windows API函数
使用一个非模态对话框应该注意一定要在样式中包含WS_VISIBLE才能正常显示;创建对话框使用CreateDialog函数;消息循环部分应该使用IsDialogMessage过滤消息;关闭对话框使用函数DestroyWindow。
 
8, 简述在 MFC应用程序中UpdateData函数的作用及其参数含义与使用场合。
UpdateData只有一个 BOOL类型的参数,UpdateData(FALSE)一般用于对话框控件连接的变量值刷新屏幕显示;UpdateData(TRUE)用于获取屏幕数据到对话框控件连接的变量中。
 
9, 列举列表框控件能够接受的三个消息类型,并说明其作用
LB_ADDSTRING用于在列表框中加入一项字符串; LB_DIR用于在列表框中列出指定文件;LB_GETTEXT用于获取指定项的文本。
 
10, 在一个对话框上添加了三个单选按钮,要使它们之间自动实现互斥,应该注意什么问题,在 VC环境下如何操作?
要实现一组单选按钮的自动互斥,应该让它们的控件ID值连续,并设置第一个单选按钮的Group属性,其他的不设。
 
11, 简述由一个文档类派生自己的文档类,并实现文档的存取需要哪些步骤。
首先为每一个文档类型从CDocument派生一个相应的文档类;然后为该文档类添加成员变量以保存数据;最后重载Serialize成员函数以实现文档数据的串行化。
 
12, 列举视图类 (CView)的三个子类,并简要说明其作用。
CScrollView类提供视图的滚动显示; CEditView类支持在视图中的文本编辑操作;CHtmlView类支持在视图中显示和操作html文件。
 
13, Visual C++ 6.0如何进入调试状态,在调试状态下能够显示哪些调试窗口,列举三个,其作用分别是什么 ?
启动调试后,在View菜单的Debug Window子菜单下可以打开一些辅助调试的窗口
Watch:显示察看当前语句和前面语句中变量值的窗口
Call Stack:显示察看调用堆栈的窗口
Memory:显示察看内存中内容的窗口
 
14, 说明位图资源的创建及显示过程的步骤,并给出相应的 Windows API函数名。
首先定义位图句柄HBITMAP hBitmap;第二步使用LoadBitMap加载位图;第三步,调用CreateCompatibleDC向系统申请内存设备环境句柄,并调用函数SelectObject把位图选入内存设备环境;第四步,调用BitBlt函数将位图从内存设备环境输出到指定的窗口设备环境中,从而实现显示位图。
 
15, 如何获取字体句柄从而实现字体的输出,并给出相应的 Windows API函数名。
首先定义字体句柄变量HFONT hF;然后调用函数GetStockObject获取系统的字体句柄,或者调用CreateFont得到自定义的字体句柄;最后调用SelectObject把字体句柄选入设备环境。
 
16, 列举三种按钮的类型,并说明其作用和创建方法之间的不同之处。
常用的按钮有普通按钮、单选按钮、复选框,和组框。普通按钮作用是帮助用户触发指定动作;单选按钮一般各选项之间存在互斥性;复选框用来显示一组选项供用户选择,各选项之间不存在互斥;组框主要用于把控件分成不同的组并加以说明.
 
17, 要使一个静态控件显示一个位图并能接受用户输入,应该注意什么问题。
要使静态控件显示位图,必须设定其风格包含SS_BITMAP,并在创建静态控件窗口,即调用CreateWindow时指定并加载位图;要使静态控件能够接收用户输入,必须设定其风格包含SS_NOTIFY。
 
18, 列举滚动条控件的四种类型的动作标识,并说明其发生的场合。
常用的滚动条控件的动作标识包括(对于垂直滚动条):SB_LINEUP表示向上滚动一行;SB_LINEDOWN表示向下滚动一行;SB_PAGEUP表示向上滚动一页;SB_PAGEDOWN表示向下滚动一页。
 
19,说明使系统定时器消息 (WM_TIMER)的使用方法及其用到的Windows API函数
使用定时器消息的方法是:首先调用SetTimer函数定义定时器消息,包括消息产生的时间间隔等;然后在相应的WM_TIMER消息处理里添加定时器消息响应代码;最后调用KillTimer释放该定时器。
 
20, MFC应用程序向导能够创建那几种类型的应用程序框架,哪些采用了文档/视图结构。
MFC应用程序向导能建立基于单文档 (SDI),基于多文档(MDI)和基于对话框(Dialog Based)三种应用程序的框架。其中前两种采用了文档/视图结构。
 
21,列举五种控件 ,说明其作用和MFC对应的类名
CStatic是静态文本控件窗口,用于标注、分隔对话框或窗口中的其他控件; CButton是按钮控件窗口,为对话框或窗口中的按钮、单选按钮和多选按钮等提供一个总的类;CScrollBar是滚动条控件窗口,提供滚动条的功能,用于在对话框或窗口中的一个控件,通过它在某一范围内定位;CListBox是列表框控件窗口,列表框用于显示一组列表项,用户可以进行观察和选择;CProgressCtrl是进度条控件窗口,用于指示一个操作的进度。
 
22, MFC的文档/视图结构中说明视图类如何访问文档类,文档类如何通知视图类进行更新,给出成员方法名?
MFC的文档 /视图结构中,视图类通过其成员方法GetDocument获得对应文档类的指针,从而访问文档类的数据;文档类通过其成员方法UpdateAllViews通知所有视图,文档已经被修改,视图应该被重画。
 
23,简述在一个基于对话框的 MFC应用程序框架中添加一个编辑框(编辑框的控件ID是IDC_EDIT1,已经为其连接了变量m_edit1),要求在其中动态显示示当前时间,时间格式为“HH:mm:ss",如"15:20:16",每一秒钟刷新一次,如何实现,给出代码片断。(提示:使用定时器SetTimer)
实现方法:实现定时器,每隔一秒钟发出WM_TIMER消息,并在该消息相应函数中添加代码更新编辑框内容。            
第一步:为对话框的WM_INITDIALOG的消息响应函数OnInitDialog中添加代码: SetTimer(1,100,NULL);           
第二步: 为对话框添加WM_TIMER的消息相应函数OnTimer,并在其中添加代码:            
              CTime tNow;
              tNow=CTime::GetCurrentTime();
              CString sNow=tNow.Format("%I:%M:%S");
              m_edit1.SetSel(0,-1);
              m_edit1.ReplaceSel(sNow);
第二步: 为对话框的WM_DESTRYOY的消息响应函数OnDestroy中添加代码 KillTimer(1);


FROM:http://blog.csdn.net/d007879/archive/2006/03/14/623895.aspx

你可能感兴趣的:(从vc6升级到vc7的一些问题及解决方法)