 |
一个求PI的外星程序
|
|
| |
|
# include "stdio.h"
long a=10000,b,c=2800,d,e,f[2801],g;
void main(){
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}
能求900多位的PI值,速度还可以,给大家研究下.:)
|
|
| 作者:不祥 Bccv张贴于2004-04-08 09:10:16.0,共阅读1972次,回复1次 |
|
|
 |
对话框中使用ON_UPDATE_COMMAND_UI更新菜单
|
|
| |
|
症状
从命令用户界面处理函数(Command UI handler)改变菜单状态(启用/禁用,选择/取消选
择,更改文字)在由对话框处理时没有正常工作。
void CTestDlg::OnUpdateFileExit(CCmdUI* pCmdUI
{
pCmdUI->Enable(FALSE); //没有显示为禁用.
pCmdUI->SetCheck(TRUE); // 没有文字前显示选定标记.
pCmdUI->SetRadio(TRUE); // 没有在文字前显示点.
pCmdUI->SetText("Close"); //没有更改菜单文字.
}
原因
在下拉菜单显示的时候, WM_INITMENUPOPUP消息被先发送以显示菜单项。MFC CFrameWn
d::OnInitMenuPopup 函数遍历菜单项并为每个菜单项调用更新命令处理函数(如果有的
话).菜单的外观被更新以反映它的状态(启用/禁用,选择/取消选择)
更新用户界面机制在基于对话框的应用程序中不能工作,因为CDialog没有OnInitMenuP
opup 处理函数,而使用CWnd's 默认处理函数,该函数没有为菜单项调用更新命令处理函
数。
解决
适用下列步骤解决此问题
在消息映射中添加ON_WM ...
|
|
| 作者:不祥 jerry张贴于2004-06-14 12:50:56.0,共阅读3913次,回复0次 |
|
|
 |
IE编程技巧
|
|
| |
| 1.实现Ctrl+C:
ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL);
2.实现Ctrl+V:
ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL);
3.实现查找:
MSHTML::IHTMLDocument2Ptr pdoc;
_variant_t varinput,varoutput;
IOleCommandTarget *pCmd;
HRESULT hr;
pdoc=GetHtmlDocument();
hr=pdoc.QueryInterface(IID_IOleCommandTarget,&pCmd);
if(SUCCEEDED(hr))
{
varinput=_T("");
hr=pCmd->Exec(&CGID_MSHTML,IDM_FIND,OLECMDEXECOPT_DODEFAULT,&varinput,&varou
tput);
}
4.实现显示源程序:
MSHTML::IHTMLDocument2Ptr pdoc;
_variant_t varinput,varoutput;
IOleCommandTarget *pC ...
|
|
| 作者:不祥 jerry张贴于2004-06-11 10:00:57.0,共阅读2553次,回复0次 |
|
|
 |
刷屏技术的实现
|
|
| |
|
在实现绘图的过程中,显示的图形总是会闪烁,笔者曾经被这个问题折磨了好久, 通过向高手请教,搜索资料,问题已基本解决,现将文档整理出来以供大家参考. 1.显示的图形为什么会闪烁?
我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除,而又叠加上了新的图形。有的人会说,闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的,其实这样说并不对,绘图的显示速度对闪烁的影响不是根本性的。例如在OnDraw(CDC *pDC)中这样写:
pDC->MoveTo(0,0);
pDC->LineTo(100,100);
这个绘图过程应该是非常简单、非常快了吧,但是拉动窗口变化时还是会看见闪烁。其实从道理上讲,画图的过程越复杂越慢闪烁应该越少,因为绘图用的时间与用背景清除屏幕所花的时间的比例越大人对闪烁的感觉会越不明显。比如:清楚屏幕时间为1s,绘图时间也是为1s,这样在10s内的连 ...
|
|
| 作者:不祥 jerry张贴于2004-06-08 11:34:24.0,共阅读2727次,回复0次 |
|
|
 |
