随笔分类 -  COM/STL/WTL/ATL

摘要:由于需求,需要写个类似QQ迷你资讯首页的东西,就花了一点时间写了写,软件效果截图如下: 程序的主要核心代码如下: 程序的全部源代码下载地址:http://download.csdn.net/download/jczmdeveloper/6953161 程序的完整源码下载地址:http://www.d 阅读全文
posted @ 2014-02-27 13:12 Jamy Cai 阅读(2110) 评论(0) 推荐(0)
摘要:如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize)函数来获取,根据hModule参数来辨别是DLL本身还是DLL的调用者。当hModule 为NULL时候 获取到路径为调用者,当hModule为main入口的BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpR... 阅读全文
posted @ 2014-02-25 13:33 Jamy Cai 阅读(8628) 评论(0) 推荐(0)
摘要:由于工作中经常需要查看文件的MD5值,先前网上找了几个MD5值查看工具,但基本都是选择文件,还没有复制功能,于是今天我就自己编写了个MD5查看工具,支持文件拖拽查看,并可以复制功能。由于本工具比较小,具体如何开发和实现看源代码就明白了,在此就不解说了。对于有需要的童鞋可以根据自己的需求下载,下面是对应的工具软及其源码的下载地址:文件MD5查看器工具下载地址:http://download.csdn.net/detail/jczmdeveloper/6945723文件MD5查看器工具(源代码)下载地址:http://download.csdn.net/detail/jczmdeveloper/6 阅读全文
posted @ 2014-02-21 15:54 Jamy Cai 阅读(865) 评论(0) 推荐(0)
摘要:如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭,即右键任务栏的关闭窗口失效呢?很简单,有一个小窍门就是:响应IDCANCEL消息,具体实现如下:首先定义消息映射:ON_BN_CLICKED(IDCANCEL, &CMyDlg::OnBnClickedCancel)其次定义消息函数:afx_msg void OnBnClickedCancel();最后实现上面定义的消息函数:即将原来的OnCancel()函数去掉,即什么操作都不执行。void CMyDlg::OnBnClickedCancel(){ // TODO: Add your control notificatio 阅读全文
posted @ 2014-02-21 11:33 Jamy Cai 阅读(2605) 评论(0) 推荐(0)
摘要:要实现VC++或者MFC只运行一个程序实例,一般采用互斥量来实现,即首先用互斥量封装一个只运行一个程序实例的函数接口:HANDLE hMutex = NULL;void MainDlg::RunSingleInstance(){ hMutex = CreateMutex(NULL,FALSE,TEXT("Single Instance Demo")); if (hMutex) { if(ERROR_ALREADY_EXISTS == GetLastError()) { // 已经有实例在运行了,发送错误报警 ::MessageBox(NULL,L"已经有实例在运行 阅读全文
posted @ 2014-02-20 14:44 Jamy Cai 阅读(1099) 评论(0) 推荐(0)
摘要:今天项目中60秒倒计时模块需要用到GetTickCount(),这个函数,在此做下整理和总结。1.定义For Release configurations, this function returns the number of milliseconds since the device booted, excluding any time that the system was suspended.GetTickCountstarts at 0 on boot and then counts up from there.在Release版本中,该函数从0开始计时,返回自设备启动后的毫秒数(不 阅读全文
posted @ 2014-02-17 15:51 Jamy Cai 阅读(7930) 评论(0) 推荐(0)
摘要:前段时间,为了准备情人节礼物,本人想了做一个照片浏览器送给女友,专门播放我俩的所有照片的一个程序软件,于是,就写了这么一个照片浏览器软件。本程序是基于WTL8.0开发的一个图片/照片浏览器,涉及到XML文件读写,PNG图等图片文件读取,控件重写,自绘进度条,界面重绘,界面配置采用XML配置,易于扩展... 阅读全文
posted @ 2014-02-11 13:36 Jamy Cai 阅读(562) 评论(0) 推荐(0)
摘要:1.STDMETHOD_(ULONG, AddRef)() PURE;STDMETHOD_:定义一个返回指定类型的虚方法,STDMETHOD:定义一个返回HRESULT类型的虚方法, PURE : = 0;即 纯虚函数。STDMETHODIMP:定义了一个返回HRESULT的接口函数。 #define STDMETHODIMP HRESULTSTDMETHODCALLTYSTDMETHODIMP_:定义了一个返回指定类型的接口函数。 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE2.__declspec(novtable) :就是让类不.. 阅读全文
posted @ 2014-01-20 17:43 Jamy Cai 阅读(749) 评论(0) 推荐(0)
摘要:__stdcall 与 __cdecl:__cdecl,__stdcall是声明的函数调用协议.主要是传参和弹栈方面的不同.一般c++用的是__cdecl,windows里大都用的是__stdcall(API)__cdecl是C/C++和MFC程序默认使用的调用约定,也可以在函数声明时加上__cdecl关键字来手工指定。采用__cdecl约定 时,函数参数按照从右到左的顺序入栈,并且由调用函数者把参数弹出栈以清理堆栈。因此,实现可变参数的函数只能使用该调用约定。由于每一个使用 __cdecl约定的函数都要包含清理堆栈的代码,所以产生的可执行文件大小会比较大。__cdecl可以写成_cdecl。 阅读全文
posted @ 2014-01-20 17:39 Jamy Cai 阅读(288) 评论(0) 推荐(0)
摘要:发送端:新建一个基本对话框工程,添加6个文本框控件,并且关联控件变量(CString类型):m_strCopyData, m_strFileMap, m_strMem,m_strRegMsg, m_strUserMsg, m_strClipBoard然后在 CPP 文件里面,做如下定义:#define BUFFER_SIZE0x100 // 用内存地址通信时分配的最大内存.#define WM_COMMWM_USER+100const UINTwm_nRegMsg=RegisterWindowMessage("reg_data");const UINTwm_nMemMsg= 阅读全文
posted @ 2014-01-20 17:37 Jamy Cai 阅读(455) 评论(0) 推荐(0)
摘要:(1) 线程的创建:(主要以下2种)CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID lParam, int nPriority =THREAD_PRIORITY_NORMAL, UINT nStackSize= 0, DWORDdwCreateFlags = 0, LPSECURITY_ATTRIBUTESlpSecurityAttrs = NULL );HANDLECreateThread( LPSECURITY_ATTRIBUTESlpThreadAttributes, // SD SIZE_T... 阅读全文
posted @ 2014-01-20 17:34 Jamy Cai 阅读(426) 评论(0) 推荐(0)
摘要:1. 工具:1.1设备环境类:Windows下的绘图操作说到底就是DC操作。DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需 要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows的设备无关性。MFC的CDC类封装了Windows API 中大部分的画图函数。CDC的常见操作函数包括:Drawing-Attribute Functions:绘图属性操作,如:设置透明模式Mapping Functions:映射操作Coordinate Functions:坐标操 阅读全文
posted @ 2014-01-20 17:33 Jamy Cai 阅读(2603) 评论(0) 推荐(0)
摘要:在VC++开发中,经常会用到string和wstring,这就需要二者之间的转换,项目中封装了wstring和string相互转换的2个函数,实现如下://将wstring转换成stringstd::string ConvertWStringToAnsi(std::wstring wstr){ std::string result; int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL); if( len <= 0 ) return result; char* buf 阅读全文
posted @ 2014-01-20 16:44 Jamy Cai 阅读(2480) 评论(0) 推荐(0)
摘要:第一步:打开VS2010项目的SLN文件有如下代码:Microsoft Visual Studio Solution File, Format Version 11.00# Visual Studio 2010将之改为:Microsoft Visual Studio Solution File, Format Version 10.00# Visual Studio 2008第二步:打开VS2010项目的 .csproj和.csproj.user文件的开头会有如下代码:ToolsVersion="4.0"将之改为:ToolsVersion="3.5"完成 阅读全文
posted @ 2014-01-20 16:07 Jamy Cai 阅读(273) 评论(0) 推荐(0)
摘要:众所周知,VC++响应回车键经常用的方法是利用BOOL PreTranslateMessage(MSG* pMsg) 截取回车键消息,如:if (pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_RETURN ){//处理回车键消息}但是 对于模态对话框,这种方法可能无效,这个时候,对于模态对话框有一种灵巧的方法,因为对话框程序的回车键都会响应OnButtonOk()这个函数,所以,可以添加ON_BN_CLICKED(IDC_BUTTON_OK,OnButtonOk) 来处理。 阅读全文
posted @ 2014-01-17 00:29 Jamy Cai 阅读(2452) 评论(0) 推荐(0)
摘要:最近写了一个GDI 绘图的程序,过程中遇到一个奇怪的问题,就是 定时器定时一会GDI绘的图就消失了。。后来经过分析,原来是 GDI对象数量过多 ,即GDI对象超过10000个 导致内存泄漏的问题。找到了问题所在,就好解决了,就是及时释放GDI对象。在创建GDI对象的时候,遵循以下规则:GetDC 得到的DC要用 ReleaseDCCreateCompatibleDC 要用 DeleteDC例如:BOOL CLogicChartCtrl::DrawBmp( CDC* pDC, CRect rect, HBITMAP hBitmap ){ BITMAP bm; GetObject(hBitmap. 阅读全文
posted @ 2014-01-13 13:23 Jamy Cai 阅读(4021) 评论(0) 推荐(1)
摘要:vc中获取windows版本信息,一般是调用GetVersionEx 这个API函数来获取的,这个API需要OSVERSIONINFOEX 这个结构体作为参数,OSVERSIONINFOEX 的对应的具体的OS版本类型详细如下:Operating systemVersion numberdwMajorVersiondwMinorVersionOtherWindows8.16.3*63OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATIONWindows Server2012R26.3*63OSVERSIONINFOEX.wProductType != 阅读全文
posted @ 2014-01-10 15:45 Jamy Cai 阅读(5467) 评论(1) 推荐(0)
摘要:在VC++中,要实现对回车键的响应实现,一般通过截获消息来响应,即通过处理BOOL PreTranslateMessage(MSG* pMsg)这个函数来处理实现如下:BOOL PreTranslateMessage(MSG* pMsg){ if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN ) //屏蔽ALT+F4{ //处理响应回车键后的动作} return __super::PreTranslateMessage(pMsg);} 阅读全文
posted @ 2014-01-10 13:07 Jamy Cai 阅读(2016) 评论(0) 推荐(0)
摘要:在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现:1。声明一个NOTIFYICONDATA类,也就是NOTIFYICONDATA NotifyIcon;该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。2。声明一个响应函数afx_msg LRESULT OnClickTray(WPARAM wParam,LPARAM IParam);用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。3。自定义消息,用于点击托盘 来响应的消息:定义消息名称和消息 阅读全文
posted @ 2014-01-08 11:16 Jamy Cai 阅读(3504) 评论(0) 推荐(0)
摘要:1.1WS_CLIPCHILDRENWS_CLIPCHILDREN样式从字面上可以理解成ClipChildren,裁减子窗口。MSDN里的E文解释:Excludes the area occupied by child windows when drawing occurs within the parent window. This style is used when creating the parent window.读E文是一件困难的事,为了不让大家再重复我的痛苦,我就越俎代庖翻译一下:WS_CLIPCHILDREN样式主要是用于父窗口,也就是说当在父窗口绘制的时候,父窗口上还有一个 阅读全文
posted @ 2014-01-02 16:06 Jamy Cai 阅读(806) 评论(0) 推荐(0)