摘要:CImageListImageList;//创建一个包含3个24位色32x32图片的ImageList,ILC_MASK的意思是同时创建一个mask,这样在下面指定了背景颜色以后ImageList就可以画透明图像了ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,3,1);//加载位图,IDB_XXXX是一个96x32大小的图片,背景颜色为红色RGB(255,0,0)CBitmapBmp;Bmp.LoadBitmap(IDB_XXXX);//将图片加到ImageList中ImageList.Add(&Bmp,RGB(255,0,0));....//
阅读全文
02 2014 档案
摘要:对话框中的小红线可以被移动的一、类名是 CBinarizationDlg二、定义两个变量BOOL m_flag;int nPos;在构造函数初始化m_flag = false;nPos=256;三、响应消息函数三个afx_msg void OnPaint();afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFl...
阅读全文
摘要:对话框的种类有两种类型的对话框:模态对话框和非模态对话框.模态对话框时指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中的其他任务。非模态对话框显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。创建模态对话框1.在资源编辑器里面新建一个对话框资源,ID采用默认值为:IDD_DIALOG12.双击该对话框,为该对话框添加一个关联的类,命名为CtestDlg3.创建一个菜单项4.为该菜单项添加COMMAND命令消息响应函数,让视类来捕获它5.在实现函数中调用Cdialog类的成员函数:DoModal,添加如下两行代码:CTestDlg dlg;dlg.DoModal
阅读全文
摘要:C方式:写:FILE *pFile = fopen("1.txt", "w");fwrite("http://www.pcslonline.com", 1, strlen("http://www.pcslonline.com"), pFile);fclose(pFile);读:FILE *pFileRead = fopen("1.txt", "r");char *pBuf;fseek(pFileRead, 0, SEEK_END); //把文件指针移动到文件结尾int len
阅读全文
摘要:文件保存://为FALSE,显示保存文件对话框CFileDialog fileDlg(FALSE);fileDlg.m_ofn.lpstrTitle = "我的文件保存对话框";fileDlg.m_ofn.lpstrFilter = "Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";fileDlg.m_ofn.lpstrDefExt = "txt";if (IDOK == fileDlg.DoModal()){CFile file(fileDlg.GetFileName(), CF
阅读全文
摘要:WM_CREATE消息该消息是Windows发送给视图的第一个消息。由于当应用程序框架调用Create函数时该消息就会被发送,而此时窗口创建还未完成,窗口还不可见,因此在控制函数OnCreate内部,不能调用那些依赖于窗口处于完全激活状态的Windows函数。但是我们可以在被重载的OnInitialUpdate函数内调用这些函数。不过必须注意,对于SDI程序,在视图生存期间OnInitialUpdate函数可能会被调用多次。注意:OnInitialUpdate函数是视图窗口完全建立后,在调用OnDraw函数之前第一个被调用的函数,很多初始化工作可以放在这个函数里,因此很重要。WM_CLOSE消
阅读全文
摘要:这里主要用到了一个函数:BOOLSetWindowPos(constCWnd*pWndInsertAfter,intx,inty,intcx,intcy,UINTnFlags);具体用法可以参看MSDNvoid CSYSLoaderDlg::OnCheckFront(){// TODO: Add your control notification handler code hereif (m_checked == TRUE){m_checked = FALSE;SetWindowPos(&CWnd::wndNoTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE)
阅读全文
摘要:这里主要用到一个函数UINT DragQueryFile( HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch); hDrop: HDROP标识符,即响应函数中的hDropInfo参数 iFile: 待查询的文件索引号,从0开始。可以同时拖拽多个文件,因此就需要一个索引号来进行区分。如果该参数为 0xFFFFFFFF,则该函数返回拖拽的文件的个数 lpszFile: 用于存放文件名的缓冲区首地址 cch: 缓冲区长度 返回值:文件名长度接受一个文件的实例:1.新建mfc对话框。2.对话框行为里面,accept fil...
阅读全文
摘要:一、NOTIFYICONDATA结构NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为: typedef struct _NOTIFYICONDATA {//以字节为单位的这个结构的大小 DWORD cbSize; //接收托盘图标通知消息的窗口句柄 HWND hWnd; //应用程序定义的该图标的ID号 UINT uID;//设置该图标的属性 UINT uFlags; //应用程序定义的消息ID号,此消息传递给hWnd UINT uCallbackMessage; //图...
阅读全文
摘要:1 最简单的办法:添加一个不可见的按钮,设为对话框的默认按钮即可2 重载对话框的PreTranslateMessage消息处理BOOL CSIMDlg::PreTranslateMessage(MSG* pMsg){// TODO: Add your specialized code here and/or call the base classif( pMsg->message ==WM_KEYDOWN){ if(pMsg->wParam == VK_ESCAPE||pMsg->wParam == VK_RETURN) return TRUE;}return CDialog
阅读全文
摘要:最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化。其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了。其实说白了,原理很简单,就是ListCtrl在插入一个Item的时候,会发送一个NM_CUSTOMDRAW的消息,我们只要实现这个消息响应函数,并在里面绘制我们的颜色就可以了。但是响应这个消息在VC6.0下需要自己实现:1.在头文件中声明函数:afx_msg void OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult );2.在cpp文件中添加消息映射:ON_NOTIFY(NM_
阅读全文
摘要:在StatusBar中显示当前时间,如下:1.在String Table中插入一项(注意:状态栏将根据字符串的长度来确定相应窗格的缺省宽度,所以指定为00:00:00就为时间的显示预留了空间)2.添加indicators数组3.在OnCreate函数中设置时钟 :SetTimer(1, 1000, NULL);4.添加WM_TIMER 和 WM_CLOSE的消息响应函数
阅读全文
摘要:对话条是工具栏和无模式对话框相结合的产物,对话条和对话框类似,包含有标准的Windows控件,并且可以通过创建对话框模板来表示对话条。伸缩条功能很强大,我们可以在伸缩条中直接增加CToolBar,CStatusBar和CDialogBar等类创建的控制条,如下:CReBar rb;rb.Create(....);CToolBar tb;tb.Create(...);tb.LoadToolBar(...);//将工具栏加入到伸缩条rb.AddBar(&tb,...);如果需要在伸缩条的段中包含其他的窗口类型(例如动画控件),仅需要将该控件放进对话框模板中,创建对话条,然后利用CReBar
阅读全文
摘要:1.建立一个基于对话框的工程,并在第二步中选择WOSA支持2.建立客户端(1)在头文件中添加成员变量public:CSocket m_clientsocket;(2)每隔一秒钟向服务端发送一次数据3.建立服务端(1)在头文件中添加成员变量public:CSocket m_sockRev;(2)服务端每隔一秒钟接收一次客户端发来的数据程序运行:
阅读全文
摘要:1.建立服务端(发送端)(1)声明成员变量public:CSocket m_sockSend;(2)每隔一秒钟发送一次数据2.建立客户端(接收端)(1)声明成员变量public:CSocket m_sockRev;(2)每隔一秒钟接收 一次数据程序运行状态:
阅读全文
摘要:1.首先在界面上放置一个static text 控件2.修改它的ID,并添加其控件成员变量CStaticm_staticIcon;3.编写函数:
阅读全文
摘要:1.在CMainFrame中添加CSplitterWnd类型的成员变量:2.新建几个派生于类CListView ,CEditView,CtreeView的类3.在CListView ,CEditView的派生类中添加头文件:#include 4.重载OnCreateClient函数程序运行结果:
阅读全文
摘要:UINT DownloadFile(LPVOID pParam){CWnd*pwnd = AfxGetMainWnd();CProgressCtrl*m_Prog = (CProgressCtrl*)pwnd->GetDlgItem(IDC_PROGRESS1);CButton*bStart = (CButton*)pwnd->GetDlgItem(IDB_BTN_START);charfilebuf[512];CInternetSessionnetSession;CStdioFile*fTargFile;intoutfs;CStringszFile,FileSize,KBin,K
阅读全文
摘要:Q: 如何打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。Q: 如何打开一个同系统程序相关连的文档?ShellExecute(this-
阅读全文
摘要:1.锁定窗口,不进行刷新m_list.LockWindowUpdate();2.设定列表不进行重画m_list.SetRedraw(FALSE);3.清空列表,删除历史数据m_list.DeleteAllItems();4.窗口解锁,允许刷新。否则系统的视图也会进行闪烁m_list.UnlockWindowUpdate();5.向列表中循环增加记录6.重画列表m_list.SetRedraw(TRUE);
阅读全文
摘要:前面提到了CImageList类的Create(...)函数,虽然MSDN上已经有所解释,但仍有网友问到参数的具体含义,下面就我的理解,对参数进行一次轻量级的剖析 函数原型(其他重载函数请参看msdn):BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow );cx,cy:图片的实际像素宽与高,没有问题nFlags:创建图像列表的类型,包括4/8/16/24/32/位色,nInitial :创建ImageList初始包括的图像个数nGrow当初始分配的图像个数不够的时候,新增一个图片时,指定图象列...
阅读全文
摘要:一、JRTPLIB简介 老外用C++编写的开源RTP协议库,用来进行实时数据传输,可以运行在 Windows、Linux、 FreeBSD、Solaris、Unix和VxWorks 等多种操作系统上,主页为:http://research.edm.uhasselt.be/~jori/page/index.php?n=Main.HomePage二、相关下载jrtplib: http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplibjthread: http://research.edm.uhasselt.be/~jor...
阅读全文
摘要:Ⅰ live555简介 Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。 该项目的源代码包括四个基本的库,各种测试代码以及IVE555MediaServer。四个基本的库分别是UsageEn..
阅读全文
摘要:一、流媒体简介随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡。目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒体文件时,基本上只有下载和流式传输两种选择。通常说来,A/V文件占据的存储空间都比较大,在带宽受限的网络环境中下载可能要耗费数分钟甚至数小时,所以这种处理方法的延迟很大。如果换用流式传输的话,声音、影像、动画等多媒体文件将由专门的流媒体服务器负责向用户连续、实时地发送,这样用户可以不必等到整个文件全部下载完毕,而只需要经过几秒钟的启动延时就可以了,当这些多媒体数据在客户机上播放时,文件的剩余部分将继
阅读全文
摘要:Xtrme toolkit,BCGControlBar,SkinMagic,AppFace,Skin++,Uskin++,SYGUI,LibUIDK,GuiToolkit,GardenUI等等,除了后两种一个是开源,一个是免费的外,其余的都是收费的。The Ultimate Toolboxhttp://www.codeproject.com/KB/MFC/UltimateToolbox.aspxGuiToolkit(开源,mfc扩展框架,类似Visual Studio 2003风格)http://www.beyondata.com/default.htmGardenUI(免费,界面效果挺好的,
阅读全文
摘要:STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就把所有类型转换一遍吧?有没有好办法?答案当然是肯定的,先看看MS的TCHAR是怎么做的,以下摘自MS Platform 的tchar.h,略有删减#ifdef _UNICODE#ifdef __cplusplus} /* ... extern "C" */#endif/* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */#
阅读全文
摘要:本篇文章是对c++中的char*与wchar_t*与string以及wstring之间的相互转换进行了详细的分析介绍,需要的朋友参考下-复制代码 代码如下: #ifndef USE_H_ #define USE_H_ #include #include #include using namespace std; class CUser { public: CUser(); virtual~ CUser(); char* WcharToChar(const wchar_t* wp); char* StringToChar(const string& s); cha...
阅读全文
摘要:这东西真是奇怪,找了半天原因,最终的发现却是让人抓狂,呵呵现象:对话框按ESC或回车都不能关闭窗口(我没有处理PreTransplanteMessage),用spy++看,对话框完全收不到键盘消息原因:我的对话框上有个控件的属性中设置了:Tab Stop,rc文件中看的话就是加上了WS_TABSTOP解决:去掉tab stop风格! 唉,真是!#$%!$%!$%^@%^@#%&*!%$!看来每一行代码都要细细想过之后才加,就像是处理MFC的消息,一样,最后要返回TRUE还是返回FALSE,不想清楚,就很可能会出问题。
阅读全文
摘要:本文为验证后的结果,准确性较高,适合任何人阅读静态库和动态库链接分析1、文件组成结构静态库:lib 头文件动态库:lib dll 头文件从组成上看,动态库和静态库的差异在于动态库多了一份dll文件,导致动态库可以独立存在,2、链接方式静态库:只能静态链接动态库:动态链接和静态链接3、运行效果静态库:相当于直接把代码段写入到exe或dll文件中动态库:相当于与exe或dll形成了一种关系,exe或dll可以到动态库中去查找所需要的函数4、差别:静态库:不需要导出就可以被链接使用动态库:需要导出后方可使用(动态链接)5、编译静态库:编译后只有lib文件动态库:若没有导出函数刚只能编译出dll文..
阅读全文
摘要:1.什么是静态连接库,什么是动态链接库 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。静态链接库与静态链接库调用规则总体比较如下。对于静态链接库(比较简单): 首先,静态链接库的使用需要库的开发者提供生成库的.h头
阅读全文
摘要:大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下:/SUBSYSTEM:{CONSOLE|EFI_AP
阅读全文
摘要:在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!一. message 参数。message它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:#pragma message(“消息文本”)当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。假设我们希望判断自己有没有在源代码的什么地方定义了_X86
阅读全文
摘要:这个问题看是很简单,但是在不同语言中实现的方式却千差万别,如果不知道方法,还真是麻烦,我就是在C#中遇到该问题,让我费了很大的周折,才在msdn查到。一、16进制字符串转数字 1、C/C++ I、最简单的办法:sscanf(“12AB”,,”%x”,&lngHex); //字符也可以为”0x12AB” II、有个朋友,自行编写函数实现了该功能,据说速度比sscanf快: BOOL HexToDec( LPCTSTR shex,int& idec ) { int i,mid; int len = lstrlen( shex ); if( len>8...
阅读全文
摘要:windows下此处的”非正常断开”指TCP连接不是以优雅的方式断开,如网线故障等物理链路的原因,还有突然主机断电等原因有两种方法可以检测:1.TCP连接双方定时发握手消息 2.利用TCP协议栈中的KeepAlive探测第二种方法简单可靠,只需对TCP连接两个Socket设定KeepAlive探测,所以本文只讲第二种方法在Linux,Window2000下的实现(在其它的平台上没有作进一步的测试)Windows 2000平台下头文件#include //定义结构及宏struct TCP_KEEPALIVE {u_longonoff;u_longkeepalivetime;u_longkeepa
阅读全文
摘要:for(;iter!=mapStudent.end();){ if((iter->second)>=aa) { //满足删除条件,删除当前结点,并指向下面一个结点 mapStudent.erase(iter++); } else { //条件不满足,指向下面一个结点 iter++; }}这种删除方式也是STL源码一书中推荐的方式,分析 mapStudent.erase(iter++)语句,map中在删除iter的时候,先将iter做缓存,然后执行iter++使之指向下一个结点,再进入erase函数体中执行删除操作,删除时使用的iter就是缓存下来的iter(也就是当前iter(做了
阅读全文
摘要:memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。第二种情况下,问题出现在右边的两个字节,这两个字节
阅读全文
摘要:跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。 心跳包一般来说都是在逻辑层发送空的echo包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样...
阅读全文
摘要:假如你定义了一个位图类,里面包含位图头,位图信息头,调色板,位图数据。然后你按照位图的格式将位图文件读入你的类中,现在你知道了位图的全部信息了。主要信息包含在位图信息头里面,数据则在位图数据缓冲里面。现在的问题是,在Windows下面如何将一张位图画出来,而且现在是如何从数据缓存里面绘画出位图。一般情况,我们都是直接绘制在dc里面,而不是绑定到子控件,让子控件自己绘画,比如picture控件之类的,我觉得提供绘制在dc里面的接口更具有广泛性。现在我知道两种从内存数据绘制彩色位图的2种方法。第一种麻烦一点,第二种则相当直接。方法一:第一步,用CreateCompatibleDC创建跟目标dc的兼
阅读全文
摘要:正如大家所知道的那样,多核多cpu越来越普遍了,而且编写多线程程序也是件很简单的事情。在Windows下面,调用CreateThread函数一次就能够以你想要的函数地址新建一个子线程运行。然后,事情确实你发现创建多线程根本没有让程序快多少,也没有提高多少cpu利用率,甚至可能让cpu利用率下降。唯一能够确定的是多线程能够避免界面假死。为什么会是这样的了。本文将举一些例子和讲述一些原因。首先,我来讲一下多处理的一些知识。如下图所示,多处理器系统也只有一个待运行的线程队列,内存中也只有一个操作系统拷贝,而且也只有一个内存系统,但是会有多个cpu同时运行不同的线程。一个cpu运行一个线程,那么上图中
阅读全文