白乔原创:轻轻松松C to C++[2]
|
|
| |
| 二、挑战#define
#define是C提供的一条很有用的指令,但在C++中,很有可能杜绝宏指令的使用。
1 .const
宏指令允许用户指定某一标识符的值作为一个常量,如:
#define PI 3. 1415926
它也可以用来定义字符串:
#define HZK16 "HZK16F"
以下使用可以通过:
cout << "PI is“<<PI;
cout << "Filename: "<< HZK16;
但宏毕竟不是一个合法的对象,虽然它伪装得很完美。C++为用户提供了常量修饰符const,可以指定某个对象的值为常量。它阻止用户对其进行赋值或其它副作用,类似于上例:
const float PI=3.1415926;
char*const HZK16="HZK16F";
PI = 3. 14; //error
HZK16="HZK16K"; //error: Cannot modify a const object
但对于指针的处理似乎有些复杂,例如以下使用却又合法:
HZK16[5]=’r’; //ok HZK16 ="HZK16K"
清楚地了解const修饰的范围很有必要,如下是声明形式与相应含义:
char*const cpl="I love you!“; //const修饰’*’,cp1是一个指向字符的指针常量
const ch ...
|
|
| 作者:不祥 bluejoe张贴于2004-06-03 22:13:48.0,共阅读2002次,回复0次 |
|
|
 |
生死MFC程序
|
|
| |
| MFC将大部分函数都进行了封装,程序员只要改写部分重要的virtual函数即可,这往往使初学者摸不着头脑,连个WinMain函数都看不到,程序从哪开始从哪结束?基本的条理搞不清,永远也不会有提高。下面简单讲下基运行过程.
1,CMyWinApp theApp 程序从这里开始
2,_tWinMain() 在APPMODUL.CPP 它实际上只调用AfxWinMain函数
3,AfxWinMain() WINAMIN.CPP,去掉一些次要信息,它作的事就是:
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp(); ->实际上就是取得CMyWinApp对象指针
AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
pApp->InitApplication()
pThread->InitInstance()
pThread->Run();
AfxWinTerm();
...
|
|
| 作者:不祥 bluejoe张贴于2004-06-03 14:20:55.0,共阅读2695次,回复0次 |
|
|
 |
白乔原创:轻轻松松C to C++
|
|
| |
| C++技术固然是很时髦的,许多C用户都想在尽可能短的时间内为自己贴上C++的标签。介绍C++的书很多,但只有那些已经侥幸入门的用户才偶尔去翻翻,仍有不少在C++门口徘徊的流浪汉。
本文只针对C用户,最好是一位很不错的老用户(譬如他在遇到最简单的问题时都尝试着使用指针),通过一些C和更好的C++(本文用的是Borland C++3.1版本)例程介绍有关C++的一些知识,让读者朋友们“浅入深出”,轻轻松松C to C++! 一、标签!标签!
快快为你的程序贴上C++的标签,让你看起来很像个合格的C++用户……
1.注释(comment)
C++的注释允许采取两种形式。第一种是传统C采用的/*和*/,另一种新采用的则是//,它表示从//至行尾皆为注释部分。读者朋友完全可以通过//使你的代码带上C++的气息,如test0l:
//test01.cpp
#include <iostream.h>
//I'm a C++user!
//…and C is out of date.
void main()
{
cout<<"Hello world!\n"; //prints a string
}Hello-world!
如果你尝试着在test0l. exe中找到这些高级的注释,很简单,它们不会在那里的。
2. cincout
你可能从test ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-31 21:40:06.0,共阅读2208次,回复1次 |
|
|
 |
便利的开发工具-log4cpp快速使用指南
|
|
| |
| 以前写的一个文章,介绍log4cpp的,始发于这里:
http://www-900.ibm.com/developerWorks/cn/linux/l-log4cpp/index.shtml
便利的开发工具-log4cpp快速使用指南
作者: hehe (9:37 pm)
以前写的一个文章,介绍log4cpp的,始发于这里:
http://www-900.ibm.com/developerWorks/cn/linux/l-log4cpp/index.shtml
便利的开发工具-log4cpp快速使用指南
内容:
优点
原理
手动使用步骤
配置文件驱动方式使用步骤
相关考虑
参考资料
关于作者
在 Linux 专区还有:
教程
工具与产品
代码与组件
文章
李群 (liqun@nsfocus.com)
绿盟科技
2003 年 9 月
log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过
来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内
的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用
最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点)
,然后分原理,手动使用步骤, ...
|
|
| 作者:不祥 Bccv张贴于2004-05-28 12:58:48.0,共阅读5206次,回复0次 |
|
|
 |
