
其他
e3160707
这个作者很懒,什么都没留下…
展开
-
回调函数
回调函数一般是作为其他函数的参数来使用的,实参通过函数名传进去,形参通过函数指针进行接收。为了方便在括号内定义函数指针的形参,就需要为函数指针类型声明一个大写的别名,这样就可以像定义int i,一样,以“类型 变量名”的方式来定义函数指针了。例如对于这样一个函数:INT32 peernvsserch_process(void * _pData,PeerLook * _pNvs);就可以这...原创 2019-05-22 16:28:04 · 282 阅读 · 0 评论 -
位段 位域
单片机使用的是小端(小尾)模式,电脑使用的是大端(大尾)模式,所以定义位段时不一样。电脑使用#pragma pack (1)typedef union _BYTE_BITS{BYTE byte;struct{ unsigned char bit0:1;//最低位 unsigned char bit1:1; unsigned char bit2:1; ...原创 2019-05-16 16:27:44 · 203 阅读 · 0 评论 -
保证应用程序只有一个实例运行
以下代码必须添加到应用程序App类的InitInstance函数里,放在创建主对话框之前,不能添加到Dlg类里边。// 创建互斥量HANDLE _hMutex = CreateMutex( NULL, TRUE, "车牌管理系统" );//不同应用使用不同的名字if ( _hMutex == NULL ){ return FALSE;}// 如果程序已经存在并且正在运行if (Ge...原创 2019-05-16 15:31:36 · 481 阅读 · 0 评论 -
结构体声明注意事项
针对单片机的上位机程序开发,经常会遇到结构体内部成员长短不一致的情况,有1字节的,有2字节的,还有4字节的。在VC编程时,如果不加处理,都会自动按照4字节进行对齐,导致赋值时出现错误。处理方法如下://头文件中#pragma pack (1)typedef struct //文件下载{ u8_t type; //子帧标识 u32_t size; /...原创 2019-05-16 14:31:10 · 1345 阅读 · 0 评论 -
新建线程
任何函数都可以新建自己的子线程,互相之间没有影响。新建线程是一个临时变量,所以句柄命名可以一样。 //新建一个线程 HANDLE hThread1 = CreateThread(NULL,0,SendProc,(LPVOID)this,0,NULL); CloseHandle(hThread1);第三个参数是线程函数的名字。第四个参数:向线程函数传递的参数,是一个可以指向...原创 2019-05-16 11:15:31 · 209 阅读 · 0 评论 -
右键弹出菜单——POPUP
1原创 2019-05-14 14:19:51 · 1072 阅读 · 0 评论 -
调试技巧
调试——>窗口——>内存快捷键:Alt+6原创 2019-05-14 09:32:55 · 171 阅读 · 0 评论 -
MessageBox()简易对话框的用法
MessageBox显示一个模态对话框,返回一个整数值,该值指示用户单击了哪个按钮。MessageBox( “内容字符串”, “标题字符串” );//直接显示提示信息,对返回值不感兴趣。标题字符串可以省略,使用父窗口的标题。if( IDYES == MessageBox( “内容字符串”, “标题字符串”, MB_YESNO ) ){}//带有yes no两个按钮。...原创 2019-05-14 09:19:19 · 1381 阅读 · 1 评论 -
字符串转数字方法
第一种:int bNo = atoi(s1);如果没有执行有效的转换,则返回零。第二种:char s1=“123,456 789”;int sscanf( s1, “%d,%d %d”, i1,i2,i3);返回成功赋值的字段个数。同时还有%x,%o,%u无符号整数。字符串转数字的方法中并没有针对CString对象的方法,所以,在需要获取字符串中数字的情况下,最好不要使用CStri...原创 2019-05-14 09:03:17 · 1030 阅读 · 0 评论 -
CString
CString字符串对象功能比较强大,而且全面。经常会用到CString对象和字符串数组之间的转换。网上介绍了很多使用指针进行转换的方法,都是针对同一块内存来操作的,而且很容易出错。我倾向于不使用指针,而使用复制的方法,即把CString对象的内容复制到字符串数组中,或者把字符串数组的内容复制到CString对象中。这样两个变量同时存在,想用那个用哪个,并且可以随时通过复制来保持一致。一、字符串...原创 2019-05-17 10:26:47 · 1977 阅读 · 0 评论 -
临界区
步骤:1、创建临界区对象全局变量CCriticalSection g_clsCriticalSection; //临界区对象2、临界区对象的使用/*临界区*/g_clsCriticalSection.Lock();//需要操作数据,申请临界区……/*临界区*/g_clsCriticalSection.Unlock();//数据操作完毕,释放临界区注意必须成对使用,否则会死锁。...原创 2019-05-17 11:15:03 · 129 阅读 · 0 评论 -
新建对话框
步骤:一、建立资源。在资源视图中新建对话框的样式,然后双击对话框出现类向导,填写类名,例如CTestDlg,注意:C大写,首字母大写,后边必须加上Dlg,说明是对话框类。点确定后,就会生成.cpp和.h文件。二、在需要显示对话框的父窗口程序中,加入以下代码://定义一个子对话框实例CMyDlg dlg;//子对话框初始化,可以指定对话框的显示内容等/*临界区*/g_clsCritica...原创 2019-05-20 10:39:06 · 446 阅读 · 0 评论 -
SDK的使用
厂家提供的SDK一般包括三种文件:.h头文件.lib库文件.dll动态连接库把这三种文件放在同一个文件夹sdk里边,把这个sdk文件夹和VC的源文件头文件放在一起。在对话框Cpp文件开始的地方添加以下两行:#include "sdk\clientsdk.h"#pragma comment(lib,"sdk\\libclientsdk.lib")#include "sdk\CH93...原创 2019-05-22 15:09:08 · 6959 阅读 · 0 评论 -
设备描述表——DC
设备描述表相当于在窗口上方覆盖的一层画布,并且包括了很多在画布上绘制东西的工具(画画,写字等)。他和窗口内容没有什么关系,因为窗口内容在下边的一层。操作设备描述表要用到CClientDC这个类,一般定义一个局部对象就行了。定义对象时,要指定窗口句柄,说明是覆盖在那个窗口上的画布。CClientDC dc(this);dc.TextOut( 300, 230, "正在努力加载,请耐心等待……"...原创 2019-05-22 11:40:54 · 289 阅读 · 0 评论 -
定时器
步骤:一、头文件里声明定时器消息编号#define WM_TIMER1 WM_USER+1#define WM_TIMER3 WM_USER+3WM_USER之前时系统使用的消息编号。二、类向导Class Wizard,消息里边找到WM_TIMER,添加处理程序。void CMyDlg::OnTimer(UINT_PTR nIDEvent){ // TODO: 在此添加消...原创 2019-05-22 11:13:34 · 149 阅读 · 0 评论 -
清空ARP缓存
//清空ARP缓存,这个函数创建新的进程后立即返回,而不管新的进程是否已经执行完成,所以在后边要加一个延时,保证arp缓存清除完毕。WinExec("arp -d",SW_HIDE);Sleep(1000);什么时候会用到清空ARP缓存呢?当一个旧的设备被换掉,一个新的设备使用了旧设备的IP地址,接入网络后,电脑的ARP缓存中存的还是这个IP地址对应的旧的设备的MAC地址,就会造成电脑无...原创 2019-05-22 10:15:17 · 8167 阅读 · 0 评论 -
获取电脑网卡信息
以下代码只适用于有一个网卡的情况,多个网卡时,应该禁用多余的网卡。ULONG outBufLen = 15000;//15k内存空间PIP_ADAPTER_ADDRESSES pAddresses;PIP_ADAPTER_ADDRESSES pAddresses1;//备份指针,释放内存时用pAddresses = (IP_ADAPTER_ADDRESSES *)malloc(outB...原创 2019-05-22 10:00:05 · 616 阅读 · 0 评论 -
静态成员
静态成员函数属于这个类,而不属于某个对象,所以调用时不能通过对象加点来调用,只能用类加连两个冒号来调用。例如:CTime t = CTime::GetCurrentTime();//获取当前时间...原创 2019-05-20 14:21:29 · 363 阅读 · 0 评论 -
动态改变对话框大小
首先,需要在改变大小的对话框中添加一条分隔条,分隔条是用图像控件制作的Picture Control,分隔条的位置就是对话框变小时所在的位置。修改分隔条ID为:IDC_SEPARATOR,选择Sunken属性,意思是下陷。然后在需要修改的地方加入以下代码:static CRect rectLarge;static CRect rectSmall;if( rectLarge.IsRectNu...原创 2019-05-20 11:14:28 · 810 阅读 · 0 评论 -
更换主对话框
更换打开程序的第一个对话框,需要在APP类中进行,在CmyApp.cpp文件中的InitInstance函数中,修改创建主对话框的类名即可。CMainDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse == IDOK){ // TODO: Place code here to handle ...原创 2019-05-20 10:45:22 · 187 阅读 · 0 评论 -
数字转字符串方法
1、 itoa(i ,num ,10 );i ---- 需要转换成字符串的数字num ---- 转换后保存字符串的变量10 ---- 转换数字的基数(即进制)。10就是说按10进制转换数字。还可以是2,8,16等等你喜欢的进制类型返回值:指向num这个字符串的指针欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mark...原创 2019-05-13 16:46:24 · 3745 阅读 · 0 评论