博文

如何修改exe文件图标(2009-02-10 13:24:00)

摘要:转了一个“如何修改exe文件图标”的方法。只有一个函数,非常方便。

#include 《stdio.h》
#include 《windows.h》
#include 《tchar.h》

struct ICONDIRENTRY
{
    BYTE bWidth;
    BYTE bHeight;
    BYTE bColorCount;
    BYTE bReserved;
    WORD wPlanes;
    WORD wBitCount;
    DWORD dwBytesInRes;
    DWORD dwImageOffset;
};


struct ICONDIR
{
    WORD idReserved;
    WORD idType;
    WORD idCount;
    //ICONDIRENTRY idEntries;
};


struct GRPICONDIRENTRY
{
    BYTE bWidth;
    BYTE bHeight;
    BYTE bColorCount;
    BYTE bReserved;
    WORD wPlanes;
    WORD wBitCount;
    DWORD dwBytesInRes;
    WORD nID;
};

stru......

阅读全文(19817) | 评论:4

任意环境下显示中文信息的资源处理(2009-02-10 12:05:00)

摘要:1. 多国语言编程之资源转换问题
      不同国家的人使用着不同语言的操作系统。在Microsoft Windows下,语言用代码页来识别,不同语言用不同代码页来表示,如"简体中文"用代码页936表示,而"美国英语"则用代码页1252表示。    在用Visual C++开发应用程序时,与语种相关信息一般存储在资源文件(*.RC文件)中,因此,要编制不同语种应用程序(如中文应用程序、英文应用程序),实质上是要求编写出不同语种的资源文件。在实际编程中,我们可将不同语种的资源文件编译成相应的动态连接库。这样,在使用时,可根据操作系统所使用代码页异同,选用由相应语种的资源文件编译而成的动态连接库,即可使应用程序正常运行。这就是所谓的多国语言编程问题。    在开发中文应用程序时,常要求应用程序在中文操作系统和英文操作系统+外挂汉字平台这两种环境中都能正常运行。但由于工作环境不同,往往导致同一应用程序,在某种环境下能正常工作,在另一种环境下则不能正常工作。如中文版的Microsoft Word软件, 在中文操作系统下能正常运行,但在英文操作系统+外挂汉字平台这种环境下,显示的就是一堆乱码。    要解决这一问题,需为不同语种操作系统编制不同语种资源文件,实际上这也是多国语言编程问题。所不同的是,由于此时所显示信息并不需随语种而变(无论在哪种环境下都只显示中文信息),因此,编制多个语种资源文件可以有很简单的方法,此即本文所要讨论的资源转换问题。该问题可简单地描述为:如果已有了某一语种的资源文件,在资源内容不变的情况下,如何将其转换为另一语种的资源文件。例如,已有了简体中文(代码页为936)的资源文件,在资源内容不变的情况下,如何将其转换为美国英语(代码页为1252)的资源文件。       2. 如何进行资源转换    下面以将资源文件从代码页936(简体中文)转换到代码页1252(美国英语)为例进行说明。    容易想到但会带来灾难性后果的方法是,直接修改资源属性。这种方法过程是将Vis ual C++的W......

阅读全文(1828) | 评论:0

vc 国际化的资源文件处理(2009-02-10 11:27:00)

摘要:vc 国际化的资源文件处理- -   MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本。在不同语种的Windows平台上应该运行相应语种的应用程序。也就是说程序的用户界面(如菜单、对话框、状态条)中的提示文字应该使用和Windows操作系统所使用的语种一致。当然英语用户界面的程序可以运行在其它语言平台上,但比较复杂的程序或多或少都有问题,如对话框的尺寸不对,特殊的ASCII字符显示为文字,输入字符串可能会导致死机等。如果不一致却还想使用,则需要动态翻译软件。例如,在英文Windows平台上运行中文版的MS Office就需要像中文之星或四通利方这样的中文动态翻译软件。   当前国内使用的MS Windows在语种上划分主要有简体中文版和英文版两种。为了让开发的软件能在这两种平台上使用,提出了三种解决方案:第一种解决方案是仅编写中文界面的程序。在中文Windows上程序可以运行(这里的运行是指程序界面不出现乱码),在英文Windows上依靠中文之星或四通利方这样的中文动态翻译软件也可以运行。第二种解决方案是针对中文版和英文版各编一个程序,即在第一种方案的基础上增加了英文版,这样做有两点好处:一是英文Windows平台上运行英文版的软件比英文Windows平台上运行中文版的软件稳定,因为没有像中文之星或四通利方这样的中文动态翻译软件的参与。第三种解决方案是自动根据操作系统的语种选择相应的界面语种。也就是说,同一个软件在中文Windows上显示中文界面,在英文Windows上显示英文界面。这种方案相对于第二种方案的好处在于:程序不用做英文版和中文版两个版本,只要一个版本就可以了,对于用户来说是很方便的。在这三种方案中,前一种是后一种的基础,后一种实现了,前一种也就已经实现了。下面将从易到难介绍三种方案实现的步骤和要点。   解决方案一、自动生成中文界面框架   Visual C++6.0版本中可以使用APPWIZARD自动生成具有基本中文界面的WIN32应用程序。使用APPWIZARD时,在自动生成的第一个步骤中,将资源类型选择为简体中文就可以了,可参见图1。其余选项都不涉及语种问题,根据应用程序的具体情况进行选择即可。然后在此基础上作进一步的软件开发工作。   如果你在一边读文章一边上机......

