博文
[置顶] vc编译器各选项含义及说明(2007-04-13 19:35:00)
摘要:=====vc编译器各选项含义及说明(值得收藏)========
-优化-
/O1 最小化空间 minimize space
/Op[-] 改善浮点数一致性 improve floating-pt consistency
/O2 最大化速度 maximize speed
/Os 优选代码空间 favor code space
/Oa 假设没有别名 assume no aliasing
/Ot 优选代码速度 favor code speed
/Ob 内联展开(默认 n=0) inline expansion (default n=0)
/Ow 假设交叉函数别名 assume cross-function aliasing
/Od 禁用优化(默认值) disable optimizations&nb......
Direct2D入门(2011-01-22 13:41:00)
摘要:
Direct2D入门
一. 资源管理(Resource management)
和Direct3D一样,Direct2D程序需要处理设
备丢失(Device lost)问题。Direct2D中的资源分为设备独立资源(Device independent
resource)和设备依赖资源(Device dependent resource)。
设备独立资源包括:
ID2D1DrawingStateBlock
ID2D1Factory
ID2D1Geometry 和由此继承而来的接口
ID2D1GeometrySink and ID2D1SimplifiedGeometrySink
ID2D1StrokeStyle
设备依赖资源包括:
ID2D1Brush 和由此继承而来的接口
ID2D1Layer
ID2D1RenderTarget 和由此继承而来的接口
其他资源
具体参见:http://msdn.microsoft.com/en-us/library/dd756757(v=VS.85).aspx
二. Direct2D程序的结构
在程序初始化函数处创建设备独立资源,如ID2D1Factory,IDWriteFactory等;
创建设备依赖资源,如果运行过程中出现设备丢失,需要重新创建;
响应WM_PAINT消息,在OnPaint()或OnDraw()等处,用创建的资源Render;
响应WM_SIZE消息,在OnSize()处调用ID2D1RenderTarget::Resize();
响应WM_ERASEBKGND,在OnEraseBkgnd()处返回FALSE,阻止GDI重绘客户区背景色,设置背景色的工作交给Direct2D在Render时设置,否则在Resize时会出现窗口闪烁的问题;
退出程序前,清理资源。
为提高程序的性能,尽量减少资源的创建和销毁操作,将能够重复利用的资源接口变量申明为View类的成员变量。
三. Direct2D demo
一个简单的MFC程序,用于演示Direct2D程序的结构和一些简单绘图操作。
1.Direct2D prerequisite
D......
创建纯资源 DLL(2011-01-18 11:00:00)
摘要:纯资源 DLL 是仅包含资源(如图标、位图、字符串和对话框)的 DLL。使用纯资源 DLL 是在多个程序之间共享同一组资源的好方法。提供其资源被针对多种语言进行本地化的应用程序也是一种好方法(请参见 MFC 应用程序中的本地化资源:附属 DLL)。
若要创建纯资源 DLL,请创建一个新的 Win32 DLL(非 MFC)项目,并将资源添加到此项目。
在“新建项目”对话框中选择“Win32 项目”,并在“Win32 项目向导”中指定 DLL 项目类型。
为 DLL 创建一个包含资源(如字符串或菜单)的新资源脚本,并保存该 .rc 文件。
在“项目”菜单上单击“添加现有项”,然后在项目中插入这个新的 .rc 文件。
指定 /NOENTRY 链接器选项。/NOENTRY 防止链接器将 _main 引用链接到 DLL 中;此选项是创建纯资源 DLL 所必需的。
生成 DLL。
使用纯资源 DLL 的应用程序应调用 LoadLibrary 来显式链接到 DLL。若要访问资源,请调用一般函数 FindResource 和 LoadResource,这两个函数对任何类型的资源都有效,或调用下列资源特定的函数之一:
FormatMessage
LoadAccelerators
LoadBitmap
LoadCursor
LoadIcon
LoadMenu
LoadString
使用完资源后,应用程序应调用 FreeLibrary。
......
[z]程序员调试能力和相关书籍(2011-01-15 15:08:00)
摘要:在软件行业中,个人觉得每个Coder、Leader(那些当了Leader以后就不需要Code的除外)都应该除了具有良好的编码能力以外,最为
主要的就是Debug的能力要坚实。千万不要告诉我Debug工作是Tester和QA的事情,首先你要认识到Debug的能力是一个并不简单的能力,能
帮助你提高你的开发能力,加快开发速度,节约开发成本;其次你更应该知道,你所掌握的Debug的能力和技术并不可能抢去Tester或者QA的饭碗,他
们做的工作更仔细、全面,更富有创造力。由于本人数年来一直使用VC6,所以下面使用的观点和相关的描述都是从VC出发的,肯定有所偏颇、错误之处,还望
各位看官不吝啬地指出,本人定虚心接受,共同讨论,共同学习,共同进步。个人觉得Debug能力包括以下三个个方面:
1、良好的编码习惯,良好的逻辑结构能力,对Bug的预见能力。一个成熟的程序员,应该有一个良好的编程习惯,不仅需要有良好的编码格式规范,更为需要的
是对于程序中的逻辑实现时候有一种良好的结构。编程其实就是数据和逻辑的集合,数据的处理较为简单,或者说是需要的逻辑思维能力比较少,当算法逻辑要在数
据上实现的时候,同一种逻辑,让不同的程序员来实现可能有各种各样的不同实现结构,从这个角度来说,这里所说的“良好的编码习惯”就应该指的是对于逻辑实
现时候使用的良好的编程结构,一个好的编程结构应该是能预防错误的发生,对错误的预见和错误出现以后的错误处理与异常处理的良好安排。也许有人说这不好办
吗?每个逻辑判断的地方添加条件判断或者异常处理不就行了?个人觉得不是那么回事,过多的if、assert、ASSERT等语句或者是宏,尤其是并列的
if语句需要耗费很多判断、执行的时间,对于一个子程序(函数),尤其是调用频率比较频繁的子程序(函数),一次浪费了一点点时间,多次、频繁地调用浪费
的时候就显得可观了,所以并不是if语句使用的多,程序出错的可能性就小,过犹不及!如果确实需要使用多个if语句进行条件判断,最好能使用嵌套的if语
句,逐步的缩小判断范围,这样消耗的时间要比并列的if语句要小,还要注意的是if语句的条件判断也不是万能的;assert、ASSERT等判断宏也不
是万能的,它会造成Debu......
[z]A2W和W2A :很好的多字节和宽字节字符串的转换宏(2011-01-15 15:06:00)
摘要:作者:朱金灿
来源:http://blog.csdn.net/clever101
以前看《Window核心编程》,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。近日接触了ATL的一个很好的字符串的转换宏:A2W和W2A。
用法很简单,A2W的用法:
view plaincopy to clipboardprint?
#include <atlconv.h>
DoSomething(LPWSTR str); // 函数声明
USES_CONVERSION;
DoSomething(A2W("SomeString"));
#include <atlconv.h>
DoSomething(LPWSTR str); // 函数声明
USES_CONVERSION;
DoSomething(A2W("SomeString")); W2A的用法:
view plaincopy to clipboardprint?
#include <atlconv.h>
DoSomething(LPCSTR str); // 函数声明
USES_CONVERSI......
[z]DLL封装框架视图经验总结二(2011-01-15 15:05:00)
摘要:现在说说如何外部调用。新建一个调用该DLL 的单文档工程Ower ,现在Ower 工程,在框架类 CMainFrame 类定义一个CCustomManage2 类的私有变量:
view plaincopy to clipboardprint?
private:
CCustomManage2 m_CustomManage2;
private:
CCustomManage2 m_CustomManage2;
然后新建一个菜单项,在菜单项的命令响应函数里弹出新建窗口,具体代码如下:
void CMainFrame::OnTest2()
{
// TODO: 在此添加命令处理程序代码
m_CustomManage2.CreateDocTemple();
}
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
下面谈谈如何销毁窗口防止内存泄露。这时我们需要考虑用户是怎么关闭新建窗口,用户就是要么是单击调用程序的关闭按钮把两个窗口都关闭;要么单击DLL 弹出的新建窗口的关闭按钮。用户先关新建窗口,再关闭调用程序,这个是没有内存泄露的。但是如果用户一下关闭应用程序(就是同时关闭两个窗口),就会出现内存泄露。为此我们需要重写 CMainFrame 类的WM_CLOSE 消息:
void CMainFrame::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// 获取框架窗口指针
CCus......
[z]DLL封装框架视图经验总结-(2011-01-15 15:04:00)
摘要:作者:朱金灿
来源:http://blog.csdn.net/clever101
有关VC编程中DLL封装对话框的资料网上多如牛毛,现在我想探究一下如何在DLL中封装框架窗口、文档和视图,略有所得,与诸君共享。我找到了两种DLL封装框架视图的方式。实际上用DLL封装框架视图涉及到两点:一是如何封装;二是确保窗口销毁之后的不出现内存泄露。(下面所有代码的开发环境为:VS C++ 2005+sp1, Win XP + sp2)
方式一 动态创建窗口
请不要误会,我不是指用C语言开发SDK的方式动态创建窗口的方式,当然这样是完全可以的,问题是这种太过于方式太过于复杂。微软已经封装好了MFC,我们没必要不领微软的情。我采用的是一种API和MFC结合的方式。我们把调用DLL模块的程序叫宿主程序,把封装窗体的DLL叫客户程序。
首先我们建一个使用共享MFC的规则DLL工程Custom1。我的基本想法是这样的:定义三个类:
类名
描述
备注
CCustomManage1
对外接口类,该类负责动态窗口的创建和销毁。
CCustomFrameWnd1
派生自CFrameWnd,为动态创建的框架窗口类。
CCustomView1
派生自CView,为动态创建的视图类。
大致的设计是这样的:在CCustomManage1类定义一个CCustomFrameWnd1类的指针,在CCustomFrameWnd1类定义一个CCustomView1类的指针。
主要创建代码如下:
view plaincopy to clipboardprint?
/******************************************************************......
[z]对话框的OnPaint函数的两种写法的区别(2011-01-15 15:02:00)
摘要:作者:朱金灿
来源:http://blog.csdn.net/clever101/
下面是对话框的OnPaint函数(就是WM_PAINT消息的响应函数)的两种写法。
写法一:
view plaincopy to clipboardprint?
void CMyDlg::OnPaint()
{
CDC *pDC = GetDC();
// 我的绘制代码
MyDrawFunction(pDC);
ReleaseDC(pDC);
}
void CMyDlg::OnPaint()
{
CDC *pDC = GetDC();
// 我的绘制代码
MyDrawFunction(pDC);
ReleaseDC(pDC);
}
写法二:
view plaincopy to clipboardprint?
void CMyDlg::OnPaint()
{
CPaintDC dc(this);
// 我的绘制代码
MyDrawFunction(&dc);
}
void CMyDlg::OnPaint......
[z]如何调试MFC中的内存泄漏(2011-01-15 15:00:00)
摘要:转载地址:http://www.cnitblog.com/martin/archive/2006/04/21/9460.html
首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。
我们来看看:
F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp( 54 ) : { 86 } normal block at 0x00422E80 , 10 bytes long .
Data: < > 1F 1F 1F 1F 1F CD CD CD CD CD
F:\CodeSample\Test\TestPipe\LeakTest\MainFrm.cpp( 54 )
告诉我们MFC认为是在该文件的54行,发生了内存泄漏。你双击改行就可以转到该文件的54行了。但是有时候这一信息......
[译文]三重缓冲:为什么我们爱它(2010-11-25 17:35:00)
摘要:文章来源:http://www.anandtech.com/video/showdoc.aspx?i=3591&p=1
文章标题:Triple Buffering: Why We Love It
文章作者:Derek Wilson
文章时间:2009年6月26日
引子
我们往往不愿过多讨论哪些选项在游戏中应该开启。相反,我们往往把重点放在我们的评测内容上。老实说,我们对玩游戏的建议设置与我们的评测设置非常相似,除了一个非常重要的选项:三重缓冲(这同时意味着开启垂直同步V-sync )。虽然这不是一个所有的游戏都有的选项——但它真的很必要要。我们现在来说为什么要开启三重缓冲以及为什么开发商应该支持它。
对大多数游戏玩家来说,当涉及到任何关于垂直同步(V-sync)的时候 ,都会在驱动程序或游戏中关闭它。事实上,我们做评测时也会这样做,因为它使我们更清楚地看到游戏的真实性能。而那些喜欢打开垂直同步的玩家,则是为了避免在某些情况下发生视觉“撕裂”效果。
我们想尝试一些不同的写作方式。下文中将包括两个投票调查,首页以及文章的末尾。第一个调查报告的目的反馈我们的读者对垂直同步、双重与三重缓冲的了解程度。
这个投票结果取之于2009年6月27日下午5点
看完正文后后,我们的读者可以参与另一个投票,其目的是本文对读者的影响是否会左右将来的游戏设置。
首先将是审视一下双重缓冲和垂直同步的概念,然后我们会谈论三重缓冲。对于那些执着于细节的读者(需要更多的有说服力的证据),我们将提供丰富的插图更深入的剖析每种方法。
什么是双重缓冲,垂直同步和三重缓冲?
当电脑需要在显示器上显示东西时,它按照它的想法画一幅需要显示的图像(我们称之为缓冲区Buffer)并传输给显示器。在过去,只有一个缓冲区并不断的被电脑绘制和发送给显示器。这种做法有一些优势,但也有非常大的缺点。最值得注意的是,当物体在屏幕上进行了更新,他们往往会导致闪烁。
......