随笔分类 - VC/MFC
摘要:最近需要做网络传输的项目,需要实现较大文件的传输。在网上收集了不少资料,但是各有各的做法,尤其是关于文件自动接收这一块不太清楚。 经过图书馆查阅后还是找到了一种解决办法,虽然做的不太专业,但是思路比较精简、清晰,也希望能给大家尤其是刚学习socket套接字的人一些启示。 对于套接字socket我其实也不太懂,并且一般资料都可以查找到,所以不交易累赘了,直接说如何实现文件的传输吧。 对于发送文件,有三步:发送文件长度,发送文件名,发送文件内容。 关于发送文件内容,又可以根据文件大小进行直接传输和分块传输,如果是分块传输还需要多线程,否则会容易使程序失去响应...
阅读全文
摘要:首先在此向大家道歉,我在上一篇博文中转载了一篇关于数独的生成与破解算法的文章,其中作者的破解算法确实不错,也没有问题,但是其生产算法是有问题的。虽然初看起来每行每列都符合要求,但是是无解的。例如,我用其破解算法解由它生成算法生成的数独,结果没有解法出来。 最近在网上看到不少人发帖,生成数独的算法如下: 1 随机生成一个1-9的整数; 2:随机生成一个坐标位置 3:判断这个整数放在这个坐标位置处是否符合条件,也就是行,列,九宫格不重复 4:满足条件就赋值,否则转到步骤1 这种算法初看没有错,但是通常都是无解的。所以实际上生成一个有解的数独并不容易,许多人的...
阅读全文
摘要:void CGrayDlg::OnToEignt() { if(date==NULL) { MessageBox("图像内容为空"); return; } memcpy(&eightfile,&fileheader,sizeof(fileheader)); eightinfo=(BITMAPINFO *)newBYTE[sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)];//特别注意,重新分配调色板的BITMAPINF需要动态开辟内存空间,这样调色板才可以被赋值进去memcpy(eightinfo,&bitin
阅读全文
摘要:保存CBitmap为bmp图片2008-10-20 18:06void CMyStatic::SaveBmpFile(CString str,CBitmap& bitmap,CDC* pDC){//open & create bitmap fileCFile file;file.Open(str,CFile::modeCreate|CFile::modeWrite);//create bitmap objectsBITMAP bitm;bitmap.GetBitmap(&bitm);char* pBuffer;int ncharsize=bitm.bmHeight*bi
阅读全文
摘要:最近要写一个关于GSM模块的发送短信的程序,在网上找了半天的代码和资料都不太懂。有些需要什么dll文件的呀,有些需要专门数据结构的呀。 其中众所周知MSComm控件是操作串口的很好工具。 经过不少挫折,最终还是自己写了个非常简单的程序,代码很简单,非常容易理解,只有300行左右哦。下面我就仔细讲解一下。 详细的工程可以在这里下载http://download.csdn.net/detail/jin123wang/3659302第一:程序的界面第二:各个按钮对应的函数 首先需要打开串口并初始化,对应的按钮时“打开串口”/********************************...
阅读全文
摘要:保存抓图的简单实现实现类似的抓屏功能(简单的截图功能)其实只要两个函数就行了,以下从网上摘抄的一段代码的改写,算是原创吧(http://www.wenyiwen.cn/a24/how161448.htm):函数1: CopyScreenToBitmap //将屏幕指定区域存成图片HBITMAP CxxxDlg::CopyScreenToBitmap(LPRECT lpRect) //lpRect 代表选定区域{HDC hScrDC, hMemDC;// 屏幕和内存设备描述表HBITMAP hBitmap,hOldBitmap;// 位图句柄int nX, nY, nX2,nY2;// 选定区域
阅读全文
摘要:void CFindFileDlg::find(CString dir) { CFileFind ff; CString path; //MessageBox(dir); if(dir.Right(1)!="//") dir+="//"; dir+="*.*"; BOOL res=ff.FindFile(dir,0); while(res) { res=ff.FindNextFile(); path=ff.GetFilePath(); { if(path.Right(3)=="tmp"||path.Right(3)
阅读全文
摘要:加速键的使用第一步:创建加速键表在Resource试图中添加一个Accelerator资源表,在表中根据条件输入值。第二步:在类中添加一个HACCEL的变量 HACCEL m_hAccel;第三步:在初始化函数里面加载对应的加速键表m_hAccel= ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));其中IDR_ACCELERATOR1表示加速键表的ID,别弄错第四步:添加虚函数PreTranslateMessage BOOL CAAADlg::PreTranslateMessage(MSG
阅读全文
摘要:套接字I/O模型1:Select模型Select模型是一种常见的模型,通过select函数来确定套接字状态。在网络应用程序中,通过一个线程来设计一个循环,不停的调用select函数,判断套接字上是否存在数据或者是否能够向套接字写入数据等int select(int nfds,fd_set FAR *readfds, fd_set FAR *writefds,fd_set FAR * exceptfds, const struct timeval FAR * timeout) nfds:无实际意义 readfds表示一组可读套接字 writefds表示一组可写套接字 exceptfds表示一组.
阅读全文
摘要:套接字函数介绍 套接字函数通常封装在Ws2_32.dll动态连接库中,头文件是winsock2.h,因此用户需要引用头文件和链接库 #include “winsock.h” //引用头文件 #pragma comment(lib,”ws2_32.lib”) //链接库文件此外,使用套接库函数前需要初始化套接字,使用函数WSAStartup()实现例如: WSADATA wsd; //定义WSADATA对象 WSAStartup(MAKEWORD(2,2),&wsd); //初始化套接字下面介绍一些套接字函数1:WSAStartup函数:用于初始化动态连接库,而且不可或缺 int WSA
阅读全文
摘要:使用信标对象实现线程同步 信标对象也属于系统内核对象之一,它包含有计数,当使用计数为0时,信标对象处于无信号状态;当使用计数大于0时,信标计数处于有信号状态。 相关函数: CreateSemaphore:用于创建一个信标对象 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,LONG lInitialCount,LONG lMaxinumCount,LPCTSTR lpName); lpSemaphoreAttributes:表示安全属性,可以是NULL lInitialCount:初始计数 lMaxinumC
阅读全文
摘要:使用关键代码段实现线程同步关键代码段又称临界区,指的是一小段代码,在代码执行前,它需要独占某些资源。在程序中通常将多个线程同时访问某个资源的代码作为临界区。相关函数 InitializeCriticalSection:用于初始化临界区对象 void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection) lpCriticalSection:表示一个临界区对象的指针 EnterCriticalSection:用于等待临界区对象的所有权 void EnterCriticalSection( LPCRITICAL_SECTIO.
阅读全文
摘要:源码下载地址:http://download.csdn.net/source/3503308第四:休闲放松 有些玩家希望在玩游戏过程中听歌放松等休闲,所以我自己设计了一个简易的mp3、mp4播放器播放器能够对各个盘符中的mp3、mp4文件进行搜索,免去玩家的查阅对于播放器,大家可以用MFC里面的Windows Media Player控件 对于歌曲的搜索,需要递归函数实现,也可以用CFindFile类实现void CMusicDlg::ListDir(CString Dir){ _finddata_t fdata; long done; //char tempdir[MAX...
阅读全文
摘要:源码下载地址:http://download.csdn.net/source/3503308第三:设计师 好的程序不仅能够让玩家玩设计好的游戏,还应该让他们的新想法得以实现,这就需要为他们提供设计平台 1:布局在游戏界面中,新建一个类来完成里面的全部功能,玩家可以点选右边的图来设计自己的想法左边是布局,可以用一个CRect数组设置其区域CRect pic[6];//用于存储六个图片的位置 CRect place[64];//用于存储64个格子的位置BOOL CDesignDlg::OnInitDialog() { num=0;//默认初始为第十关 chosed=0;//默认选中的是墙 //初.
阅读全文
摘要:第二:制作菜单,完善功能源码下载地址:http://download.csdn.net/source/3503308 一:选关功能 自己要为游戏设置一些关数,而且难度应该递增,这个选关的对话框需要新建,主要是返回一个表示关数的数值void CPushBoxDlg::OnChose() { CchoseDlg dlg; dlg.m_chose_hard=num_hard; dlg.DoModal(); UpdateData(true); UpdateData(false); num_hard=dlg.m_chose_hard; CPushBoxDlg::Initi_State(ii,jj); s
阅读全文
浙公网安备 33010602011771号