阅读全文(5397) | 评论:0

Alt键才能显示模态对话框,超级奇怪!(2009-02-09 15:09:00)

摘要:     程序很简单,有一个用于显示OpenGL图形的View窗口,并且采用了定时器来继续动画显示。这个时候,点击一个菜单项,弹出一个模态对话框。但此时,看不到对话框,按住alt键才能弹出。

我查阅了很多网上的帖子,也有类似的人碰到了这个问题,但依然没有解决,参考如下:

http://topic.csdn.net/t/20060808/10/4934103.html#Top

http://www.experts-exchange.com/Programming/Game/3D_Prog./Q_20523737.html http://topic.csdn.net/t/20030626/17/1961649.html 后来,发现原来是自己处理动画时不当,把 CPU的资源都耗光了,于是出现这样的问题。现在经过对程序的优化,问题已经解决。......

阅读全文(2526) | 评论:1

命令提示符八大技巧(转摘自山水天下)(2009-02-09 14:52:00)

摘要:相信大部分人已经熟悉了微软的Windows操作界面,然而并不是所有的功能都必须借助它才能实现, 因此即便在Windows 2000与Windows XP里仍然保留了类似DOS的命令窗,当然它们与以往Windows 9x版本下的命令窗口有许多不同,因而也有许多特别的应用技巧,我们不妨一同来看一看。

  点击“开始→程序→附件→命令提示符”或“开始→运行”,再输入“CMD”进入命
令即可提示符状态。

  1、巧用自动记忆功能

  命令窗具有命令记忆功能,您在窗口中输入的所有命令行都会被自动记忆下来,通过点击键盘上的上下方向键就可以把刚输入的命令逐一调取出来,类似于DOS中的DOSKEY指令,只不过它把这条指令内置于命令窗口中了。这种记忆功能可以免除您反复输入相同指令的痛苦,对于网络环境的调试尤其有用,可以为您节省大量重复劳动和宝贵时间。

  2、趣味提示符

  你会想象到让你的命令提示符变成当前时间吗?能显示当前Windows XP版本号吗?只要你想就能实现。下面我们就来教大家怎么实现。

  在这里我们借助的是一个prompt的DOS命令,该命令有很多实用的参数,详细参数作用请读者在提示符状态运行prompt/?来查阅。了解了这些参数的作用之后,就可以在安装路径下建立一文件,将其命名为run.bat,该文件夹中的内容为prompt $V$D$G$G。接下来打开注册表编辑器,依次浏览到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\,然后双击右侧的AutoRun键值,将其修改为%systemroot%\run.bat,保存设置退出。重新打开命令提示符,怎么样是不是有了变化。其实只要你根据prompt的参数就可以自行定义非常丰富的提示符文字。

  3、复制窗口内容

  字符串的拷贝对于命令窗来讲相当有用。但Windows 2000与Windows XP的命令提示符的拷贝方式与以前版本有较大差异,即使二者之间也并不相同,前者是采用标记复制法,而后者则直接采用鼠标右键点击的复制法。具体描述如下:

  在Windows XP里,对于全部内容,您可以直接点击鼠标右键中的“全选”来选定,而......

阅读全文(1875) | 评论:1

(转)VC程序在没装VC的机器中运行(2009-02-09 14:41:00)

摘要:http://blog.pfan.cn/miaowei/36283.html   由于工作需要,经常需要演示。我们是一个专门搞研究开发的公司,主要是利用C和C++做开发。一些研究成果需要经常演示给总部的人看。演示的时候一般都是带一台笔记本去,而这笔记本一般是没有装过VC,也没有装VS.net的,而在演示的时候,我们有些程序是用VC6.0,有些程序是VS.NET2003, 有些程序还是用VS.net 2005做的。这里就总结一下用C和C++开发的程序如何在没有装VC的机器里运行。 一 VC 6.0和VS.NET 2003的程序 对于VC 6.0和VS.NET 2003编写的程序,需要调用的DLL主要有三个,对于VC6.0来说,只要将以下三个DLL拷到exe文件同目录下,则exe则可以在没装VC6.0的机器中运行. MFC42D.DLL MFCO42D.DLL MSVCRTD.DLL 这是针对Debug程序,对一般程序,应该是 MFC42.DLL MFCO42.DLL MSVCRT.DLL 对于用VS.NET 2003编写的程序,也分Debug和一般的 分别是: Debug: mfc71d.dll          msvcp71d.dll            msvcr71d.dll 一般: mfc71.dll             msvcp71.dll              msvcr71.dll 只要将这三个DLL加入到工程的目录中,在没装VS.NET 2003的机器中也能运行EXE文件。   二  VS.NET 2005写的程序 对于VS.NET 2005写的程序,和前面两种情况有点区别。这是因为VS.NET 2005下处理DLL的方式......

