Windows图形编程 中的一个例程所引发的收获和思考
作者:朱金灿
来源:http://blog.csdn.net/clever101/
袁峰大侠著的《Windows图形编程》是一本学习《Windows图形编程》的好书。书中的第二个例程值得探究。第二个例程的代码如下:
//----------------------------------------------------------------------------------- Windows Graphics Programming: Win32 GDI and DirectDraw ISBN 0-13-086985-6 Written by Yuan, Feng www.fengyuan.com Copyright (c) 2000 by Hewlett-Packard Company www.hp.com Published by Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com FileName : hello2.cpp Description: Hellow World Demo 2, full screen display, Chapter 1 Version : 1.00.001, July 26, 2000 -----------------------------------------------------------------------------------#define STRICT//#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <tchar.h>#include <assert.h>void CenterText(HDC hDC, int x, int y, LPCTSTR szFace, LPCTSTR szMessage, int point){ HFONT hFont = CreateFont(- point * GetDeviceCaps(hDC, LOGPIXELSY) / 72, 0, 0, 0, FW_BOLD, TRUE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, VARIABLE_PITCH, szFace); // assert(hFont); HGDIOBJ hOld = SelectObject(hDC, hFont); // 设置 SetTextAlign(hDC, TA_CENTER | TA_BASELINE); SetBkMode(hDC, TRANSPARENT); SetTextColor(hDC, RGB(255,0,0)); TextOut(hDC, x, y, szMessage, _tcslen(szMessage)); SelectObject(hDC, hOld); DeleteObject(hFont);}const TCHAR szMessage[] = _T("Hello, World");const TCHAR szFace[] = _T("Times New Roman");#pragma comment(linker, "-merge:.rdata=.text")#pragma comment(linker, "-align:512")extern "C" void WinMainCRTStartup(){ // 获取屏幕DC HDC hDC = GetDC(NULL); // 在屏幕中央绘制 CenterText(hDC, GetSystemMetrics(SM_CXSCREEN) / 2, GetSystemMetrics(SM_CYSCREEN) / 2, szFace, szMessage, 72); ReleaseDC(NULL, hDC); ExitProcess(0);}
我使用VS C++ 2005(带sp1)建一个Win32应用程序的空工程--Hello2,新建一个Hello2.cpp,把上面的代码敲进去,生成Hello2.exe,调试运行被告知无法启动Hello2.exe,双击Hello2.exe被提示Hello2.exe不是有效的Win32程序,于是上网搜资料,发帖提问。VC知识库的杨大侠告知:
/ALIGN 选项指定程序线性地址空间中每一节的对齐方式。number 参数以字节为单位,并且必须是 2 的幂。默认值是 4K (4096)。如果对齐方式产生无效的图像,则链接器发出警告。
除非正在编写诸如设备驱动程序的应用程序,否则应不需要修改对齐方式。
可以用 /SECTION 选项的对齐参数修改特定节的对齐方式。
指定的对齐值不能小于最大的节对齐。
按照杨大侠的说法,/ALIGN 选项参数的最小值应为1024,于是我试着把#pragma comment(linker, "-align:512")改为#pragma comment(linker, "-align:1024"),结果真能运行起来。#pragma comment(linker, "-merge:.rdata=.text")和#pragma comment(linker, "-align:512")这两句代码的作用应该是为了减少生成的二进制文件的大小。
另外这个例程的代码在VC 6.0是可以运行的,也就是说VC 6.0可以接受#pragma comment(linker, "-align:512"),不过工程设置方面需要作如下设置:
C++选项卡下的Project Optons下输入如下设置:
/nologo /MLd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fo"Debug/" /Fd"Debug/" /FD /c
Link选项卡下的Project Optons下输入如下设置:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/Hello2.pdb" /map:"Debug/Hello2.map" /debug /machine:I386 /out:"Debug/Hello2.exe" /pdbtype:sept
另外运行VC 6.0生成的exe文件可能会被杀毒软件误报为病毒(我的小红伞杀毒软件就是这样提示),估计这是杀毒软件以为该exe文件是病毒所致,这时选择忽略即可。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
Windows图形编程 中的一个例程所引发的收获和思考相关推荐
- windows图形编程基础
windows图形编程基础 2010年08月30日 图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器.打印机和绘图仪)上的与设备无 ...
- 关于windows图形编程 Hello2 程序的问题
今天买了本windows图形编程, 袁风,机械工业出版社(N年前就绝版了,淘宝上买的复印版,效果比有些正版书要好), 在我运行书中示例程序 "Hello2.cpp" 的时候,发现程 ...
- Windows用户界面编程中的界面闪烁问题
http://yyf9989.cnblogs.com/archive/2005/09/02/228320.html Windows用户界面编程中的界面闪烁问题 南京千里独行版权所有转载请保留本信息 在 ...
- 计算机图形编程基础,Windows图形编程基础.ppt
Windows图形编程基础 软件教研室 计算机图形学 第三章 Window图形编程基础 一.设备描述表DC及相关的MFC类 二.图形设备接口(GDI : Graphics device Interfa ...
- 图形编程中,旋转的三种表示方法
图形编程中,旋转的三种表示方法分别是:矩阵.欧拉角和四元数. 本文总结这三种表示方法的特点: 性质 矩阵 欧拉角 四元数 在坐标系间转换 能 不能 不能 连续或增量旋转 能,但是转换速度慢 不能 能, ...
- Windows API 编程起始——创建一个窗口
最初了解Windows api编程呢,就是先创建出一个最简洁的窗口,就如我们学习C/C++时的"Helloword"一样,这是进入windows编程大门的重要一个步,下面就开始吧. ...
- Windows DLL编程中的导入导出:__declspec(dllimport) ,__declspec(dllexport) ,
在Windows DLL编程时,可使用__declspec(dllimport)关键字导入函数或者变量. 函数的导入 当你需要使用DLL中的函数时,往往不需要显示地导入函数,编译器可自动完成.但如果你 ...
- Map-Reduce 思想在 ABAP 编程中的一个实际应用案例
ABAP 是一门企业级应用编程语言,其 740 版本于 2013 年发布,增添了许多新的语法和关键字: 其中一个亮点就是新引入的 REDUCE 关键字.这个关键字的作用和在大规模数据集并行计算领域里广 ...
- 计算机ip地址删除,Windows 8 或 Windows Server 2012 中删除一个 IP 地址时,不正确地删除活动路由表项...
修补程序信息 可以从 Microsoft 获得受支持的修复程序.但是,此修补程序用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这个 ...
最新文章
- 神经网络模型中class的forward函数何时调用_用Keras从零开始6步骤训练神经网络
- 网站推广——网站推广专员从蜘蛛角度出发如何进行网站优化
- python自学书籍顺序-2018最全各阶段Python学习书籍汇总!
- 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
- 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
- Java 洛谷 P1152 欢乐的跳
- 时钟信号线 电源线 地线_信号线和电源线的区别
- 手把手教你使用CocoaPods管理你的iOS第三方开源类库
- (软件工程复习核心重点)第一章软件工程概论习题
- html数字自动滚动代码怎么写,你可能需要这样的大屏数字滚动效果
- Metro UI 的设计感悟
- React中StrictMode严格模式
- 拓端tecdat|豆瓣大数据分析告诉你,高评分影视密码
- 数据库系统概念第六版课后习题-第二章答案
- 电脑控制手机;电脑操作手机软件(Total Control)
- 程序员学习的网站(持续收集中)
- Matlab 图像增强(对数变换)
- android 自定义心电图,Android动态滚动波形图(心电图)的实现
- 吴军的《见识》书的核心内容
- LLVM:Rust、Clang等语言的强大支持以及编译原理和过程