Visual C++
文章平均质量分 81
fairy_study
这个作者很懒,什么都没留下…
展开
-
深入浅出Win32多线程设计之MFC的多线程-线程与消息队列
3.线程与消息队列 在WIN32中,每一个线程都对应着一个消息队列。由于一个线程可以产生数个窗口,所以并不是每个窗口都对应着一个消息队列。下列几句话应该作为"定理"被记住: "定理" 一 所有产生给某个窗口的消息,都先由创建这个窗口的线程处理; "定理" 二 Windows屏幕上的每一个控件都是一个窗口,有对应的窗口函数。 消息的发送通常有两种方式,一是SendMe原创 2010-05-16 00:17:00 · 2198 阅读 · 1 评论 -
在VC程序中使用调试语句----(一)断言
为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的转载 2010-05-12 12:08:00 · 295 阅读 · 0 评论 -
在VC程序中使用调试语句----(二)跟踪语句
二、跟踪语句1、基本概念 跟踪语句(trace statements)可使程序执行,并使程序员可对可变值进行查看。它们提供了一个用于观察的程序,并且独立于一个交互式的调试器,但是最具有特色的是它们常用于对调试器提供的信息进行补充。在VC中,跟踪消息通常输出到输出窗口中的Debug标签,也可以重新输出到一个文件中。跟踪语句的特性如下:.跟踪语句用于报告代码中重要的运行事件。.跟踪语转载 2010-05-12 12:07:00 · 282 阅读 · 0 评论 -
异常处理(二、C语言的异常处理)
1 异常终止 标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于头文件中。这两个函数本身不能检测异常,但在C程序发生异常后经常使用这两个函数进行程序终止。下面的这个例子描述了exit()的行为:CODE: -------------------------------------------------------------------------转载 2010-05-12 11:56:00 · 253 阅读 · 0 评论 -
异常处理(四、MFC异常处理)
MFC中异常处理的语法和语义构建在标准C++异常处理语法和语义的基础之上,其解决方案为: MFC异常处理 = MFC 异常处理类 + 宏1 宏 MFC定义了TRY、CATCH(及AND_CATCH、END_CATCH)和THROW(及THROW_LAST)等用于异常处理的宏,其本质上也是标准C++的try、catch和throw的进一步强化,由这些宏的定义可知: CODE: --转载 2010-05-12 11:52:00 · 313 阅读 · 0 评论 -
VC++中使用MFC通过ADO连接数据库
VC++中使用MFC通过ADO连接数据库 一.让我们看看ADO数据库访问技术使用的基本步骤及方法: 1.首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用 #import引用它既可。可以直接在Stdafx.h原创 2010-05-11 10:35:00 · 4636 阅读 · 1 评论 -
C++中this指针的用法
this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 this->month = mn; (*this).month = mn; } 1. this只能在成员函数中使用。全局函数,静态函数都不能使用thi原创 2010-05-06 12:10:00 · 260 阅读 · 0 评论 -
__stdcall,__cdecl,__fastcall,thiscall,naked call,__pascal的作用与区别
被这些修饰关键字修饰的函数,其参数都是从右向左通过堆栈传递的。被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。 1、_stdcall是pascal程序的缺省调用方式,通常用于win32 api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。vc将函数编译后会在函数名前面加上下划线前缀,在函数名后加上/"@/"和参数的字节数。原创 2010-05-06 10:56:00 · 312 阅读 · 0 评论 -
函数模板和类模板
函数模板和类模板一、函数模板1.1、模板函数含有类型参数template T MyMin(T a,T b){ return a}void main(){ cout cout// cout cout(2,2.123) cout(2,2.123)}注1:这里的关键词class原创 2010-05-06 11:13:00 · 432 阅读 · 0 评论 -
异常处理(五、结构化异常处理)
结构化异常处理(Structured Exception Handling,简称SEH)是微软针对Windows程序异常处理进行的扩展,在Visual C++中,它同时支持C和C++语言。SEH不宜与标准C++异常处理和MFC异常处理混用,对于C++程序,微软建议使用标准C++的异常处理。 为了支持SEH,Visual C++中定义了四个关键字(由于这些关键字是非标准关键字,其它编译器不一定转载 2010-05-12 11:49:00 · 184 阅读 · 0 评论 -
异常处理(一、前言)
Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处理进行了扩展,提出了结构化异常处理(SEH)的概念,它支持C和C++(与之相比,MFC异常处理仅支持C++)。 一个典型的异常处理包含如下几个步骤: (1)程序执行时发生错误; (2转载 2010-05-12 11:57:00 · 183 阅读 · 0 评论 -
VC 线程间通信的三种方式
VC 线程间通信的三种方式 1.使用全局变量(窗体不适用) 实现线程间通信的方法有很多,常用的主要是通过全局变量、自定义消息和事件对象等来实现的。其中又以对全局变量的使用最为简洁。该方法将全局变量作为线程监视的对象,并通过在主线程对此变量值的改变而实现对子线程的控制。 由于这里的全局变量需要在使用它的线程之外对其值进行改变,这就需要通过volatile关键字对此变量进原创 2010-05-15 23:56:00 · 3734 阅读 · 0 评论 -
volatile的作用
volatile 修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。对于多线程引用的全局变量来说,volatile 是一个非常重要的修饰符.一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的原创 2010-05-14 21:21:00 · 374 阅读 · 0 评论 -
深入浅出Win32多线程设计之MFC的多线程
1、创建和终止线程 在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。 工作者线程CWinThread *AfxBeginThread( AFX_THREADPROC pfnThreadProc, //控制函数 LPVOID pParam, //传递给控制函数的参数原创 2010-05-16 00:25:00 · 354 阅读 · 0 评论 -
深入浅出Win32多线程设计之MFC的多线程-进程间通信
2.线程间通信 MFC中定义了继承自CSyncObject类的CCriticalSection 、CCEvent、CMutex、CSemaphore类封装和简化了WIN32 API所提供的临界区、事件、互斥和信号量。使用这些同步机制,必须包含"Afxmt.h"头文件。下图给出了类的继承关系: 作为CSyncObject类的继承类,我们仅仅使用基类CSyn原创 2010-05-16 00:23:00 · 712 阅读 · 0 评论 -
异常处理(三、C++语言异常处理)
1 C++异常处理语法 C++语言的后期改造者们,他们在标准C++语言中专门集成了异常处理的相关语法(与之不同的是,所有的C 标准库异常体系都需要运行库的支持,它不是语言内核支持的)。当然,异常处理被加到程序设计语言中,也是程序语言发展和逐步完善的必然结果。我们看到,C++不是唯一集成异常处理的语言。 C++的异常处理结构为: CODE: ----------------------转载 2010-05-12 11:54:00 · 189 阅读 · 0 评论 -
异常处理(六、各种异常处理的对比)
下表给出了从以上Visual C++所支持的四种异常处理进行的对比:异常处理 支持语言 是否标准 复杂度 推荐使用 C异常处理 C语言 准C 简单 推荐 C++异常处理 C++语言 标准C++转载 2010-05-12 11:46:00 · 315 阅读 · 0 评论 -
在VC程序中使用调试语句----(三)异常
三、异常1、基本概念 错误是一种条件,在这种条件下,如果不执行额外的处理,线程就不能正常地执行下去。异常是用于处理错误的。使用异常的一个很明显的好处就是它们通过发出错误信号,可以让程序代码和错误处理代码分开,而且不会让程序忽略错误,你不用不断地检查函数的返回值,因此它们将程序代码简单化。另一个好处是它们不需要严格的编程作风。异常的基本特性:.异常是基于每个进程而提出并处理的。转载 2010-05-12 12:06:00 · 255 阅读 · 0 评论 -
在VC程序中使用调试语句----(四)返回值
四、返回值 并不是在所以场合下都能使用异常,如在使用Windows API编程或带有COM编程时并不使用异常。在异常不适合的时候,使用返回值是一个好的办法。返回值的基本特性:.返回值可以指示正常和不正常的函数运行,但不能阻止线程的继续运行。.返回值很容易被忽略。.返回值在典型情况下是一个整数,通常映射符合于一个预定义的值。.返回值能高效地传递和接收。因此,返回值最适合转载 2010-05-12 12:05:00 · 181 阅读 · 0 评论 -
WaitForSingleObject的用法
WaitForSingleObject的用法DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); 参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件原创 2010-05-06 10:29:00 · 707 阅读 · 0 评论 -
如何在其他电脑上运行VS2005编译的DEBUG版应用程序
如何在其他电脑上运行VS2005编译的DEBUG版应用程序<br />做项目的过程中,遇到这样的问题:在自己的电脑上用VS2005编译好的DEBUG版程序在其它的没有安装VS2005的电脑上没有办法运行,郁闷至极啊。<br />直接拷贝文件后,错误信息如下:"This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix原创 2010-06-25 22:52:00 · 2295 阅读 · 0 评论 -
从char/wchar_t到TCHAR (一)
一.ANSI和UNICODE 1.为什么要使用Unicode? (1) 可以很容易地在不同语言之间进行数据交换。(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。 (3) 提高应用程序的运行效率。 Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成Unico转载 2010-04-30 10:44:00 · 377 阅读 · 0 评论 -
MFC框架下的指针的获得(二)
MFC框架下的指针的获得(2007-07-10 19:16:13) VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。下面文字主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。一般我们使用的框架是VC提供的Wizard生成的MFC App Wizard(e原创 2010-04-10 16:19:00 · 376 阅读 · 0 评论 -
MFC框架各部分指针获取方式
MFC框架各部分指针获取方式 摘自:http://www.cnblogs.com/duguguiyu/archive/2007/06/22/792511.html前人在CSDN总结的,曾经帮助过我,整理总结一下,希望也能帮助一下别人。 获得CWinApp原创 2010-04-10 14:46:00 · 218 阅读 · 0 评论 -
Windows编程中的映射模式和坐标转换
一、Windows中的映射模式1、Windows定义映射模式的目的经过我的综合,Windows定义映射模的目的又以下几个方面:1、不同人的使用习惯。不同国家的,不同地区,以及不同的人因为习惯喜欢用不同的度量单位,有的人人喜欢用英寸,而有的人喜欢用公制中的厘米,毫米等。其他的人又喜欢用另外一些单位。、2、使软件与硬件向分离开来。让开发的软件能够最大限度的与硬件无关。3、提供逻辑和物理的一种转换。就相原创 2010-04-20 17:38:00 · 289 阅读 · 0 评论 -
积累的VC编程小技巧之滚动条
文章标题:积累的VC编程小技巧之滚动条原 作 者:huzunbo原 出 处:VC在线http://www.vczx.com/article/show.php?id=18141.设置滚动条的滚动大小创建一个基于CScrollview的SDI Project(在第6步中选CScrollview) 若你已创建了,这步可以省略。 然后: 改为如 vo转载 2010-04-21 11:26:00 · 318 阅读 · 0 评论 -
开发平台由VC6.0升级至VS2005
开发平台由VC6.0升级至VS2005,需要将原有的项目迁移,特将碰到的问题归纳如下:1消息映射VS2005对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2005下编译不通过a. ON_MESSAGE(message,OnMyMessage); OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM,转载 2010-04-21 10:32:00 · 289 阅读 · 0 评论 -
VC6调试器的主要用法
windows平台的调试器主要分为两大类: 1 用户模式(user-mode)调试器:它们都基于win32 Debugging API,有使用方便的界面,主要用于调试用户模式下的应用程序。这类调试器包括Visual C++调试器、WinDBG、BoundChecker、Borland C++ Builder调试器、NTSD等。 2 内核模式(kernel-mode)调试器:内核调试器位于C原创 2010-04-13 16:42:00 · 358 阅读 · 0 评论 -
MFC调试工具——之BoundsChecker用法
MFC调试工具——之BoundsChecker用法2010-03-15 14:45BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。BoundsChecker能检测的错误包括:1、指针操作和内存、资源泄露错误,比如:内存泄露;资源泄露; 对指针变量的错误操作。2、内存操作方面的错误,比如: 内存读、写溢出;原创 2010-04-13 12:24:00 · 347 阅读 · 0 评论 -
使用VC6.0实现窗口的任意分割
本文章转载于http://blog.chinaunix.net/u1/59687/showart_493044.html一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢 ?在VC6.0中这就需要使用到CSplitterWnd类。CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被转载 2010-04-14 10:28:00 · 227 阅读 · 0 评论 -
深入分析MFC文档视图结构(项目实践一)
C++--深入分析MFC文档视图结构(项目实践) 1 必备基础知识概述 1.1 MFC 文档视图结构程序结构总揽 当我们使用 MFC AppWizard 生成一个 MFC 程序,选用所有默认的设置(当然也是 Multiple Documents ,本文讨论主要基于 Multiple Documents ,对于 Single Document 情况仅以简单表述提及,皆因后者和前者很多原创 2010-04-10 16:51:00 · 383 阅读 · 0 评论 -
限定程序只能以唯一进程运行在Windows中(只能有一个主程序窗口)
在程序的App::InitInstance()中添加信号量判断部分:// 用应用程序名创建信号量HANDLE hSem=CreateSemaphore(NULL,1,1,m_pszAppName);if (GetLastError() == ERROR_ALREADY_EXISTS){ // 信号量存在,则程序已有一个实例运行 // 关闭信号量句柄 CloseHandle(hSem);原创 2010-04-09 14:52:00 · 418 阅读 · 0 评论 -
从char/wchar_t到TCHAR (二)
五.MFC动态字符串类CString // …/Microsoft Visual Studio 8/VC/atlmfc/include/afx.h一个CString对象由可变长度的一队字符组成。CString使用类似于Basic的语法提供函数和操作符。连接和比较操作符以及简化的内存管理使CString对象比普通字符串数组容易使用。CString是基于TCHAR数据类型的对象。如果在你的转载 2010-04-30 09:59:00 · 696 阅读 · 0 评论 -
如何打开一个程序或创建一个进程
如何打开一个程序或创建一个进程 打开一个程序和创建一个进程基本上是同一个意思。我们的工具箱里面有几个函数备选:system, WinExec, ShellExecuteEx, CreateProcess,他们有以下几点不同:- 只有system是同步操作。- 只有ShellExecuteEx, CreateProcess支持Unicode。- 是否打开新的Console窗口: 只在父子都是转载 2010-04-29 12:29:00 · 1783 阅读 · 1 评论 -
删除MFC单文档默认菜单栏的两种方法
新建一个MFC单文档程序,默认都有四个菜单栏:文件、编辑、视图和帮助。怎么把这四个菜单栏删除掉呢?有两种方法: 第一种方法:重载框架类的Create函数,具体代码如下: view plaincopy to clipboardprint?BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowNam转载 2010-04-27 17:57:00 · 1267 阅读 · 0 评论 -
MFC中的GDI绘图(二)
二.MFC中GDI绘图 GDI绘图包括以下步骤:获取设备环境,设置坐标映射,创建绘图工具,调用DC绘图函数绘图。1、获取设备环境(1)在SDK编程中,获取设备环境的方法有两种:通过API函数BeginPaint。应用程序响应WM_PAINT消息进行图形刷新时主要通过BeginPaint函数获取设备环境,在消息处理函数返回前调用API函数EndPaint释放设备环境。函转载 2010-04-23 16:59:00 · 1075 阅读 · 0 评论 -
MFC中的GDI绘图(一)
一.关于GDI的基本概念什么是GDI Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。 /* Bitmap Header Definition */定义了BITMAP位图结构/* Mapping Modes */定义了DC中的坐标映射方式,包括以下常用函数:转载 2010-04-24 08:39:00 · 834 阅读 · 0 评论 -
MFC中的GDI绘图(四)
坐标映射实例(1)建立单文档MFC项目Draw:New—>Projects—>MFC AppWizard(EXE)—>Single Document。(2)找到CMainFrame::PreCreateWindow函数,在其中设置默认窗口大小为400 pixel*300 pixel。BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&原创 2010-04-23 16:48:00 · 600 阅读 · 0 评论 -
MFC中的GDI绘图(三)
2、设置坐标映射 (1)Windows坐标系统Windows坐标系分为逻辑坐标系和设备坐标系两种,GDI支持这两种坐标系。一般而言,GDI的文本和图形输出函数使用逻辑坐标,而在客户区移动或按下鼠标的鼠标位置是采用设备坐标。 逻辑坐标系是面向DC的坐标系,这种坐标不考虑具体的设备类型,在绘图时,Windows会根据当前设置的映射模式将逻辑坐标转换为设备坐标。设备原创 2010-04-23 16:53:00 · 2030 阅读 · 1 评论 -
非模态对话框的创建与删除
非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别 先看一下MSDN的原文: When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from w转载 2010-04-10 10:45:00 · 483 阅读 · 0 评论