阅读全文(2612) | 评论:0

一个MFC Extension DLL的Dialog例子(2009-02-09 13:39:00)

摘要:下面一个MFC Extension DLL的例子,及调用对话框资源文件失败解决方法
来源于:http://www.dotnetheaven.com/Uploadfile/mahesh/MFCExtensionDLL05192005030337AM/MFCExtensionDLL.aspx?ArticleID=d3bf0587-453d-4449-a524-89840fa12cf6

这是个老外写的例子,挺不错的,有学习的意义!特别要注意加粗字段,就是有时候问题所在!


Create Skeleton of the Dll

Use MFC AppWizard to create an extension dll's skeleton



Select MFC Extension Dll



Click Finish. As you see on this dialog, Main Source code in mcExtnDll.h and cpp



Adding Dialog Resource

Add a new dialog by using ResourceView. Add three edit controls, three static controls and two buttons. Now dialog should look like this:



Make sure to check Number style of all three edit controls.



Adding Dialog Class

Now Add a new class CmcDlg derived from CDialog by using Insert->New Class menu from your main menu. Make sure the Dialog ID is IDD_DIALOG1, your dialog's resource ID.



Now write click handler for Ad......

阅读全文(6351) | 评论:0

你可能还不熟悉的VC6.0 IDE(2009-02-09 09:54:00)

摘要:1、常见的VC快捷键,但你可能不知道的   Ctrl + z Ctrl + y  前进后退功能   Alt + g 快速进入函数实现和定义     Ctrl+F2 添加/删除书签     F2 到下一个书签     Shift+F2 到上一个书签   Alt+F2  编辑和修改书签(永久书签)   Ctrl+F2 编辑和修改书签(临时书签,当文件关闭后,书签就无效了)     Alt+f9   代码编辑进入断点处   Ctrl + Shift + F9 删除所有的断点     F12 快速进入函数定义   Shift + F12 快速进入函数声明(注意,有时不同类里的函数会重名,那么可以先选中前面的类名和函数名,如选中:CVolume::OnMouseMove)     F4 查看编译错误   Shift + F4回到上一个编译错误处     Ctrl + Shift + } 选中大括号之间的东西   Ctrl + } 可以找到匹配的{ }   Shift + F9  quickwatch     Ctrl + del  删除后边的一个词   Ctrl + backspace 删除前边的一个词  类似于Ctrl+左右箭头   Ctrl + l 快速剪切一行  类似于删除  还可以粘贴   Ctrl + Shift + l 快速删除一行   Ctrl + t 光标处的数据类型   Ctrl + Alt + t 显示成员函数  一般写一个对象,然后.或者->都可以使用这个   Ctrl + Shift + space 显示函数参数信息 注意光标必须在函数括号内)   Ctrl (+Shift) + u 大小写   Ctrl+f10 运行到光标处   &nbs......

阅读全文(4321) | 评论:0

CString的GetBuffer(2009-02-07 20:41:00)

摘要:首先举个例子。   CString   s(   "abcd"   );  
  int   len=s.GetLength();  
  LPTSTR   p   =   s.GetBuffer(   5   );  
  strcpy(   p,   "Hello"   );    如果你需要修改 CString 中的内容,它有一个特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一个可写的缓冲指针。 如果仅仅是读出CString中的内容,那么只需要用GetBuffer(0)即可。如果后面对CString还有其他操作,那么立刻ReleaseBuffer。 其他:
GetBuffer() 他會create出所指定大小的空間出來 這個空間是可以讓我們修改的
很多時候 有的 API 會要一個(char*)的指標作為輸出
如果我們就因為這樣去產生一個(char*)的buffer 給他 等到資料取出來之後
便無法使用CString 的種種方便功能
因此 比較好的做法 便是用GetBuffer()來產生一個buffer空間給他
等到取出來之後 我們便可以直接使用CString來對他操作
GetBuffer() 使用完後 最好是呼叫一下ReleaseBuffer()做為結束 雖然小弟的網誌之前已經有很多GetBuffer()的使用了 不過還是附個範例
      CFile file;
      // FILE_NAME 為事先定義好的檔案名稱
      if(file.Open(FILE_NAME,CFile::modeRead))
      {
        CS......

阅读全文(11627) | 评论:0

分解CString(2009-02-07 17:31:00)

摘要:使用MFC进行编程,自然会用到CString,将几个CString、Char、Int、Float变量连接起来组成一个新的CString的方法大家肯定都很熟悉,自然是CString.Format。可是怎么进行逆操作呢?
下面来个case-study吧。
代码需求:一个长字符串Str0,其格式是“str1 str2 str3 str4...”(以“str1 str2 str3”为例),需要分解到对应的CString变量中。

一看到这个需求,大家肯定都心中有代码了,呵呵,先别急,看看有没有简便一些的做法。
 sscanf(Str0, "%s %s %s", Str1.GetBuffer(), Str2.GetBuffer(), Str3.GetBuffer());

如何?是不是很easy?不过要注意做异常处理哦,呵呵
......

阅读全文(2146) | 评论:0