作者:朱金灿
来源: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图形编程 中的一个例程所引发的收获和思考相关推荐

  1. windows图形编程基础

    windows图形编程基础 2010年08月30日 图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器.打印机和绘图仪)上的与设备无 ...

  2. 关于windows图形编程 Hello2 程序的问题

    今天买了本windows图形编程, 袁风,机械工业出版社(N年前就绝版了,淘宝上买的复印版,效果比有些正版书要好), 在我运行书中示例程序 "Hello2.cpp" 的时候,发现程 ...

  3. Windows用户界面编程中的界面闪烁问题

    http://yyf9989.cnblogs.com/archive/2005/09/02/228320.html Windows用户界面编程中的界面闪烁问题 南京千里独行版权所有转载请保留本信息 在 ...

  4. 计算机图形编程基础,Windows图形编程基础.ppt

    Windows图形编程基础 软件教研室 计算机图形学 第三章 Window图形编程基础 一.设备描述表DC及相关的MFC类 二.图形设备接口(GDI : Graphics device Interfa ...

  5. 图形编程中,旋转的三种表示方法

    图形编程中,旋转的三种表示方法分别是:矩阵.欧拉角和四元数. 本文总结这三种表示方法的特点: 性质 矩阵 欧拉角 四元数 在坐标系间转换 能 不能 不能 连续或增量旋转 能,但是转换速度慢 不能 能, ...

  6. Windows API 编程起始——创建一个窗口

    最初了解Windows api编程呢,就是先创建出一个最简洁的窗口,就如我们学习C/C++时的"Helloword"一样,这是进入windows编程大门的重要一个步,下面就开始吧. ...

  7. Windows DLL编程中的导入导出:__declspec(dllimport) ,__declspec(dllexport) ,

    在Windows DLL编程时,可使用__declspec(dllimport)关键字导入函数或者变量. 函数的导入 当你需要使用DLL中的函数时,往往不需要显示地导入函数,编译器可自动完成.但如果你 ...

  8. Map-Reduce 思想在 ABAP 编程中的一个实际应用案例

    ABAP 是一门企业级应用编程语言,其 740 版本于 2013 年发布,增添了许多新的语法和关键字: 其中一个亮点就是新引入的 REDUCE 关键字.这个关键字的作用和在大规模数据集并行计算领域里广 ...

  9. 计算机ip地址删除,Windows 8 或 Windows Server 2012 中删除一个 IP 地址时,不正确地删除活动路由表项...

    修补程序信息 可以从 Microsoft 获得受支持的修复程序.但是,此修补程序用于解决本文中描述的问题.此修复程序仅适用于遇到本文中描述的问题的系统.此修补程序可能会接受进一步的测试.因此,如果这个 ...

最新文章

  1. 神经网络模型中class的forward函数何时调用_用Keras从零开始6步骤训练神经网络
  2. 网站推广——网站推广专员从蜘蛛角度出发如何进行网站优化
  3. python自学书籍顺序-2018最全各阶段Python学习书籍汇总!
  4. 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 使用 IDA 打开 arm 动态库文件 | 切换 IDA 中汇编代码显示样式 )
  5. 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
  6. Java 洛谷 P1152 欢乐的跳
  7. 时钟信号线 电源线 地线_信号线和电源线的区别
  8. 手把手教你使用CocoaPods管理你的iOS第三方开源类库
  9. (软件工程复习核心重点)第一章软件工程概论习题
  10. html数字自动滚动代码怎么写,你可能需要这样的大屏数字滚动效果
  11. Metro UI 的设计感悟
  12. React中StrictMode严格模式
  13. 拓端tecdat|豆瓣大数据分析告诉你,高评分影视密码
  14. 数据库系统概念第六版课后习题-第二章答案
  15. 电脑控制手机;电脑操作手机软件(Total Control)
  16. 程序员学习的网站(持续收集中)
  17. Matlab 图像增强(对数变换)
  18. android 自定义心电图,Android动态滚动波形图(心电图)的实现
  19. 吴军的《见识》书的核心内容
  20. LLVM:Rust、Clang等语言的强大支持以及编译原理和过程

热门文章

  1. sparksql join用法
  2. 被黑出翔的联想已经站在悬崖边上
  3. 云媒易:电器行业怎么做新闻软文推广?
  4. Keil C51与Keil MDK共存,Keil4与Keil5共存的安装方式推荐
  5. Linux-权限管理
  6. 表单序列化及格式化表单序列化方法
  7. 我在企业中是怎么简单使用Git的参与团队开发的?Git使用教程
  8. 小米怎么就“不行”了呢?疫情之下谁顶不住
  9. 家谱管理系统的设计与实现.c(含源代码)
  10. 阿拉德手游服务端Centos搭建教程