
C++
SurfingAnt
蚁群中向上爬的一员
展开
-
C++钩子(Hook)实现初探
转自oschina作者:小编辑 C++钩子(Hook)实现初探 所谓钩子可以百度下里面有很多解释,我可以不必在这里啰嗦了。研究了下,个人理解就是用来截获 WINDOWS消息的API,基于消息机制的WINDOWS程序所产生的消息可以用钩子来截获。钩子把截获的消息做什么呢?这个要看程序员的心情了,可以 把消息继续向下传递,也可以修改掉甚至不传递。在截获的过程中也可以把消息记录下来,实现转载 2013-10-16 13:47:07 · 952 阅读 · 1 评论 -
Socket的正确关闭
转自:csdn作者:hunkcaiTIME_WAIT状态 如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源。 所以,必须等客户端先关闭Socket后,服务器端再关闭Socket才能避免TIME_WAIT状态的出现。 判断客户端Socket的关闭 最近试验发现,当客户端Socket关闭时,服务端的Socket会转载 2013-11-28 08:33:54 · 1061 阅读 · 0 评论 -
对话框的建立(模态与非模态)
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。 一、模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。 点击模态对话框中的OK按钮,模态对话框会被销毁。转载 2013-11-28 08:25:00 · 452 阅读 · 0 评论 -
VC++之使用CFile类操作文件
VC++之使用CFile类打开文件转自:百度空间作者:幽谷小舍一、CFile类 1.1、CFile类,一个提供二进制文件操作接口的类,是MFC文件操作类之基础。 1.2、用CFile类打开文件 1.2.1、定义CFile对象,后调用open()函数打开文件CFile m_file;转载 2013-11-28 09:28:02 · 1187 阅读 · 0 评论 -
多线程同步、异步
转自:csdn作者:_Proxy1、首先明确一点,对于单核CPU,任意一个时刻只有一个线程在运行。那么既然这样,多线程还有什么意义呢? 举例来说,现在只有一个人,要做好几个任务。单线程就是,任务一个一个地做,必须做完一个任务后,再去做另一个任务。多线程就是一会做这个任务,一会做那个任务,每个任务做一会,不停的切换。显然,最后把所有的任务做完,多线程必定比单线程更耗费时间。为什么?因为,多线转载 2013-12-11 19:46:13 · 392 阅读 · 0 评论 -
多线程同步之事件对象(Event Object)
事件对象属于内核对象,多用于多线程间的同步。我觉得用红绿灯能比较形象地描述事件对象运作的机理:将行人和机动车辆比作两个线程,道路即为共享资源,若行人和机动车辆同时过马路则存在较大安全隐患,所以建立红灯与绿灯两个事件。灯亮为有信号状态,其对应的线程可以继续活动;灯灭则为无信号状态,其对应的线程需要等到灯亮才能运行。事件对象原型如下:HANDLE CreateEvent( LPSE原创 2013-12-11 20:33:39 · 449 阅读 · 0 评论 -
多线程同步之关键代码段(临界区)
关键代码段(临界区)工作在用户方式下。关键代码段(临界区)是指一个小代码段,在代码能够执行前,它必须独占对某些资源的访问权。通常把多线程中访问同一种资源的那部分代码当做关键代码段。临界区好比公用电话亭,若想要使用电话亭,得先判断里面是否有人,若有人,则等待至里面的人离开。临界区相关函数:void InitializeCriticalSection(LPCRITICAL_SECTIO原创 2013-12-11 21:42:00 · 804 阅读 · 0 评论 -
vc中调用WM_PAINT消息
转自:新浪博客作者:风铃1. WM_PAINT消息根本就不用SendMessage来实现,当窗口出现无效区时,系统会自己发送这个消息,而用Invalidate()或者InvalidateRect就会产生无效区而发送WM_PAINT void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,转载 2013-12-05 09:42:52 · 1047 阅读 · 0 评论 -
VC++中StretchBlt图像失真问题的解决办法
在 VC 中使用 StretchBlt 会碰到一些与点阵图大小缩放相关的一些问题。在扩展一个点阵图时,StretchBlt必须复制图素行或列。如果放大倍数不是原图的整数倍,那么此操作会造成产生的图像有些失真。 如果目的矩形比来源矩形小,那么StretchBlt在缩小图像时就必须把两行(或列)或者多 行(或列)的图素合并到一行(或列)。完成此操作有四种方法,它根据装置内容伸展模式属性来转载 2013-12-13 10:20:26 · 853 阅读 · 0 评论 -
keybd_event,mouse_event的使用及虚拟键值表
转自:csdn作者:dijkstar模拟鼠标产生鼠标事件、键盘事件有时候非常有用,比如在自动化测试中。源程序在:http://download.youkuaiyun.com/detail/dijkstar/4035890关键程序:比如一个应用:自动关闭弹出的Messagox对话框(http://blog.youkuaiyun.com/dijkstar/article/details/8761481)(20转载 2013-12-19 08:44:58 · 1042 阅读 · 0 评论 -
VC线程中通过自定义消息打开新的对话框(模态与非模态)
在线程中直接打开已添加的对话框或者通过调用函数的方式打开对话框,虽然编译无错误提示,但运行后有错误提示。这里列出通过消息机制打开对话框的方法。假设有Test1Dlg与Test2Dlg两个对话框,其中Test1Dlg为主对话框,Test2Dlg为添加的对话框。将原创 2013-12-26 07:49:15 · 879 阅读 · 0 评论 -
无连接Socket中服务端对客户端的记录
在无连接Socket中,客户端每隔一段时间(计时器中设定的)向服务器发送一次连接,如果服务端要建立一个信息表记录客户端的IP并给客户端编号,那么服务端接收到客户端发来的连接后,有以下两种情形需要处理:①该客户端是第一个连接的客户端;②该客户端是第一个之后连接的客户端;③该客户端是已经连接过的客户端对于①,服务端需要建立一个文件,并在信息表中给客户端编号并添加信息;对于②,服原创 2013-11-13 18:58:26 · 487 阅读 · 0 评论 -
CString的一些应用
CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。CString位于头文件afx.h中。CString对应的对象时字符串,所以一些用于字符串的操作也可以使用于CString如:#include#includevoid main(){ CString s="abc"; CString b="abc原创 2013-11-13 16:41:18 · 444 阅读 · 0 评论 -
整型与字符串的转换
一般来说,函数对于其内参数的格式有着严格的定义,比如该参数只能是int型或者char型等。如MFC列表控件:int InsertItem( int nItem, LPCTSTR lpszItem ); (nItem是控件中行的索引,限制为int型 、lpszItem是控件头的名字)有些时候,我们希望在格式定义为字符串的参数中添加整型变量,而不需要进行复杂的操作。比如给Ipszltem赋值原创 2013-11-13 09:40:50 · 555 阅读 · 0 评论 -
如何利用C语言写文件传输的程序
转自csdn作者:sophisticated如何利用C语言写文件传输的程序在网上搜了很久,也没有找到很具体和实用的发送文件的C源程序,于是就自己研究了半天,编写了个可以无差错传文件的程序,拿出来晒晒,以下中括号里的就是调用的函数,具体源文件我放到资源里了,大家可以去下载http://download.youkuaiyun.com/user/sophisticated。 服务器端(发送文件转载 2013-10-23 23:16:45 · 2134 阅读 · 0 评论 -
MFC用户界面设计
转自:新浪博客作者:cornflower MFC用户界面设计 一(创建一个MFC工程的框架)打开VC++6.0选择New,出现如下界面:然后选中MFC AppWizard[exe] ,即我们将创建一个MFC的可执行文件,然后在Project Name下面的框中写入这个工程的名字,注意:工程的名字不要是中文的,且不要太过于长(到底多长是长我也不知道),最好使用英语的单词来转载 2013-10-23 22:38:46 · 793 阅读 · 0 评论 -
两种创建监听套接字的方法
两种创建监听套接字的方法假设在本机(localhost)的5555端口创建监听套接字(listening socket)第一种方法来自《UNIX环境高级编程》第2版structaddrinfo *ailist,*aip;struct addrinfo hint;int listenfd;hint.ai_flags =AI_CANO转载 2013-10-30 23:46:12 · 1332 阅读 · 0 评论 -
流方式以及数据包方式的对比
流方式以及数据包方式的对比在Windows系统中利用Socket进行网络通信有两种主要方式:流方式(Stream Socket),也称为面向连接方式:用于实现TCP协议。其特点是通信可靠,对数据有校验和重发机制,通常用来作数据文件的传输,如FTP;数据报方式(Datagram Socket),又称为无连接方式:这种通信方式对应的是UDP协议。由于取消了重发校验机制,能够达到较高原创 2013-10-31 00:51:30 · 1189 阅读 · 0 评论 -
VC++ 列表控件的使用方法
VC++ 列表控件的使用方法 列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以转载 2013-10-30 23:57:53 · 563 阅读 · 0 评论 -
变量与对话框的交互:UpdateData(FALSE)&&UpdateDate(TRUE)
UpdateData(TRUE)和UpdateData(FALSE)的区别 当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该在修改变量后调用UpdateData(FALSE);如果你希望知道用户在对话框中到底输入了什么,就应该在访问变量前调用UpdateData(TRUE)。UpdateData(原创 2013-11-07 01:42:33 · 626 阅读 · 0 评论 -
GetWindowRect与GetClientRect
先调用GetWindowRect后再调用ScreenToClient,这个时候得到的rect和直接使用GetClientRect得到的值是相等的。有时候需要获得窗口矩形的大小和客户区矩形的大小二者的值,故需要分别调用GetWindowRect和GetClientRect。如果只需要获得客户区矩形的大小,调用GetClientRect就行了。GetWindowRect和GetClientRect函数转载 2013-11-21 09:38:17 · 958 阅读 · 0 评论 -
CreateThread()函数的使用及参数的传递
CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:1.在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回2.把线程退出码置为STILL_ACTIVE,把线程挂起计数置13.分配context结构4.分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD5.lpStartAddr和lp原创 2013-11-21 09:17:51 · 2010 阅读 · 0 评论 -
VC++中的CDC类
转自:新浪博客作者:雪后DE阳光 VC++中的CDC类(VC++学习笔记) 在学习VC++中,CDC类是在显示数据,或者使用图形,或者使用文本中必不可少的。Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。MFC基础类库定义了设备环境对象类----CDC类。 CDC与CGdiObject的关系 说道CDC类就不能转载 2013-11-21 09:25:41 · 1442 阅读 · 0 评论 -
CWnd与HWND的区别与转换
CWnd与HWND的区别与转换 转自:网易博客作者:甩都不甩的窝一、区别HWND是句柄,CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd.HWND是Windows系统中对所有窗口的一种标识,即窗口句柄。这是一个SDK概念。 CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中,如:ShowWindow等等转载 2013-11-07 01:52:34 · 513 阅读 · 0 评论 -
VC线程中通过自定义消息引用对话框控件
在线程中直接调用控件会提示错误,可以通过传递消息的方式间接地调用控件。假设有个对话框:TestDlg ,通过线程调用其编辑框控件(ID:IDC_EDIT_RECV)线程:DWORD WINAPI TestProc(LPVOID lpParameter){ char tempBuf[20]; int n=0; while (TRUE) { n++;原创 2013-12-25 23:06:14 · 865 阅读 · 0 评论