- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 VAssistX的VA Snippet Editor
代码有点排不齐,是因为粘贴的原因,忘见谅。另外,这是我第一篇文章,希望大家鼓励。谢谢!首先,先上效果代码接着,放出测试代码那些注释。都是事先在VAssistX中,通过宏写的。接下来放出各个关键宏的代码首先是 文件级的注释fileinfo:快捷键自己设定
2011-08-08 14:34:50 717
原创 windows 多线程编程的几点经验 (防止死锁)
1) 不要在线程函数体内操作MFC控件,不要再线程里面调用UpdateData函数更新用户界面,而应该尽量采用发送消息的方式,在主线程的消息响应函数中操作控件;2)不建议采用SendMessage往主线程发送消息,因为它是同步的,阻塞的,可以考虑采用PostMessage代替
2011-08-05 08:58:59 327
原创 21个故事的人
1.甲去买烟,烟29元,但他没火柴,跟店员说:“顺便送一盒火柴吧。”店员没给。 乙去买烟,烟29元,他也没火柴,跟店员说:“便宜一毛吧。”最后,他用这一毛买一盒火柴。 这是最简单的心理边际效应。第一种:店主认为自己在一个商品上赚钱了,另外一个没赚钱。赚钱感觉指
2011-08-03 16:14:02 387
原创 利用com组件读取jpg格式图片
void CFindPicDlg::ShowPic(CString strName, CDC* pDc){ ::CoInitialize(NULL); // COM 初始化 HRESULT hr; CFile file; file.Open(strName, CFile::modeRead | CFile::shareDenyNone); // 读入文件内容 UL
2011-06-28 15:45:00 555
原创 关于透明位图
<br /><br />透明位图网上说了很多,看了半天还是不懂,估计就是因为<br />1.图的颜色取反是个啥意思?<br />2.SetBkColor是设置字体背景颜色的,用在图上,又是个啥意思?<br />反正搞了那么多,最后就总结成最精华的5步方法:<br />1.SetBkColor(原DC, RGB(原图白色,这里就是黑色)),// setbkcolor,作用应该是只会对原图的背景单色产生效果<br />2.BitBlt(掩DC, 原DC, SRCINVERT/SRCPAINT/SRCCOPY这三
2011-04-18 11:08:00 762
原创 C++内存管理
<br /><br />堆空间上的内存分布图<br />// 内存管理测试<br />#include <iostream><br />using namespace std;<br />// 静态区地址测试<br />int a = 1; // 0x00434dc0<br />static int b = 3; // 0x00434dc4<br />// 创建一个长度大于48的类,测试其在堆上的分配规则,测试堆上的<br />// 空间分配的最小单位是否真的为48字节<br />class Big<br
2011-04-18 11:07:00 378
原创 3D数学 ---- 矩阵的更多知识
<br />矩阵的行列式<br />在任意方阵中都存在一个标量,称作该方阵的行列式。<br /> <br />线性运算法则<br />方阵M的行列式记作|M|或“det M”,非方阵矩阵的行列式是未定义的。n x n阶矩阵的行列式定义非常复杂,让我们先从2 x 2,3 x 3矩阵开始。<br />公式9.1给出了2 x 2阶矩阵行列式的定义:<br /><br />注意,在书写行列式时,两边用竖线将数字块围起来,省略方括号。<br />下面的示意图能帮助记忆公式9.1,将主对角线和反对角线上的元素各自相乘,
2011-04-12 11:24:00 1229
原创 图形爱好者的书架
<br />一个图形爱好者的书架.-也来介绍一下我的藏书.<br />早几天看到有人把自己在大学四年的书列了出来.招来一顿怀疑.我是开发图形程序的.我现在也把我的书列出来.不怕大家怀疑吧.希望能有点启示作用.<br />绿色的是我看完了的。红色的是没怎么看的。黄色的是看了一半以上的。<br />首先是基础部分:<br />语言类:<br />C++ Programming Language (Special Edition).C++的圣经级别的书.我只看原文的。不看翻译的.对球教授的翻译表示一定的保留意见.
2011-04-12 11:15:00 488
原创 计算点、线、面等元素之间的交点、交线、封闭区域面积和闭合集
<br /> <br />地理信息系统软件开发中经常需要求取点、线、面之间的交点、交线、封闭区域面积和闭合集等结果,采用以矢量点乘和叉乘为基础的求取算法符合实际工作中已给出点位置和法向量等条件的情况,效率较高。<br />首先给出基本公式的推导。<br />矢量的结合率和交换率:<br />U+(V+W) = (U+V) + W;<br />U+V=V+U;<br />而设线段的起点和终点为P,Q;则中间任意一点R可以表示为:<br />R = P + r(Q - P); (0<r<1)<br />由P0,
2011-04-12 11:06:00 7691
原创 3D数学 ---- 矩阵和线性变换
一般来说,方阵能描述任意线性变换。线性变换保留了直线和平行线,但原点没有移动。线性变换保留直线的同时,其他的几何性质如长度、角度、面积和体积可能被变换改变了。从非技术意义上说,线性变换可能“拉伸”坐标系,但不会“弯曲”或“卷折”坐标系。矩阵是怎样变换向量的向量在几何上能被解释成一系列与轴平行的位移,一般来说,任意向量v都能写成“扩展”形式:另一种略有差别的形式为:注意右边的单位向量就是x,y,z轴,这里只是将概念数学化,向量的每个坐标都表明了平行于相应坐标轴的有向位移。让我们将上面的向量和重写一遍,这次分
2011-04-12 09:40:00 1028
原创 VC++中检测内存泄露
<br />在VC编程时,内存泄露是个麻烦的事情,特别是有时候会产生比较严重的后果,而且这种BUG还比较难查.幸好借助一些第三方的软件,可以方便的找出会产生泄露的地方,比如BoundsChecker.有时候我们想简单的了解我们的程序是否存在内存泄露,还可以直接使用VC的调试库.<br /> 设置内存泄漏检测<br /> 检测内存泄漏的基本工具是调试器和CRT调试堆函数。为了使用调试堆函数,在你的程序中你必须含有下面的说明:<br /> #define _CRTDBG_MAP_ALLOC<br />
2011-04-11 16:50:00 450
原创 MFC中的集合类
<br />实际上集合类就是数据结构中的顺序存储结构和链表存储结构。它的优点就是建立这样的存储结构简单,并且把相关的操作集中成函数,方便用户的调用。比如顺序存储用到数组,如果要在数组中的固定位置添加一项,普通的方法就是要用一个for循环,有点烦琐。而在集合类中只要用一个add函数 就完成了,相对简单一点。 <br /> 数据结构是软件设计中的一个重要组成部分。因此我们有必要搞清楚集合类的相关问题。 <br /> 1。种类型<br /> 集合类中有3种大的类型: <br /> (1) Array:数组
2011-04-11 11:00:00 477
原创 为什么必须要使用CloseHandle关闭句柄
<br />很多程序在创建线程都这样写的:<br />ThreadHandle = CreateThread(NULL,0,.....);<br />CloseHandel(ThreadHandle ); <br />1,线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到return,线程句柄的生命周期是从CreateThread
2011-04-08 13:28:00 1584
原创 隐藏各种窗口方法
<br />对话框:<br />SetWindowPos(&wndNoTopMost,0,0,0,0,SWP_HIDEWINDOW); <br />ModifyStyleEx(0, WS_EX_TRANSPARENT); //隐藏窗口<br />控制台:<br />HWND hWnd = GetConsoleWindow();//获得控制台窗口<br />ShowWindow(hWnd, SW_HIDE);//隐藏窗口<br /> <br />查看所有的窗口文本<br />CWnd* pDesktopW
2011-04-04 12:02:00 1191
原创 实现进程的完全隐藏
WinNT & Win2K下实现进程的完全隐藏作者:AntGhazi 主页:antghazi.yeah.net 面对众多的计算机高手,考虑许久,终于还是决定出来献丑一下,文章内尽量使用最简洁易懂的词汇及例子来介绍,希望能够对一些初学与进阶者有所帮助。 关于进程的隐藏,98下的例子数不胜数。WinNT/Win2K下的隐藏方法,西祠的高手shotgun在去年的6月就已经在网上发布出实例《揭开木马的神秘面纱》 ,我也多次拜读他的文章,对他的计算机水平及热心帮助朋友的作风十分敬佩。这里也可算是对shot
2011-03-31 18:45:00 745
原创 Pretranslatemessage
<br />在MFC里面,Pretranslatemessage是个非常重要的虚函数。这个函数的作用这里就不谈了,非常多地方都有涉及,这里只谈一下其实现的机制。<br />谈到PretranslateMessage的实现,便不得不谈到MFC消息循环的实现。MFC通过CWinApp类中的Pumpmessage函数实现消息循环,不过实际的消息循环代码位于CWinThread中,CWinApp只是从CWinThread继承过来。其简化后的代码大概如下:<br />BOOL CWinThread::PumpMess
2011-03-31 14:37:00 622
原创 捕获Ctrl、Ctrl+Alt和Ctrl+Alt+Shift组合键
// CTestView 消息处理程序 BOOL CTestView::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN) { BOOL bCtrl=::GetKeyState(VK_CONTROL)&0x8000; BOOL bShift=::GetKeyState(VK_SHIFT)&0x8000; BOOL bAlt=::GetK
2011-03-31 14:34:00 1173
原创 CString 的内存结构和初始化
WTL :: CString 包含在 WTL 头文件 atlmisc.h 中,并且在未定义宏 _WTL_NO_CSTRING 时可用。WTL :: CString 是一个非常独立的类,内存结构与 BSTR 类似,即有一个额外的字符串信息头标识字符串相关信息,信息头后紧跟有效字符串数据。此外它还借鉴 COM ,使用引用计数管理字符串对象指针的复制和对象的析构,使得对字符串对象的复制只是复制指针而引用相同内存区的有效字符串数据。这样提高了内存利用率和操作的高效性。引用计数也管理对象的生命期,使其超出生命期没有被
2011-03-31 14:16:00 4942
原创 CString详细讲解
1. CString实现的机制.CString是通过“引用”来管理串的,“引用”这个词我相信大家并不陌生,象Window内核对象、COM对象等都是通过引用来实现的。而CString也是通过这样的机制来管理分配的内存块。实际上CString对象只有一个指针成员变量,所以任何CString实例的长度只有4字节.即: int len = sizeof(CString);//len等于4这个指针指向一个相关的引用内存块,如图: CString str("abcd");‘A’‘B’‘C’‘D’00x04040404
2011-03-31 10:38:00 1418
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人