随笔分类 - C++
MFC消息映射机制在Linux C++编程环境下的应用(转)
摘要:#ifndefMSG_CONSTANT_H#defineMSG_CONSTANT_H#defineMAX_MSG_PARA_SIZE 2048/*消息参数大小*/#defineMAX_QUEUE_LENGTH3000/*队列限制长度*/#defineEVENTMSG_QUIT 100/*退出*/#defineRW_SUCCESS 0#defineEMPTY_QUE 1#defineRW_ERROR_QUE -1#defineFULL_QUE -2#defineLOCK_ERROR -3#defineUNLOCK_ERROR -4#defineREALESE_LOCK_...
阅读全文
异步消息的传递-回调机制(转)
摘要:1 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件
阅读全文
C++回调机制实现(转)
摘要:对于博客,从来是默默的转,最近终于有点时间可以写些自己的东西(其实也还要忙着准备找工呢),写出来与仅仅知道那么回事绝对大不一样,写也是学习的过程,不过向来多关注于功能实现,对一些基础概念把握不准确,望各位拍砖,不废话了。 什么是回调?通常发生在需要两个角色即调用者与实现者的情形上,即我们希望当产生某个事件时,调用实现者定义的某个函数。当然这个概念很大,不是说操作系统的信号量,条件变量什么的,是在语言级别实现,如一个Framework提供商,规定了整个程序的框架,可能产生某事件时它希望调用某个行为,而这个行为的具体定义是由framework客户来完成。 我们从简单的做起,通过一个个为什么最终来获
阅读全文
C++中的单例模式(转)
摘要:单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。 使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——也就是说除了一个全局实例外,仍然能创建相同类的本地实例。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,
阅读全文
PreTranslateMessage作用和使用方法
摘要:PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.MFC 消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,可以改变MFC的消息控制流程,甚至可 以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,采用SendMessage()或其他类似的方 式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在
阅读全文
实战DeviceIoControl 之一:通过API访问设备驱动程序
摘要:Q在NT/2000/XP中,我想用VC编写应用程序访问硬件设备,如获取磁盘参数、读写绝对扇区数据、测试光驱实际速度等,该从哪里入手呢?A在NT/2000/XP中,应用程序可以通过API函数DeviceIoControl来实现对设备的访问—获取信息,发送命令,交换数据等。利用该接口函数向指定的设备驱动发送正确的控制码及数据,然后分析它的响应,就可以达到我们的目的。DeviceIoControl的函数原型为BOOL DeviceIoControl( HANDLE hDevice, // 设备句柄 DWORD dwIoControlCode, // ...
阅读全文
预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
摘要:当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal error C1853: 'pjtname.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)(致命错误C1853: “filename.pc
阅读全文
STL的string和wstring
摘要:STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就把所有类型转换一遍吧?有没有好办法?答案当然是肯定的,先看看MS的TCHAR是怎么做的,以下摘自MS Platform 的tchar.h,略有删减#ifdef _UNICODE#ifdef __cplusplus} /* ... extern "C" */#endif/* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */#
阅读全文
C++ 通过WIN32 API 获取逻辑磁盘详细信息
摘要:众所周知,在微软的操作系统下编写应用程序,最主要的还是通过windows所提供的api函数来实现各种操作的,这些函数通常是可以直接使用的,只要包含windows.h这个头文件,下载源文件今天我们主要介绍的是几个常用的api函数,通过它我们可以获取用户磁盘的相关信息。其主要函数原型说明如下:1.获取系统中逻辑驱动器的数量TheGetLogicalDrivesfunction retrieves a bitmask representing the currently available disk drives.DWORD GetLogicalDrives(void);2.获取所有驱动器字符串信息
阅读全文
CString, BSTR, LPCTSTR之间得关系和区别
摘要:CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR;typedef const char * LPCTSTR;vc++中各种字符串的表示法首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。LP的含义是长指针(long pointer)。LPSTR是一个指向以‘\0’结尾的
阅读全文
C++读取INI文件
摘要:Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读、写:GetPrivateProfileInt() 从私有初始化文件获取整型数值GetPrivateProfileString() 从私有初始化文件获取字符串型值GetProfileInt 从win.ini 获取整数值GetProfileString 从win.ini 获取字符串值WritePrivateProfileString 写字符串到私有初始化文件WriteProfileString 写字符串到win.ini我们可以把视图类的:OnInitialUpdate() 函数作为程序启动时读取配置文件的入口,配置文件的存储
阅读全文
C++中的单例模式
摘要:单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。使用全局对象能够保证方便地访问实例,但是不能保证只声明一个对象——也就是说除了一个全局实例外,仍然能创建相同类的本地实例。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使
阅读全文
VC中字符串由于版本不同而导致的错误问题
摘要:vs2005、vs2008、vs2010默认是Unicode的,在VC 6.0中编译成功的项目在VS2005中常会出现类型错误。经常出现的错误是:不能从const char *转换为LPCWSTR如使用MessageBox(hwnd,"right mouse clicked",NULL,0)就会报错,如果使用强制转换(LPCWSTR)"right mouse clicked",虽然能够通过,但是编码会出错。可行的办法是使用 TEXT("right mouse clicked")转换,MessageBox(hwnd,TEXT("
阅读全文
【转】SerialPort收数据时出现的BUGcomstat is being used without defining
摘要:Run-Time Check Failure #3 - The variable 'comstat' is being used without being initialized.CSerialPort类在Visual C++ .NET 应用时会出现意想不到的问题。以《Visual C++/Turobo C串口通信编程实践》(龚建伟 熊光明 著)一书中第二章的SerialPortTest程序为例,当在Visual C++ .NET下编写后之后,debug之后,会出现编译错误:“operator+="不明确,MSDN解释“为重载运算符定义了多个可能的运算符。可能的解决
阅读全文
Visual C++位图操作(转)
摘要:一.BitBlt将一幅位图从一个设备场景复制到另一个,即复制像素,前面参数为目标,后者为源case WM_PAINT: hdcClient = BeginPaint (hwnd, &ps) ; hdcWindow = GetWindowDC (hwnd) ; for (y = 0 ; y < cyClient ; y += cySource) for (x = 0 ; x < cxClient ; x += cxSource) { ...
阅读全文
MySQL数据库接口的VC实现与应用
摘要:摘要:MySQL数据库作为一种网络数据库性能十分出色,但其在应用软件中使用较少。本文将主要探讨MySQL提供的两种数据库接口 ——(ODBC API和C API)在VC中的应用,并且形成一个类用以封装C API数据库接口的功能。关键词:MySQL;数据库接口;ODBC API;C API下载本文配套源代码引言随着现代计算机软硬件及网络技术的发展,在网上查找资料已成为现在获取信息的最重要手段之一。众所周知,所有的网上信息都是储存在网站数据库中的,这些信息的查询、更新等操作的功能则是由数据库服务器提供的,显然,数据库服务器的性能将直接关系到网站的生存。网站搭建中用的最多的数据库服务器是oracle
阅读全文
source insight 调用标准C函数时提示方法
摘要:输入自定义函数时会代码提示输入标准C函数时没有提示解决方法Options->Prefernces->Create Common Projects->Standrd C/C++ and Windows Headers "...VC98/include"创建一个包含头文件的工程如CStandard_WIN32.PR然后在Options->Prefernces->Project symol path中Add Project to Path将CStandard_WIN32.PR添加进来对于Linux程序只需拷贝linux中的头文件,然后创建一个工程包含
阅读全文
读取纯真IP数据库C++源代码
摘要:头文件#pragma once;#include <string>const int INDEX_LENGTH = 7; // 一个索引包含4字节的起始IP和3字节的IP记录偏移,共7字节const int IP_LENGTH = 4;const int OFFSET_LENGTH = 3;enum { REDIRECT_MODE_1 = 0x01, // 重定向模式1 偏移量后无地区名 REDIRECT_MODE_2 = 0x02, // 重定向模式2 偏移量后有地区名};class CIpFinder{public: CIpFinder(); CIpF...
阅读全文
va_start、va_end、va_list的使用
摘要:1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);voidfoo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#include<iostream>void fun(int a, ...){int *temp =&a;temp++;for (int i = 0; i < a; ++i){cout << *temp<< endl;temp++;}}int main(){int a = 1;int b = 2;int c = 3;int d
阅读全文
AlphaBlend 使用方法
摘要:BLENDFUNCTION blend;memset( &blend, 0, sizeof( blend) );blend.BlendOp= AC_SRC_OVER;blend.SourceConstantAlpha= 140; // 透明度 最大255pdc->AlphaBlend( DestX,DestY, DestWid,DestHei,&srcDC, 0, 0, nDragWidth, nDragHeight, blend);
阅读全文
浙公网安备 33010602011771号