21世纪的智能编译器
|
|
| |
| 在这个演讲中,我先简要讲述四十多年前我作为计算机工业界的一名程序员时的早期经历。我将描述我所看到的编程实践方面的不断改进,特别是在我现在工作的最大的软件公司--微软。这会有助于我们预测以后四十年在智能编译器的进一步改善和编程语言质量的进一步提高。我将强调大学和工业界中高级研究的贡献。
在这个演讲中,我先简要讲述四十多年前我作为计算机工业界的一名程序员时的早期经历。我将描述我所看到的编程实践方面的不断改进,特别是在我现在工作的最大的软件公司--微软。这会有助于我们预测以后四十年在智能编译器的进一步改善和编程语言质量的进一步提高。我将强调大学和工业界中高级研究的贡献。
在二十世纪,编译器的定义是就是一段程序,它能读一些用抽象(几乎是数学的)记号表述的用户程序并将其翻译成更晦涩难懂的但能在计算机上直接运行的机器码。一个严重的问题是许多编译好的程序含有错误,一些甚至会导致程序崩溃。检测和消除这些错误就需要艰辛的劳动,即费时耗力的调试过程。
目前,调试问题可以通过其他辅助生成测试条件和测试管理的工具来加速程序缺陷的诊断。但是调试过程的成本和延误仍然是整个程序开发过程的主要部分。
在二十一世纪,编译器和其他程序分析工具会变得更加智能化。它们将更多地理解程序员的意图,能够在程序可能不会实现那些意图时给出警告。程序错误和检测它们的成本将成为过去。卸去了常犯错误的负担,程序员就 ...
|
|
| 作者:不祥 Bccv张贴于2004-05-28 12:56:28.0,共阅读1882次,回复0次 |
|
|
 |
如何使tcp包和udp包穿透防火墙
|
|
| |
| 通过本文的httptunnel 技术同时逃过了防火墙的屏蔽以及系统的追踪试验,我们可以看到网络安全仅仅依靠某种或某几种手段是不可靠的,同时对安全系统的盲目性依赖往往会造成巨大的安全隐患。希望通过本文能引起管理员对网络安全防护系统的思考。
什么是http暗藏通道
什么是局域网安全,系统管理员怎样才能保障局域网的安全?这是一个不断变化的安全概念,很长的一个时期以来,在局域网与外界互联处放置一个防火墙,严格控制开放的端口,就能在很大程度上掌握安全的主动权,方便的控制网内外用户所能使用的服务。比如,在防火墙上仅仅开放80,53两个端口,那么无论是内部还是外面的恶意人士都将无法使用一些已经证明比较危险的服务。
但要注意一点,防火墙在某种意义上是很愚蠢的,管理员对防火墙的过分依赖以及从而产生的懈怠情绪将不可避免的形成安全上的重大隐患,作为一个证明,"通道"技术就是一个很好的例子,这也是本文要讨论的。
那么什么是通道呢?这里所谓的通道,是指一种绕过防火墙端口屏蔽的通讯方式。防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过防火墙与对端通讯,当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务上。举例如下:
A主机系统在防火墙之后,受防火墙保护,防火墙配置的访问控制原则是只允许80端口的数据进出,B主机系统在防火墙之外,是开放的。现在假设 ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-26 18:07:09.0,共阅读2081次,回复0次 |
|
|
 |
