随笔分类 -  vc实用系列

建立消息映射和消息处理
摘要:也许我们需要添加一些ClassWizard不支持的窗口消息或自定义消息,那么就需要我们亲自动手建立消息映射和消息处理的框架,通常步骤如下:第一步:定义消息。Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。#define WM_MYMESSAGE (WM_USER + 100)第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam){// TODO: 处理用户自定义消息,填空就是要填到这 阅读全文

posted @ 2013-12-01 14:11 Lingc· 阅读(160) 评论(0) 推荐(0)

句柄数不停增加
摘要:原来的程序:CSocketsock//开始循环开始//不出意外应该能够执行1500次左右然后挂掉sock.create(....//中间我好象还不止一次这么操作的循环结束sock.close()//这里结束现在的程序:循环开始//开始CSocketsocksock.create(....sock.close//在一切可能退出的地方都close一下循环结束//结束到底是什么原因使一个进程的句柄数不断增加,为什么句柄数增加到一定数目就会当呢?句柄有很多种(HDC,HPEN,HANDLE,HINSTANCE.....)它代表windows中的一种资源,比如你在重绘中用了HDC而使用完忘记释放它那么就 阅读全文

posted @ 2013-11-22 15:20 Lingc· 阅读(9004) 评论(1) 推荐(1)

GetAdaptersInfo获取网卡配置和Ip地址信息
摘要:一台机器上可能不只有一个网卡,但每一个网卡只有一个MAC地址,而每一个网卡可能配置有多个IP地址;如平常的笔记本电脑中,就会有无线网卡和有线网卡(网线接口)两种;因此,如果要获得本机所有网卡的IP和MAC地址信息,则必须顺序获得每个网卡,再依次获取其信息等;在windows sdk中,用IP_ADAPTER_INFO结构体存储网卡信息,包括网卡名、网卡描述、网卡MAC地址、网卡IP等,该结构体的主要描述如下所示:typedef struct _IP_ADAPTER_INFO { struct _IP_ADAPTER_INFO* Next;//指向链表中下一个适配器信息的指针 DWORD C.. 阅读全文

posted @ 2013-10-28 13:25 Lingc· 阅读(819) 评论(0) 推荐(0)

mfc afxbeginthread()
摘要:在进行多线程程序设计的时候,我们经常用到AfxBeginThread函数来启动一条线程该函数使用起来非常的简单方便,其定义如下CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc,//线程函数地址 LPVOID pParam,//线程参数 int nPriority = THREAD_PRIORITY_NORMAL,//线程优先级 UINT nStackSize = 0,//线程堆栈大小,默认为1M DWORD dwCreateFlags = 0,// LPSECURITY_ATTRIBUTES lpSecurityAttrs = N 阅读全文

posted @ 2013-10-21 19:23 Lingc· 阅读(721) 评论(0) 推荐(0)

vc ini配置文件读写
摘要:ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。一、向ini文件中写入信息的函数1. 把信息写入系统的win.ini文件BOOL WriteProfileString( LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串 LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字... 阅读全文

posted @ 2013-10-21 17:31 Lingc· 阅读(507) 评论(0) 推荐(0)

SetTimer()函数使用
摘要:在编程时,会经常使用到定时器。使用定时器的方法比较简单,通常告诉Windows一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。1.1用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型UINT_PTR SetTimer( HWND hWnd, // 窗口句柄 UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 UINT uElapse, // 时间间隔,单位为毫秒 TIMER... 阅读全文

posted @ 2013-10-21 17:15 Lingc· 阅读(38513) 评论(0) 推荐(1)

SendMessage 和 PostMessage
摘要:1、首先是返回值意义的区别,我们先看一下MSDN里的声明:LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 其中4个参数的意义是一样的,返回值类型不同(其实从数据上看他们一样是一个32位的数,只是意义不一样),LRESULT表示的是消息被处理后的返回值... 阅读全文

posted @ 2013-10-21 10:36 Lingc· 阅读(317) 评论(0) 推荐(0)

线程同步CriticalSection
摘要:孙鑫 第十五/十六课之四 线程同步CriticalSection说明在使用多线程时,一般很少有多个线程完全独立的工作。往往是多个线程同时操作一个全局变量来获取程序的运行结果。多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果是写操作,则会发生错误。这时候,我们可以通过临界区,为全局变量设置一个保护,保证同时只有一个线程可以访问此变量,其他变量进入等待状态。临界区(Critical Section)是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一 阅读全文

posted @ 2013-10-21 10:20 Lingc· 阅读(299) 评论(0) 推荐(0)

转 select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
摘要:select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout);所在的头文件为:#include 和#include 先对函数中的参数做一个简单的介绍。参数maxfd是需要监视的最大的文件描述符值+1;rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集 合及异常文件描述符的集合。struct timeval结. 阅读全文

posted @ 2013-10-14 17:54 Lingc· 阅读(313) 评论(0) 推荐(0)

导航

不知道不知道 知道不知道 知道知道 不知道知道。
天道酬勤,同志们共同努力!