一直想为控制台加上一个漂亮的图标,但在GOOGLE上找了很久也没有找到相关的介绍,

没想到在整理硬盘时居然发现我的硬盘上有太多这样的例子了,

<<Undocumented Windows 2000 Secrets>> 这本书的附书光盘上的所有控制台程序都有图标,于是找一个看了下,

大概步骤应该是这样的:

在C源文件中自定义入口,如下:

DWORD Main (DWORD argc, PTBYTE  * argv, PTBYTE  * argp)

事实上这个Main并不是真正的入口,后面会说!

然后是最关键的两个头文件:

ProgInfo.h    这里面定义了很多宏,不过大多我都没看,只是瞟一眼而已

W32Start.h   这个头文件是重中之重,它实了对自定义入口,在文件最后用如下语句定义了入口:

   #pragma  comment (linker, "/entry:"W32Start"")

并在W32Start函数中调用了上面的那个Main函数:

if  (ConsoleOpen ())
            {
            dCodePage  =  GetConsoleOutputCP ();
            SetConsoleOutputCP (GetACP ());
            GetConsoleScreenBufferInfo (ghStdOutput,  & csbi);
            gdLine  =  csbi.dwSize.X;

dStatus  =  Main (pwc -> argc, pwc -> argv, pwc -> argp);

SetConsoleOutputCP (dCodePage);
            }

如此一来Main就被调用成功了,

最后就是那个RC文件它不是通过IDE环境导入的,而是手写的光盘上的所有RC文件格式完全一样,如下:

//  w2k_sym.rc
//  08-27-2000 Sven B. Schreiber
//  sbs@orgon.com

#define   _RC_PASS_
#include  " w2k_sym.h "

//  =================================================================
//  STANDARD RESOURCES
//  =================================================================

MAIN_RC_VERSION
MAIN_RC_ICON

//  =================================================================
//  END OF FILE
//  =================================================================

其中的MAIN_RC_VERSION 和 MAIN_RC_ICON都是宏,它们定义在ProgInfo.h中:

#define  MAIN_RC_VERSION /
VS_VERSION_INFO VERSIONINFO /
/
FILEVERSION     MAIN_VERSION_HIGH, MAIN_VERSION_LOW,  0 , MAIN_BUILD /
PRODUCTVERSION  MAIN_VERSION_HIGH, MAIN_VERSION_LOW,  0 , MAIN_BUILD /
FILEFLAGSMASK   VS_FFI_FILEFLAGSMASK /
FILEFLAGS        0  /
FILEOS          VOS_UNKNOWN /
FILETYPE        MAIN_VFT /
FILESUBTYPE     VFT2_UNKNOWN /
  { /
  BLOCK  " StringFileInfo "  /
    { /
    BLOCK SA(MAIN_TRANSLATION) /
      { /
      VALUE  " OriginalFilename " , SA(MAIN_FILENAME 0 ) /
      VALUE  " InternalName " ,     SA(MAIN_MODULE 0 ) /
      VALUE  " ProductName " ,      SA(MAIN_NAME 0 ) /
      VALUE  " FileDescription " ,  SA(MAIN_CAPTION 0 ) /
      VALUE  " CompanyName " ,      SA(MAIN_COMPANY 0 ) /
      VALUE  " ProductVersion " ,   SA(MAIN_VERSION_QUAD 0 ) /
      VALUE  " FileVersion " ,      SA(MAIN_VERSION_QUAD 0 ) /
      VALUE  " LegalCopyright " ,   SA(MAIN_COPYRIGHT_EX 0 ) /
      VALUE  " Comments " ,         SA(MAIN_COMMENT 0 ) /
      } /
    } /
  BLOCK  " VarFileInfo "  /
      { /
      VALUE  " Translation " , 0xMAIN_LANGUAGE, 0xMAIN_CODEPAGE /
      } /
  }

//  =================================================================
//  RESOURCES
//  =================================================================

#define  MAIN_RC_MENU   MAIN_MENU   MENU
#define  MAIN_RC_ICON   MAIN_ICON   ICON   MAIN_MODULE.ico
#define  MAIN_RC_CURSOR MAIN_CURSOR CURSOR MAIN_MODULE.cur
#define  MAIN_RC_BITMAP MAIN_BITMAP BITMAP MAIN_MODULE.bmp

MAIN_RC_ICON 会被解释为MAIN_MODULE.ico ,而这里的MAIN_MODULE和上面的SA(.......)宏中的参数一样

又都是宏,

它们定义在自己工程的头文件中,如他的W2K_SYM.H:

#define  MAIN_MODULE             w2k_sym
#define  MAIN_NAME                  SBS Windows 2000 Symbol Browser
#define  MAIN_COMPANY          Sven B. Schreiber
#define  MAIN_AUTHOR             Sven B. Schreiber
#define  MAIN_EMAIL                  sbs@orgon.com
#define  MAIN_PREFIX                SBS
#define  MAIN_EXE

这里的MAIN_MODULE即是当前工程的工程名又是图标文件的文件名,所以我在自己的工程中可以这样定义:

