MFC编程
文章平均质量分 70
sstower
这个作者很懒,什么都没留下…
展开
-
vc6调试时不让它进入CString 构造函数
在Common\MSDev98\Bin的AUTOEXP.DAT文件中添加如下代码即可:[ExecutionControl]strlen=NoStepIntoCString::GetBuffer=NoStepIntoCString::CString=NoStepInto原创 2020-07-24 18:15:33 · 161 阅读 · 0 评论 -
怎样给listctrl的scroll bar换肤
我们知道,通过custom_draw或者ower_draw可以美化列表控件里面所显示的条目,比如可以加上特殊背景等,但是如果想给其边框滚动条换上其他样子就不那么容易做到了,很容易想到的方法是,找到他的窗口句柄,然后作子类化,但遗憾的是,不管你通过什么方式,你都无法找到它的句柄。那么只有通过第二种方式了,直接把它隐藏掉,再换上自己的滚动条。你可能想问,句柄都找不到,怎么隐藏它?别着急,有办法,微原创 2012-07-17 14:30:01 · 1373 阅读 · 0 评论 -
vc 利用钩子实现菜单阴影效果
菜单也是一个窗口, 假如我们能得到它的窗口的句柄, 要实现像添加阴影这样的效果, 就不会很难了。可惜我们根本找不到这个窗口是在哪里被创建的,也没办法很容易地取得它的窗口句柄,甚至几乎难以相信它是一个窗口,因为我实在找不到它的窗口句柄啊。经过对许多别人已经做好的类的源代码的"研究", 我终于找到了一个方法。那就是万能的钩子,如果说在Windows里面抓"人",连钩子也办不到的话,那我就不知道该用转载 2012-06-28 10:14:15 · 838 阅读 · 0 评论 -
vc6用unicode 编码方式来编译程序
1.打开项目设定的C++ 页面,添加UNICODE,_UNICODE两个宏定义:2. 在link页面,更改入口函数为wWinMainCRTStartup: 注意:编译的时候需要用到unicode的链接库,默认情况下不会安装,重新装上编译就应该通过!原创 2012-07-10 17:55:56 · 1621 阅读 · 0 评论 -
在两个CListctrl之间拖动数据的一段代码
直接上代码:void CReportRogueDlg::OnBegindragNewAPList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here原创 2012-07-05 20:07:53 · 874 阅读 · 0 评论 -
利用afxDump 来调试自己的程序
在开发调试过程中,我们往往要想知道一些变量的当前值,简单的变量可以用TRACE语句在调试窗口中打印出来:TRACE(" this height :%d",height);但是如果遇到比较复杂的值,如CRect, CRgn 等,如果要把它的值都打印出来,那是相当的麻烦:TRACE(" this left :%d right % top % bottom %d \n",rect.left,原创 2012-07-04 10:48:01 · 2403 阅读 · 0 评论 -
利用钩子实现菜单阴影效果2
我们再来看看,怎么"登记"它们: CMenuWndHook* CMenuWndHook::AddWndHook(HWND hwnd) { CMenuWndHook* pWnd = NULL; if (m_WndMenuMap.Lookup(hwnd, pWnd)) { // 有这个人了,不用再登记了。 return pWnd; } // 给它分配个房间转载 2012-07-04 11:26:48 · 1009 阅读 · 0 评论 -
在vc中如何自定义AfxMessgeBox的系统窗口外观
这个问题困扰了很久,今天终于找到一个办法了,如下:在App类中,重载DoMessageBox函数,int CCustomUIApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt) { CMessageBox dlgBox; return (int)dlgBox.DoModal();原创 2012-05-08 17:54:30 · 1490 阅读 · 0 评论 -
ado 读写二进制数据
写二进制数据:pRs->AppendChunk(_T("tpContent"),buff,dwLen);读二进制数据: CADOFieldInfo info; pRs->GetFieldInfo(_T("tpcontent"),&info); //topology设备上下文,在数据表中以二进制存在 void *buff=malloc(info.原创 2012-03-08 17:50:43 · 1913 阅读 · 0 评论 -
怎样从内存中获取数据
假设aBuf指向一段内存:BYTE* aBuf我们要获取里面的数据,可如下获取:char 型数据:BYTE ClassID=*(aBuf+len); stDate=(short)(*((char*)(aBuf+len)));short ,int16型数据:stDate=(short)htons(*((short*)(aBuf+len))); int32 型数据:原创 2012-07-19 16:05:45 · 2783 阅读 · 0 评论 -
Tga图片格式分析以及程序实现
继位图之后,我们来看看Tga图片的格式,以及程序实现。 一、 文件格式Tga常见的格式有非压缩RGB和压缩RGB两种格式,其他格式的我们在这里不做讲述。文件的第三个Byte位作为标记:2为非压缩RGB格式,10为压缩RGB格式。它们的具体格式如下: 1、非压缩格式图片类型:2-非压缩RGB格式 名称偏移长度说转载 2012-10-02 09:29:38 · 2788 阅读 · 0 评论 -
重定向标准输出错误输出到编辑控件中!
有时候我们需要重定向标准输出(stdout)错误输出(stderr)到编辑控件中:比如我们作了一个前端编译器,编译的功能由mingw gcc来完成,这时我们要捕获它的编译消息到我们的输出窗口,这时怎么办呢!很简单,我们需要用匿名管道来实现,参见如下代码:SECURITY_ATTRIBUTES g_sa = {sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};原创 2013-01-06 23:04:45 · 1407 阅读 · 0 评论 -
内存查错与GFlags、AppVerifier、Pageheap.exe介绍
COM相互引用的消除与检测 windbg release下"Your debugger is not using the correct symbols"的问题内存查错与GFlags、AppVerifier、Pageheap.exe介绍 2009-01-12 16:47:49| 分类:默认分类 | 标签:|举报|字号大中小 订阅转载 2014-04-15 00:24:57 · 2975 阅读 · 0 评论 -
利用scintilla实现高级编辑器
scintilla是一款开源的编辑器组件,在windows上以动态库存在,目前在notepad++,codeblock都是用该组件完成大部分编辑功能。网上绝大部分是用c++builder来调用scintilla来实现高级编辑功能,这里我以vc6来实现。用vc6新建一个单文档工程。我们改写View 类,使view成为scintilla class的一个实例,首先,不要忘了在app的InitI原创 2013-09-19 10:56:03 · 3979 阅读 · 0 评论 -
lib文件格式分析
lib文件最开头,由8个字符串开始,值为“!\n”。接下来由4个不同类型的区段组成(不是四个区段),依次排列下来是First Section(一个), Second Section(一个), Long Section(一个), Obj Section(包含有多少个obj文件,就有多少个obj section)。区段头都是以这样的一个结构体开始。typedef struct{转载 2013-08-01 22:26:56 · 3184 阅读 · 0 评论 -
谈谈WS_EX_CLIENTEDGE窗口风格
关于该风格要注意几点的是:WS_EX_CLIENTEDGE窗口风格并不是对所有窗口都有效,只有窗口有客户区的时候才有效,这样当它用在比如button,combox,tab无客户区的控件时,它是无效的。通过对话框模版创建的控件ListCtrl,如果你指定了WS_BORDER,这时WS_BORDER将被拿掉,而WS_EX_CLIENTEDGE会被设置上。但是如果你通过create手动创建则不会原创 2013-06-06 15:22:14 · 16870 阅读 · 0 评论 -
谈谈CListCtrl 扩展风格设置方法-SetExtendedStyle和ModifyStyleEx 比较
谈谈CListCtrl 扩展风格设置方法--------------------------------------SetExtendedStyle和ModifyStyleEx 比较 对于初学者来说,当他需要设定listctrl的扩展风格时,常常想到用ModifyStyleEx 来设定,代码如下:ModifyStyleEx(0,LVS_EX_GRIDLINES)这是不正确的,正原创 2013-06-06 12:42:02 · 11437 阅读 · 0 评论 -
谈谈CListCtrl如何调整行高
调整CListCtrl 行高通常有3种方法:设定字体设定图片处理MeasureItem消息。这里只是谈一谈第3种方法,对于CListCtrl 来说,它只支持owner draw fixed 而不像CListBox 既支持owner draw fixed也支持owner draw variable,这里variable是指行高度是可变的;fixed 指行高度固定。我们虽然很容易在clas原创 2013-06-14 15:47:37 · 13132 阅读 · 1 评论 -
CListCtrl 自定义栅格(vc6)
有时候需要自定义CListCtrl 的栅格,比如其颜色,宽度等,但是如果通过自定义画,宿主画均不能达到这种效果,这个时候只能通过自己来处理WM_PAINT消息来达到这种效果了,代码如下:void CMyList::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your原创 2013-06-04 16:24:20 · 1866 阅读 · 0 评论 -
mfc 常用方法
1. 在任务栏隐藏对话框 ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);2. 使对话框为顶层窗口 SetWindowPos(&this->wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);3. 在运行时添加最大化,最小化按钮 SetWindowL原创 2013-05-21 11:25:16 · 931 阅读 · 0 评论 -
vc6 支持正则表达式
最新版的boost库不支持vc6, 支持vc6的最高版为1.34故在网上下载boost_1_34_1,解压。两种方式编译:1. 运行 boost_1_34_1\tools\jam\src\build.bat, 生成bjam,拷贝到boost_1_34_1,执行:bjam --toolset=msvc --with-regex --build-type=complete s原创 2012-01-06 00:53:39 · 3269 阅读 · 0 评论 -
vc6 通过ole读取excel
参考代码如下: _Application m_oExcelApp; _Worksheet m_oWorkSheet; // 工作表 _Workbook m_oWorkBook; // 工作簿 Workbooks m_oWorkBooks; // 工作簿集合 Worksheets m_原创 2012-01-05 19:57:36 · 3184 阅读 · 0 评论 -
vc6 中实现gcc 的__builtin_return_address 扩展
获取函数返回值:gcc提供了获取当前函数的返回地址的一个关键字:void * __builtin_return_address(int nLevel);nlevel 参数指获取哪个函数的返回值,0表示当前函数,1表示当前函数的调用者的函数,为2依次类推;下面是vc6的实现:__declspec (naked) void* __builtin_return_address (in原创 2011-10-26 11:26:12 · 2063 阅读 · 0 评论 -
软件漏洞分析入门(一)
1 引子To be the apostrophe which changed “Impossible” into “I’m possible”—— failwest凉风有讯,秋月无边。您是否梦想过能够像电影上演的那样黑进任意一台机器远程操控?您的梦想是否曾经被书店里边满架子的反黑,防毒,擒木马的扫盲书强暴的体无完肤?从今天开始,准备陆续发一系列关于软件漏洞方面基础知识的帖子,包括软件漏洞的研究价值转载 2010-05-19 22:02:00 · 921 阅读 · 0 评论 -
编程技术点滴
1. listctrl 第一列居中对齐 LV_COLUMN lvc; lvc.mask = LVCF_FMT; m_list.GetColumn( 0, &lvc ); lvc.fmt &= ~LVCFMT_JUSTIFYMASK; lvc.fmt |= LVCFMT_CENTER; m_list.SetColumn( 0,原创 2010-05-10 18:11:00 · 560 阅读 · 0 评论 -
在vc6实现png图像文件的显示方法
vc6本身不会提供对png图像文件的显示支持,在这篇文章中谈谈怎样借用libpnp开源代码来实现这一点。原创 2010-07-01 14:10:00 · 6109 阅读 · 0 评论 -
用windbg 调试win2k
在虚拟机virtual pc 安装win2k, 新建一个启动项: multi(0)disk(0)rdisk(0)partition(1)/winnt="w2k" /fastdetect /debug /debugport=com1 baudrate=57600 在虚拟机中设定com1为 named pipe: //./pipe/com1 给windbg 设定一个快捷方式:原创 2010-04-30 23:55:00 · 815 阅读 · 0 评论 -
怎样为工具栏按钮添加字
在网上搜了一下,发现大部分方案都比较复杂,这里介绍一种简单的方法,只要在mainfram类的OnCreate函数中如下操作即可:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;原创 2010-04-30 19:07:00 · 780 阅读 · 0 评论 -
深入GDI图像显示
摘 要:本文首先给出了一种结合了DIB和DDB两种位图优点的图像显示方法,其次对GDI函数的高级应用,如透明位图显示、图像旋转显示、图像镜像显示进行了研究。关键词:GDI图像显示,特殊GDI函数的应用,透明位图显示,图像几何变换显示 图像信息是人类认识世界的重要知识来源,人类获得的70%以上的信息来自于眼睛摄取的丰富和真切的图像。图像与计算机相结合带给人们近乎神奇的图像艺术。转载 2010-04-17 10:23:00 · 1794 阅读 · 0 评论 -
COFF文件的格式
COFF – 通用对象文件格式(Common Object File Format),是一种很流行的对象文件格式(注意:这里不说它是“目标”文件,是为了和编译器产生的目标文件(*.o/*.obj)相区别,因为这种格式不只用于目标文件,库文件、可执行文件也经常是这种格式)。大家可能会经常使用VC吧?它所产生的目标文件(*.obj)就是这种格式。其它的编译器,如GCC(GNU Compiler Co转载 2010-04-16 19:33:00 · 979 阅读 · 0 评论 -
如何绘制工具栏右边区域
直接来代码: 在CMainFram::OnCreate()工具栏创建之后调用. CDockBar* pDockTOP = (CDockBar*)GetControlBar(AFX_IDW_DOCKBAR_TOP); oriprocT= (WNDPROC)GetWindowLong(pDockTOP->m_hWnd, GWL_WNDPROC); SetWindowLong(pDockTOP原创 2010-05-27 18:03:00 · 1473 阅读 · 0 评论 -
箭头绘制代码-vc
<br />void DrawLineArrow(CPoint p1,CPoint p2,double theta,double len,CDC *pDC)<br />{<br /> double x0,y0,x1,y1,x2,y2;<br /> CRect rc(p1,p2);<br /> x0=p2.x-p1.x;<br /> y0=p2.y-p1.y;<br /> x1=x0*cos(theta)-y0*sin(theta);<br /> y1=x0*sin(theta)+y0*cos(theta);转载 2010-06-17 15:22:00 · 1820 阅读 · 1 评论 -
在MFC程序中添加全屏显示功能
以SDI工程为例,在工具条上添加一个ID,ID_FULL_SCREEN, 同时添加处理函数,代码如下:void CMainFrame::OnFullScreen() { // TODO: Add your command handler code here GetWindowPlacement(&m_OldWndPlacement); CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0, 0xfff原创 2010-06-17 17:56:00 · 1482 阅读 · 0 评论 -
VC6 使用msxml 操作xml 文档
在VC6 中可以通过两种方式来操作xml文档原始方式:引入:#import "msxml.dll" named_guids raw_interfaces_only读取: MSXML::IXMLDOMDocument *xmlDoc; M原创 2011-10-09 11:32:47 · 2541 阅读 · 0 评论 -
vc6 接收html 的事件
经过3天的公关,终于在vc6中能接收html事件了,具体如下: Example of Handling HTML Element Events in Microsoft Internet ExplorerThe technique makes use of the Microso原创 2011-03-16 14:12:00 · 3511 阅读 · 0 评论 -
ATL 实现IObjectSafety 接口
如果com组件要在IE中进行调用,则必须实现IObjectSafety接口,不然在ie中必须调整activex选项才可以正常运行,如下是实现IObjectSafety的例子:#include //////////////////////////////原创 2011-07-05 21:39:58 · 5313 阅读 · 0 评论 -
在非mfc程序中实现trace功能
<br />参见如下代码:<br /> <br />void CF_TRACE( LPCTSTR pszFormat, ... )<br />{<br /> char buff[61200]={0};<br /> <br /> va_list argList;<br /> va_start(argList,pszFormat);<br /> vsprintf(buff,pszFormat,argList);<br /> va_end(argList);<br /> OutputDebugString(buf原创 2011-02-28 15:15:00 · 742 阅读 · 0 评论 -
我所积累的20条编程经验
编者按:原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳森在文中所言,本文适合刚毕业的大学生和刚入门的程序员。如果你已是高级开发人员,或许你能在本文中看到自己的身影。转载 2011-01-04 10:01:00 · 622 阅读 · 0 评论 -
抓包软件关键代码段实现
<br />实验平台: vc6.0, winxp<br /> <br /> <br />1。 首先定义IP 头,UDP,TCP 头的结构:<br /> <br />typedef struct _IPHeader // 20字节的IP头<br />{<br /> UCHAR iphVerLen; // 版本号和头长度(各占4位)<br /> UCHAR ipTOS; // 服务类型 <br /> USHORT ip原创 2010-11-03 15:11:00 · 1118 阅读 · 0 评论 -
单文档打开多类型文件
<br />参见 msdn : HOWTO: How to Support Two File Extensions per MFC Document Type<br /> SUMMARY<br />Applications built with the Microsoft Foundation Classes (MFC) document or view architecture have at most one file extension associated with each document ty原创 2010-10-23 11:52:00 · 990 阅读 · 0 评论