首页 02_vc_api( (VC++教程))

02_vc_api( (VC++教程))

举报
开通vip

02_vc_api( (VC++教程))null第1讲 Windows 应用程序基础*第1讲 Windows 应用程序基础湖南城市学院计算机系 贾丽媛 jia_4211003@126.com工控机和上位软件讨论:讨论上位系统:WINCC LABVIEW INTOUCH MATLAB VB VC群 号:20423623 电子学习共同促进群学习探讨单片机 电子线路等电子技术。 群 号:234742235 电气制图软件交流促进 群 号:182667049 自动化行业非标PLC编程 群 号:170665069 null*1.1Windows程序内部运行原...

02_vc_api( (VC++教程))
null第1讲 Windows 应用程序基础*第1讲 Windows 应用程序基础湖南城市学院计算机系 贾丽媛 jia_4211003@126.com工控机和上位软件讨论:讨论上位系统:WINCC LABVIEW INTOUCH MATLAB VB VC群 号:20423623 电子学习共同促进群学习探讨单片机 电子线路等电子技术。 群 号:234742235 电气制图软件交流促进 群 号:182667049 自动化行业非标PLC编程 群 号:170665069 null*1.1Windows程序内部运行原理 Windows应用程序,操作系统,计算机硬件之间的相互关系 *Windows应用程序,操作系统,计算机硬件之间的相互关系 关于API*关于API向下的箭头③ 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。这个关系好比有个机器人能够完成行走的功能,但是,如果人们不告诉它往哪个方向上走,机器人是不会主动行走的。这里的机器人就是操作系统,人们就是应用程序。 http://www.sunxin.org关于API *关于API 那么,应用程序是如何通知操作系统执行某个功能的呢?有过编程经验的读者都应该知道,在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。 http://www.sunxin.org关于消息及消息队列*关于消息及消息队列向上的箭头④表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。 http://www.sunxin.org关于消息及消息队列 *关于消息及消息队列 操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG; http://www.sunxin.org关于句柄 *关于句柄 句柄(HANDLE),资源的标识。 操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。 http://www.sunxin.org从变量的类型区分变量的用途*从变量的类型区分变量的用途int x,y; x=30; y=30; //x和y既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。 typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; //好处:我们从变量的类型上就可以知道x和y是用来表示宽度和高度。http://www.sunxin.org二、Windows编程基础*可视化开发 系统集成了一系 列系统可用资源 和开发工具二、Windows编程基础null*采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序对象特征:具有规范形态(数据)和操作模式(函数操作)null*APIAPI函数 的功能null* 利用Windows API函数编写Windows应用程序必须首先了解以下内容: (1)窗口的概念 (2)事件驱动的概念 (3)句柄 (4)消息null*(1) 窗口 一个应用程序的窗口一般包含下列成分:null*编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。应用程 序与用 户之间 交互的 接口环 境系统管理 应用程序 的基本单位Win应用程序 基本的操作单元null*Windows程序设计是针对事件或消息的处理进行 消息是描述事 件发生的信息 (如按下鼠标或键盘)事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。(2)事件驱动 null*常用句柄类型及其说明(3) 句柄应用程序通过 句柄访问相应 的对象信息HWND 窗口句柄 HDC 设备环境句柄 HBITMAP 位图句柄 HCURSOR 光标句柄 HICON 图标句柄 HFONT 字体句柄 HMENU 菜单句柄 HPEN 画笔句柄 HFILE 文件句柄 HBRUSH 画刷句柄 HINSTANCE 当前实例句柄null* Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。typedef struct tagMSG {HWND hwnd; 窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam; 包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; DWORD time; 指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体 }MSG;附加信息与具体 消息号的值有关, 在Win中消息用 结构体MSG表示typedef struct tagPOINT {LONG x; LONG y; } POINT;(4) 消息null*(4) 消息 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:BM 表示按钮控制消息 CB 表示组合框控制消息 DM 表示默认下压式按钮控制消息 EM 表示编辑控制消息 LB 表示列表框控制消息 SBM 表示滚动条控制消息 WM 表示窗口消息窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息Windows编 程常用消息null*三、Windows应用程序常用消息1. WM_LBUTTONDOWN:产生单击鼠标左键的消息此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生; WM_RBUTTONUP:放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; WM_RBUTTONDBLCLK:双击鼠标右键时产生。null*2. WM_KEYDOWN:按下一个非系统键时产生的消息 系统键是指实现系统操作的组合键,例如Alt或F10与某个功能键的组合以实现系统菜单操作等。3. WM_ CHAR:按下一个非系统键时产生的消息wParam 为按键的ASCII码 lParam 与WM_KEYDOWN的相同wParam:按下键的虚拟键码,用以标识按下或释放的键 lParam:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。相似的消息还有WM_KEYUP, 在放开非系统键时产生如F1的虚拟键码 在Windows.h文 件中定义为VK_F1null*4. WM_CREATE:由CreateWindow函数发出的消息wParam:未用 lParam:包含一个指向CREATESTRUCT数据结构的指针5. WM_CLOSE:关闭窗口时产生的消息wParam和lParam均未用。6. WM_DESTROY:由DestroyWiodow函数发出的消息wParam和lParam均未用。null*7. WM_QUIT:由PostQuitMessage函数发出的消息退出应用程序时发出的消息 wParam:含退出代码,标识程序退出运行时的有关信息 1Param:未用8. WM_PAINT(图形的刷新请求)null*图形刷新(1) 刷新请求 null*(2) 系统对刷新请求的响应 当用户区的内容需要刷新时,系统向应用程序消息队列发送WM_PAINT消息,系统在应用程序的消息队列中加入该消息,以通知窗口函数执行刷新处理三种 刷新窗口移动后的刷新 被覆盖区域的刷新 对象穿越后的刷新 (系统自动完成)用户区移动或显示 用户窗口大小改变 程序通过滚动条滚动窗口窗口被另一个窗口覆盖的 恢复如下拉式菜单关闭等光标穿过用户区 图标拖过用户区null*四、Windows中的事件驱动程序设计过程驱动方法计算平均成绩事件驱动方法计算平均成绩null*五、Windows应用程序组成及编程步骤 1. 应用程序的组成一个完整的Windows应用程序通常由五种类型的文件组成。1.C语言源程序文件 2.头文件 3.模块定义文件 4.资源描述文件 5.项目文件 API应用程序中的文件*API应用程序中的文件1、用记事本打开这两个dsw和dsp文件看. dsw是指工作区的配置文件,比如说你的工作区打开了哪几个文件, .dsp是指工程的配置文件,比如说你的工程包含哪个文件,你的编译选项是什么,等等编译的时候是按照.dsp的配置来的. 2、一个工程的结果就是一个EXE文件。 一个工作区可以包括多个工程,工作区这个概念就是为了管理多个工程设计的,比如要开发一个网络程序,有服务器和客户端两个程序(工程),那么我用一个工作区把两个工程都包括起来,方便管理,程序编译执行的最小单位还是工程,与工作区无关 null**.dsp:是VC++的项目文件,文本格式。 *.dsw:是工作区文件,它可以指向一个或多个.dsp文件。 .rc:资源文件 .mak:工程文件即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理。 .def:模块定义文件,为链接器提供有关被链接程序的导出、属性及其他方面的信息。生成 DLL 时,.def 文件最有用 null*Resource Script 资源脚本文件(.rc); Resource Template 资源模板文件(.rct);null*2. 源程序组成结构1. 所有应用程序的入口,类似Main函数, 2. 完成一系列的定义和初始化,并产生消息循环WinMain和WinProc是 Windows应用程序的主体null*(1) WinMain函数三个基本的组成部分:函数说明、初始化和消息循环WinMain函数注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识null*(2) 初始化(a)窗口类定义 通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:此窗口还在内存中并未显示null*LoadCursor的作用是在应用程序中加载一个窗口光标 HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName)光标资源所在的模 块句柄,NULL则使 用系统预定义光标光标资源名或系统 预定义光标标识名应用程序调用函数GetStockObject获取系统提供的背景刷 HBRUSH GetStockObject(int nBrush); null*(b)注册窗口类Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。 RegisterClass(&wndclass); //wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回真null*(c) 创建窗口实例创建一个窗口类的实例由函数CreateWindow()实现 函数原型如下: HWND CreateWindow ( LPCTSTR lpszClassName,∥窗口类名 LPCTSTR lpszTitle, ∥窗口标 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 名 DWORD dwStyle, ∥创建窗口的样式 int x,y, ∥窗口左上角坐标 int nWidth,nHeight, ∥窗口宽度和高度 HWND hwndParent, ∥该窗口的父窗口句柄 HMENU hMenu, ∥窗口主菜单句柄 HINSTANCE hInstance, ∥创建窗口的应用程序当前实例句柄 LPVOID lpParam ∥指向一个传递给窗口的参数值的指针 )null*窗口类的类型*窗口类的类型在我们的程序中经常要用到一类变量,这个变量里的每一位(bit)都对应某一种特性。当该变量的某位为1时,表示有该位对应的那种特性,当该位为0时,即没有该位所对应的特性。当变量中的某几位同时为1时,就表示同时具有几种特性的组合。一个变量中的哪一位代表哪种意义,不容易记忆,所以我们经常根据特征的英文拼写的大写去定义一些宏,该宏所对应的数值中仅有与该特征相对应的那一位(bit)为1,其余的bit都为0。我们使用goto definition就能发现CS_VREDRAW=0x0001,CS_HREDRAW=0x0002,CS_DBLCLKS =0x0008,CS_NOCLOSE=0x0200。他们的共同点就是只有一位为1,其余位都为0。如果我们希望某一变量的数值既有CS_VREDRAW特性,又有CS_HREDRAW特性,我们只需使用二进制OR(|)操作符将他们进行或运算相组合,如style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE。如果我们希望在某一变量原有的几个特征上去掉其中一个特征,用取反(~)之后再进行与(&)运算,就能够实现,如在刚才的style的基础上去掉CS_NOCLOSE特征,可以用style & ~CS_NOCLOSE实现。 http://www.sunxin.orgnull*(d)显示窗口窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口 ShowWindow(hwnd,nCmdshow);//hwnd 表示在哪个窗口显示,nCmdshow为窗口显示形式标识显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。 UpdateWindow(hwnd);null*(3) 消息循环消息循环的常见格式如下: MSG Msg; … while (GetMessage (&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); }将消息的虚拟键 转换为字符信息将消息传送到 指定窗口函数将消息传递给窗口函数的相应过程处理Windows将产生的消息WinMain函数null*2. 窗口过程函数WinProc WinProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。窗口过程函数*窗口过程函数第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数,也称回调函数。回调函数的原理是这样的,当应用程序收到给某一窗口的消息时(还记得前面讲过的消息通常与窗口相关的吗?),就应该调用某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是,回调函数本身的代码必须由应用程序自己完成。对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过lpfnWndProc成员指定的。 http://www.sunxin.org窗口过程函数*窗口过程函数举例:汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好。 http://www.sunxin.orgCALLBACK函数*CALLBACK函数1、回调函数是用来处理窗口消息的函数,一般类型为     WindowProc(HWND   hWnd,UINT   message,   WPARAM   wParam,   LPARAM   lParam);   2、回调函数,Windows消息响应的一种方式,一般是由一个API函数调用它的指针,当那个函数调用的时候,由WINDOWS来调用CALLBACK函数,从而执行你的代码,这就是所谓回调。  3、表示WINDOWS调用的位于用户进程空间中的函数,因此其调用约定必须与WINDOWS   API调用约定 一致,即为WINAPI 。 4、从概念上讲,回调函数与普通函数的本质区别在于:调用者的不同。普通函数由程序员代码调用,而回调函数由操作系统在适当的时间调用。 5、可以这样认为:callback函数是操作系统提供给用户的一个接口,此时用户可以编写一些由系统调用的函数(API)。 null* CALLBACK是一种调用约定 LRESULT 是返回类型:       A   32- bit value   returned   from   a   window   procedure   or   callback   function.   CALLBACK   是一种调用约定,用不同的语言写的函数调用约定是保障参数(从右到左)压栈、出栈以及何时清理栈的一种有效方法 。 CALLBACK   在MFC中是这么定义的:     #define   CALLBACK         __stdcall   还有类似的:#define WINAPIV __cdecl   null*窗口函数的一般形式如下: LRESULT CALLBACK WndProc( HWND hwnd, UINT messgae, WPARAM wParam,LPARAM lParam ) { … switch(message) ∥ message为标识的消息 { case … … break; … case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); } return(0); } 在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数: void PostQuitMessage(int nExitCode) //nExitCode为应用程序的退出代码为未定义处理过程的消息提供缺省处理结束程序如此复杂? *结束程序如此复杂? 因为操作系统与应用程序职责不同,二者是互相合作的关系,所以必须各做各的份内事,并互以消息通知对方.如果不依据这个游戏规则,可能会产生麻烦. null*3.数据类型 在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型null*4. 一些重要的数据结构MSG:包含一个消息的全部信息,是消息发送的格式WNDCLASS:包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标RECT:定义了一个矩形区域及其左上角和右下角的坐标几种重要的结构null*五、应用程序举例【例2-1】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程#include //包含应用程序中所需的数据类型和数据结构的定义 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //窗口函数说明 //--------------- 以下初始化窗口类 ---------------------- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) { HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName[] = "窗口"; //窗口类名 char lpszTitle[]= "My_Windows"; //窗口标题名null* //窗口类的定义 wndclass.style=0; //窗口类型为缺省类型 wndclass.lpfnWndProc=WndProc; //定义窗口处理函数 wndclass.cbClsExtra=0; //窗口类无扩展 wndclass.cbWndExtra=0; //窗口实例无扩展 wndclass.hInstance=hInstance; //当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ; //窗口采用箭头光标 wndclass.hbrBackground=GetStockObject(WHITE_BRUSH); //窗口背景为白色 wndclass.lpszMenuName=NULL; //窗口中无菜单 wndclass.lpszClassName=lpszClassName ; //窗口类名为"窗口"null* //--------------- 以下进行窗口类的注册 ------- if(!RegisterClass( &wndclass))//如果注册失败则发出警告 { MessageBeep(0) ; return FALSE ; }//---------------- 创建窗口 ------------------- hwnd=CreateWindow ( lpszClassName, //窗口类名 lpszTitle, //窗口实例的标题名 WS_OVERLAPPEDWINDOW, //窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,, //窗口的高和宽为缺省值 NULL, //此窗口无父窗口 NULL, //此窗口无主菜单 hInstance, //创建此窗口的应用程序的当前句柄 NULL //不使用该值 );null*//--------------- 显示窗口 ---------------------- ShowWindow( hwnd, nCmdShow) ;//-------------- 绘制用户区 --------------------- UpdateWindow(hwnd);//----------------- 消 息 循 环 ---------------------- while( GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage( &Msg) ; DispatchMessage( &Msg) ; } return Msg.wParam; //消息循环结束即程序终止时将信息返回系统 }null* 扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备无关的键的标识 键盘在应用程序中的应用null* 虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码已经在Windows.h中定义,为何还要加updatewindow() ?*为何还要加updatewindow() ?1、因为窗口刚创建后,整个处于无效状态。调用UpdateWindow()立即发送WM_PAINT,把无效窗口变为有效。这样是有好处的!起码下次计算窗口无效区域时有用,而不是把整个窗口都当作无效。 2、在回调函数响应WM_PAINT时做了一些绘图操作。可能不调用UpdateWindow()发送WM_PAINT,也显示了想要的图形(当窗口刚创建的时候为无效状态,那么系统会发一个WM_PAINT消息)。但这样做,可能WM_PAINT存放消息队列中,即不被窗口过程立刻调用。这时窗口为空白窗口,上面来不及出现我们绘制的图像!而UpdateWindow()直接把WM_PAINT发给窗口过程,这样UpdateWindow()以后,窗口就保证了我们初始化完全时想要的样子。null*/窗口函数 LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch(message) { case WM_DESTROY: PostQuitMessage(0); default: //缺省时采用系统消息缺省处理函数 return DefWindowProc(hwnd,message,wParam,lParam); } return(0); }调用PostQuitMessage 发出WM_QUIT消息为什么TextOut出现文字闪烁?*为什么TextOut出现文字闪烁?练习 *练习 1、熟悉windows的编程结构 2、熟悉部分关键语句: 如:wndclass.lpfnWndproc=WndProc; 3、对如下语句进行修改 Wndclass.style=0 如改成为:    WS_HSCROLL 或WS_VSCROLL 或WS_HSCROLL|WS_VSCROLL 4、删除WndProc中的default 语句,看输入其他的消息程序有什么反应? 5、如果把删除ShowWinow删除,直接运行UpdateWindow,将会出现什么结果? 6、如果没有以下语句将有什么结果?  TranslateMessage(&Msg);DispatchMessage(&Msg);null* 上机注意事项: 1、VC拼写区分大小写,标点一定用半角; 2、未包含类的头文件: 如:error c2065: ‘CLineWidthDlg’:undeclared idetifier 错误原因:没有包含定义CLineWidthDlg类的头文件. 3、未包含stdafx.h文件: 如:fatal error c1010:unexpected end of file while looking for precompiled header directive 错误原因:没有包含工程中的stdafx.h头文件。 错误说明:当使用VC++构造应用程序框架时,往往会自动生成预编译头文件stdafx.h,在这里包含了应用程序所需要的多个系统头文件。因此每个工程中的cpp源文件都必须包含有这个文件。 null*4、LNK2001错误: 错误示例:error LNK2001:unresolved symbol “void _cdecl f(void)”(?@@YAXXZ) 错误原因:在当前工程中不能找到函数f的定义。 说明:LNK2001是典型的链接错误,发生这个错误的原因非常多,最常见的是使用了一个外部变量或在别的模块里定义的函数。 对外部变量而言,解决办法是在外部变量声明前加上关键字external,例如: external int a; 而对于函数来说,必须将包含该函数定义的源文件或包含该函数定义的模块加入到工程中。 5、检测程序中的括号是否匹配。null*6、如何添加系统中的头文件(.h)到当前工程: 使用#include方式包含头文件,编译时VC++将在系统目录中寻找; 使用#include”FileName.h”方式,则在当前目录中寻找; 7、如何设定头文件的搜索顺序: 使用菜单命令Tools->Options,在弹出的选项中选择Directories选项卡,然后在Show directories for 列表中选择Include files,此时在 Directories列表中就列出了VC++搜索头文件的目录顺序。用户在列表中添加新的搜索目录,也可以使用对话框中的按钮来调整搜索目录的先后顺序。参考书目*参考书目1、侯俊杰,《深入浅出MFC》,华中科技大学出版社(80.00)。 2、潘爱民,《Visual C++技术内幕》,清华大学出版社(96.00)。 3、(美)Jeffrey Richter,王建华等绎《windows核心编程》,机械工业出版社(86.00元) 。
本文档为【02_vc_api( (VC++教程))】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_165658
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:计算机考试
上传时间:2013-01-31
浏览量:22