#define  MAIN_MODULE             WindowConsoleTest
#define  MAIN_NAME                  Window Console Test
#define  MAIN_COMPANY          thinkSJ Group
#define  MAIN_AUTHOR            thinkSJ
#define  MAIN_EMAIL                 thinkersj@163.com
#define  MAIN_PREFIX              thinkSJ
#define  MAIN_EXE

这样一来所有东西都被串到了一起,牛人不惭是牛人,构思真是太巧妙了,赞一个!!

为控制台程序加个图标相关推荐

  1. 关于如何用od反汇编win32 控制台程序

    *********************************************************** 如何用od反汇编win32 控制台程序(类似dos程序)呢? ********* ...

  2. dll文件是什么语言写的程序_易语言图文教学:写好了程序,如何配置程序名称、图标?内详...

    引导语 通过前两篇图文,相信大家能制作出一个简单的易语言程序啦.今天是教大家怎样配置程序.说的再清楚些,就是给你的程序加个图标,改个进程名字,加上版本号,添加作者信息等等. 具体操作方法 打开一个已经 ...

  3. 控制台程序如何加图标

    刚因为需要生成一个控制台程序供网站调用,由于生成的exe默认是没有图标的. 不直观,而且不好看. 通过谷歌找到了方法. 测试环境是vs2013 在工程中,及main.cpp所在目录下 创建一个&quo ...

  4. C语言控制台程序添加图标(基于GCC编译器)

    文章目录 1. 生成ICON资源文件 2. gcc编译选项时加上资源文件 3. 一键自动编译 没加图标的控制台程序: 加了图标的控制台程序: 首先,需要准备一个ICON图标文件,像素大小推荐128x1 ...

  5. 微信小程序图标不支持html,微信小程序实现自定义加载图标功能

    效果图 实现思路 1.首先通过HTML+CSS实现加载动画的静态效果: 2.根据需求给每个动画设计不同的动画效果. 例如第一个加载图标的静态绘制 1.首先确定动画的盒子宽高: 2.设置盒子中每一个长方 ...

  6. c语言怎么改变程序的图标,VC6.0 控制台程序添加图标的两种方法

    如何给C控制台程序添加图标说来很惭愧的问题,C语言也算学了很长一阵子,目前还是停留在控制台的水平,今天用着用着突然想给程序换个图标,却找不到在哪设置,又没窗体,在哪弄呢?百度N久,找到如下两种解决方案 ...

  7. 控制台程序设置程序标题、图标

    控制台程序设置程序标题.图标 // An highlighted block #include <iostream> #include <windows.h> #include ...

  8. c 语言 控制台程序 行字体颜色,C# 控制台程序设置字体颜色

    这几天做了个程序,程序本身很简单.大体功能是输入查询条件,从数据库里取出结果计算并显示.但是用户的要求是使用控制台(console)来实现功能.由于功能简单,程序很快就做完了,在面向用户演示程序时,突 ...

  9. 应用程序没有个图标怎么行? Qt图标美化及打包发布

    大家好,我是程序员小哈. 我们编写了好几个Qt的程序了,每个程序都没有图标,看起来丑丑的. 而且我们编写好的程序,直接将exe拷给别人,在别人的电脑中,根本无法直接运行,辛辛苦苦编写的程序,别人用不了 ...

最新文章

  1. 2017-1-11 css3布局
  2. 《Linux内核设计与实现》读书笔记(十八)- 内核调试
  3. 选择安防交换机时需要避免哪些误区呢?
  4. python爬虫 库_七款必备的Python爬虫库,你知道几个?
  5. 配置文件管理服务器,06-配置文件管理
  6. vue的双向绑定原理:Object.defineProperty()
  7. 今天微信没有520红包 大家可以放心了!
  8. ubuntu 默认防火墙安装、启用、查看状态
  9. [LibTorch] Tensor 与 Mat 相互转换
  10. C++传入任意的函数类型作为参数
  11. 天津全国计算机等级考试报名时间2020,天津2020年计算机等级考试报名时间汇总...
  12. iOS 面试题分析(一)
  13. 神经网络入门之CNN(二)
  14. 四纵四横客运专线(高铁)
  15. JavaScript 基础知识总结归纳(一)
  16. Pixhawk---基于NSH的Firmware开发与调试
  17. babaliuliu游戏视频--选择1号角色初体验
  18. TensorFlow Object Detection API 多GPU 卡平行计算,加速模型训练速度教学
  19. 步进电机基础(2.1)- 定子相数的分类、结构、原理
  20. 实验吧Web-难-猫抓老鼠

热门文章

  1. PropertyGrid使用方法
  2. Android7.0调用系统相机拍照、访问相册问题。
  3. 最新ie图标变灰css,网站变灰的CSS代码(兼容火狐、Chrome、IE系浏览器)——w3cdream|前端学习-开发...
  4. html中加入音乐播放器,4个小时实现一个HTML5音乐播放器
  5. 高并发Redis微博点赞实战
  6. 刻盘小知识----刻盘你知道多少?
  7. Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)
  8. Go by Example 中文版: Base64 编码
  9. python输入名字-Python基础篇--输入与输出
  10. RCMTM _百度百科