利用双计算机调试程序
|
|
| |
| 在游戏编程时,调试程序是很困难的事情,特别是全屏模式,总是无法切换到VC的IDE环境,以前我一般是利用BltFast代替Flip以保证GDI Surface始终在前,但效果不是太好,前一段时间我在VC中发现一个宝贝,可以利用两台计算机调试程序,一台运行程序,另一台运行VC来调试,再加上TRACE输出,真是爽的不得了,下面是我的做法:
1. 保证两台电脑是联网的,最好是都摆在你的面前,不然的话你肯定要跑来跑去 了。还要保证你的程序在两台电脑上都能正常运行,例如都装上DX8。
2. 假设你用A机器运行VC来编程和调试,用B机器来运行你的程序,如果B机器没有装VC,则需要把VC的Debug Monitor拷到B机器上,具体文件是MSVCMON.EXE, MSVCRT.DLL, TLN0T.DLL, DM.DLL, MSVCP6O.DLL和MSDIS110.DLL,如果B机器运行的是NT还要拷贝文件PSAPI.DLL。这些文件在VC的安装目录下Common\MSDev98\Bin目录和系统目录中
3. 在B机器上建立一个共享目录,一定要设成完全共享以保证A能随时在B上写文件。
4. 在A上打开你的程序工程文件, Alt+F7打开Project Setting,选中Debug页面,在Excutable for debug session和 Remote executable ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-26 17:57:34.0,共阅读1584次,回复0次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(四)
|
|
| |
| 5.小汉字库的使用
需要注意是,在建立小汉字库的同时,最好还要记住其中的排列顺序,这样才能方便地通过索引数组来选择字模信息。静态库的内容可以通过test. txt来观察,而动态库的内容却不能直观地显示,如果忘了的话,我们编制以下的小工具来实现浏览功能:
/*testl8. c*/
#include <stdio.h>
#include <graphics.h>
int GetBit(unsigned char c int n)
{
return ((c>>n)& 1);
}
main()
{
FILE*fp;
int i i1 i2 i3 x = 0 y = 0 gd = VGA gm = VGAHI;
long length;
char bit [32];
initgraph(& gd &gm "");
fp = fopen("testl.hzk" "rb");
fseek(fp 0 SEEK_END);
length = ftell(fp) /32L;
rewind(fp);
for(i = 0; i <length; i++)
{
f ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-25 22:27:46.0,共阅读4525次,回复0次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(二)
|
|
| |
| 6.特殊显示
UCDOS3. 0以后版本都向用户提供了特殊显示的功能,在使用特殊显示功能之前,必须先运行RDSL.COM(打印字库读取模块)和TX. COM(特殊显示模块)。
如同输入法模块一样,这两个程序同样也是TSR程序。它们修改了lOH号中断,预先截获特殊显示命令串并予以解释执行。
C语言调用特殊显示的命令格式如下:
printf ("\16[命令串] ");
具体的命令串格式请参考相关手册。显示特殊汉字是特显功能中的一个重要组成部分,其命令串包括许多控制命令:
①-x 横坐标
②|y 纵坐标
③@ 字形 指定汉字显示的字形,取值范围为A-X或a-t。如:L代表48 * 48点阵黑体字
④@ 宽,高 指定汉字显示的大小
⑤= 字库 选择汉字显示的字库编号,取值范围为0-33。如:2代表HZKSLHTJ字库文件。
⑥# 字号n 选择汉字的字号,字号范围为0-7,n可以为“+(正常)”、“-(扁体)”、“|(长体)”三种。
⑦& 行距
⑧^ 字距
⑨( 前景色
⑩) 背景色
如
printf("\16[{-100|100=2#0+ (14)4青春工作室}]");
将在(100100)处以红底黄字显示96 * 96点阵的黑体“青春工作室”五个字。
特显功能主要用来设计软件的封面,而在运行软件时最好不再依赖于中文系统,这就要求 ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-23 18:17:43.0,共阅读3393次,回复1次 |
|
|
 |
白乔原创:DOS时代-汉字的处理技术(一)
|
|
| |
| 有很多这样的编者,他们永远不会在一本书中详尽地叙述一个看起来非常简单的例子。因为这样看来象是在浪费纸张。但是初学者永远是有的,在碰到困难的时候,他们很需要得到耐心的指导和帮助,而事实上他们所看到的都是些“高层次”的内容。每个编者都是从初学者开始的,但他们开始编书的时候,往往不屑于那些细节的问题,这是令读者很苦恼的。
汉字是怎样写到屏幕上来的,中断能用来干什么,还有怎样让你的程序支持鼠标的操作,在此我们开辟了系列讲座:汉字的处理技术、中断的处理技术、鼠标的处理技术,内容由浅至深,环环相扣,很符合初学者的特点。每一章节都提供有很好的例程,并且附上程序的真实运行结果。建议读者要读懂它们,并且能够“临摹”出一些类似的程序来。
关于本文的读者对象,要求能熟悉C语言的基本语法以及关于文件的基本操作,还有一点UCDOS的操作。“程序永远没有结束的时候”。希望读者朋友们能相互切磋,共同提高。汉字的处理技术(一)
许多读者朋友学会了基本的C语言编程以后,就开始对汉字技术产生了兴趣。本篇分别从中文状态、西文状态、文本方式、图形方式四种情形进行汉字处理的介绍。
一、中文状态下的汉字处理
1.第一个汉字处理程序
学习C语言首先都是从著名的“Hello world!”程序起步,它的程序清单如下:
/*test01l. c*/
main( )
{
printf("Helloworld! ...
|
|
| 作者:不祥 bluejoe张贴于2004-05-21 20:46:40.0,共阅读3916次,回复1次 |
|
|
 |
如何真实地模拟火焰效果
|
|
| |
| 模拟火焰效果如何真实地模拟火焰效果
作者:周军
游戏制作离不开各种各样的特效,火焰效果更是这些特效当中最常用的一种。在网上有很多的这方面的例子,但似乎都不太理想。下面我主要介绍几种有效的火焰模拟算法。
在讲述火焰算法之前,我想先介绍一个经典的Blur算法,这将为我们后面的文章提供很好的技术基础,因为这是模拟火焰的关键所在。^_^ 对于不同的效果我们要采取不同的模糊(Blur)算法,在这里我只介绍最简单的一种。
其实Blur算法相当简单,并不像很多人想象的那么神秘,只要一句话就可以解释清楚。我们所要做的不过是把屏幕上的每一个点用它周围的四个点的平均值代替即可。即:
好了,下面我们进入主题,Let’ s get in …… FIRE ! ! !
总的来说,模拟一个火焰效果需要以下这三个步骤:放置热源、火焰上升、减掉衰减因子。
1. 放置热源:
放置热源很好理解,也很好实现,我们只需要在屏幕的适当位置(想升起火焰的地方)放上一些亮点就可以了,比如:
for (int i=0; i<320; i++)
putpixel (i, 199, rand()%256);
2. 火焰上升:
我们已经有了热源,那么如何使火焰升起来呢?这就要用到我们刚才讲到的Blur了。由于火焰是要向上升的,所以我们不能简单的选择待处理pixel的上、下 、左、右四个 ...
|
|
| 作者:不祥 xler张贴于2004-05-19 20:05:02.0,共阅读2255次,回复0次 |
|
|
 |
编程思想之于团队精神
|
|
| |
| 为什么需要有团队?答案其实很简单,就像我们编程,没有必有将所有功能放在一个函数里实现,这样不仅我们难以做到,还难以发现错误和难以维护。这就是一个人闭门造车、埋头苦干,他将很难把事情做好,且自身也难以进步。于是我们需要将程序模块化,把大的功能分成各个小的部分来实现。现在好了,由于各部分实现的功能较简单,就容易做到了,且发现错误和维护也比较容易了,因此我们需要团队!
但是,新的问题又来了。各个模块怎样才能很好地结合起来共同完成最后的功能哩?这就需要各个模块都要有接口,各个模块能否相互调用并很好地结合关键在于接口能否被外部所理解。于是我们的团队各个组或成员就需要交流,需要有好的交流方式,大家能否能否相互协作共同完成任务取决于大家能否充分地交流和相互理解!
好了,现在我们的各个模块都已做好了。最后要怎么来实现整体功能呢?各个模块单独执行吗?不是,我们需要一个main()函数来指挥和调用各个模块,让他们充分发挥自己的功能。所以我们的团队还需要一个Leader!
这就是编程,这就是生活。
|
|
| 作者:不祥 barco张贴于2004-05-16 12:34:57.0,共阅读2160次,回复4次 |
|
|
 |
巴比伦塔为什么会失败
|
|
| |
| 在一次从东方往西方迁徙的过程中,人们发现了苏尔美的地区的一处平原,并在那里定居下来。接着他们奔相走告说:“来,让我们制造砖块,并把它们烧好。”于是他们用砖块代替石头,用沥青代替灰泥(建造房屋)。然后他们又说:“来,让我们建造一座带有高塔的城市,这个塔将高达云霄,也将让我们声明远扬,同时,有了这个城市,我们可以居住在这里,再也不会分散在广阔的大地上了。”于是上帝决定下来看看人们建造的城市和高塔,看了以后,他说:“他们只是一种种族,使用一种语言,如果他们一开始就能建造城市和高塔,那以后就没有什么能难得倒他们了。来,让我们下去,在他们的语言里制造些混乱,让他们相互之间不能听懂。”这样,上帝把人们分散到世界各地,于是他们不得不停止建造那座城市。
-----创世纪,11:1-8
|
|
| 作者:不祥 barco张贴于2004-05-16 12:08:52.0,共阅读1354次,回复0次 |
|
|
 |
snoopy每日一译-DLL中的对话框
|
|
| |
| 在DLL中包含它自己的资源(例如对话框),好象很简单。但是在我发现如何实现之前,我的头都大了。snoopy每日一译-DLL中的对话框
by:Randy More 2002.10.1
from:codeGuru
翻译:snoopy
在DLL中包含它自己的资源(例如对话框),好象很简单。但是在我发现如何实现之前,我的头都大了。
在DLL的函数中弹出对话框,你必须处理状态以使DLL代码能使用DLL资源:
extern __declspec(dllexport) void ShowEditDialog(int &MyData1, int &MyData2)
{
//确保我们能使用DLL资源
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyLocalDialog dlg;
dlg.Arg1 = MyData1; //为MyLocalDialog指定本地数据
dlg.Arg2 = MyData2;
dlg.DoModal();
MyData1 = dlg.Arg1; //对话框关闭后的数据
MyData2 = dlg.Arg2;
}
这有一个来自Johan Nilsson 的升级版。
当应用程序调用这个导出函数时永远不能使用GetLastError()检查发生的错误。这是因为AF ...
|
|
| 作者:不祥 ycr40张贴于2004-05-14 09:23:12.0,共阅读1880次,回复0次 |
|
|
 |
Debug 和 Release 编译方式
|
|
| |
| 经常在 CSDN 上看见有人问 Debug 运行正常但 Release 失败的问题。以往的讨论往往是经验性的,并没有指出会这样的真正原因是什么,要想找出真正的原因通常要凭运气。最近我看了一些这方面的书,又参考了 CSDN 上的一些帖子,然后深入研究了一下关于二者的不同。以下是我的一些体会,拿来与大家共享。
--------------------------------------
本文主要包含如下内容:
1. Debug 和 Release 编译方式的本质区别
2. 哪些情况下 Release 版会出错
2. 怎样“调试” Release 版的程序
--------------------------------------
关于Debug和Release之本质区别的讨论
一、Debug 和 Release 编译方式的本质区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误 ...
|
|
| 作者:不祥 jerry张贴于2004-05-11 20:51:44.0,共阅读3052次,回复0次 |
|
|
 |
如何定制对话框系统菜单
|
|
| |
| 系统菜单是每个 Windows 程序的标准特性。通常系统菜单由 Windows 系统来管理,所以我们平时编成时很少去碰它。但是,有的时候,我们确实想定制自己的系统菜单项。
这样就涉及到定制菜单的处理问题,因为 Windows 无法自动处理我们定制的系统菜单。而且,系统菜单的处理方式与常规的菜单处理是不同的。那么我们如何实现定制的系统菜单呢?相信看完本文的介绍,你会得到满意的答案。
本文例子是一个典型的C++/MFC对话框程序,设置了 EX_WM_TOOLWINDOW 扩展式样,因此在标题栏左上角看不到系统菜单图标,但通过 Ctrl+Space 或者在标题栏单击鼠标右键可以调出系统菜单。例子程序对系统菜单进行了定制,在原有菜单基础上添加了两个菜单命令:一个是显示“关于”对话框;另一个是“退出”。之所以要加一个“退出”菜单命令,是因为例子程序改写了对话框原来默认的“关闭”菜单命令行为(Alt-F4),用来隐藏对话框。因此必须加一个程序的“退出”出口。此外,例子程序利用一个第三方的系统托盘处理类,利用系统托盘图标可以显示/隐藏对话框。 下面我们就来看看用 C++/MFC 实现的细节。
添加菜单
首先在资源定义文件 resource.h 中定义菜单项标示,也可以在标准头文件中定义。
菜单项标示必须具有唯一性。其次,Windows 对系统菜单的处理与常规菜单的处理方法是不同 ...
|
|
| 作者:不祥 jerry张贴于2004-05-11 20:41:25.0,共阅读2114次,回复0次 |
|
|