⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9916.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 2 页
字号:
===========================================================

                         《编 程 技 术》

               一份属于广大编程爱好者的电子杂志

             这是一份完全关于探讨编程的免费电子杂志
             您可以任意传播本刊,但必须保持它的完整
            本刊承诺绝不向订户发送任何形式的垃圾邮件!
===========================================================     
            第16期 99/07/11        本期发送数: 2281 
===========================================================

◆本期栏目◆
 *刊首语*
 *技术文档*
    在VC 5.0中实现基于MFC的组件的本地化
    C++Builder如何响应消息及自定义消息
    用Delphi制作欢迎屏幕
    用VB实现拖放功能
    开机,自动更换墙纸
    自解密的加密程序的制作
 *服务台*
    推荐两个网站
 *疑难杂症*

***********************************************************

◆刊首语◆
    
    本刊的“疑难杂症”栏目已经推出好几期了,前来提问的人数
也一期比一期多,可是遗憾的是来解答的人数寥寥无几,我不知道
有多少提问的朋友得到了回答,但我可以肯定是少数。我相信订阅
本刊的朋友中一定藏龙卧虎,不乏高手在,希望大家都能不吝赐教,
该出手时就出手,风风火火来答疑。
    我并不希望该栏目成为鸡肋,但这全仰仗各位高手,别忘了如
果您能回答该栏目所提出的问题的话,别忘了在第一时间发给我一
份,谢谢您的大力相助。

***********************************************************
***********************************************************

◆技术文档◆

              在VC 5.0中实现基于MFC的组件的本地化 
 
    Visual C++(以下简称VC)是微软公司的Visual 系列软件开发工具 
 之一。对非英语地区的程序员,不可避免地要解决软件的本地化问题 
 。VC 本身就支持多语种编程,给本地化带来了极大的方便。这里我们 
 主要讨论基于 MFC 的组件的本地化。 
     要实现那些使用 MFC 的组件的本地化,需要解决下面两个问题。 
     组件本身的本地化 
     第一问题是,要实现组件本身的一些特殊资源的本地化,例如字符 
 串、对话框等等。由于大多数在 MFC 基础上构架的组件也包含和使 
 用了一部分由 MFC 定义的资源,所以必须同时本地化这些 MFC 资源 
 。幸运的是,MFC 本身已提供了多种语言的本地化版本,它们包括:汉 
 语、德语、西班牙语、法语、意大利语、日语和韩国语。存在于VC光 
 盘中相应的 \DevStudi\ VC\MFC\[src|include]\l.xxx\ 目录下," l 
  "代表"本地化"的意思,"l.chs"即代表简体中文。将这些目录下的* 
 .rc 文件拷入硬盘中相应的目录即可。当应用程序与MFC之间采用静 
 态链接的模式时应采用该方法,但它只在VC 5.0的专业版与企业版中 
 才支持。 
     大多数的应用程序与MFC之间采用动态链接的方式,这时在Win95 
 的system目录下必须有相应的MFC 资源 DLL 文件的本地版本——MFC 
 4xLOC.DLL(Pwin95 OEMSR2版本提供的是MFC0 LOC.DLL)。将VC光盘的 
 目录 \DevStudio\VC\Redist 中的文件:MFC42xxx.DLL 拷贝入Pwi95 
 的system目录下,并更名为:MFC42LOC.DLL即可(其中MFC42CHS.DLL即 
 代表简体中文版的资源 DLL 文件)。拷入前除了要解决同名DLL相覆 
 盖的版本问题外,还应注意以下两方面的内容 
     首先,不应该在英文版的系统(如英文 Win95)上安装 MFC4xLOC.D 
 LL。因为英文版的资源文件代码已内建于MFC4x.DLL 中,应用程序从M 
 FC4x.DLL 中载入代码的速度比从 MFC4XLOCD LL 中先搜寻再载入代 
 码的速度要快得多。 
     其次,由于有多个版本的 MFC4xLOC.DLL ,在VC光盘的目录 \DevS 
 tudio\VC\Redist 中可同时找到如:MFC4xCHS.DLL——简体中文版本 
 、MFC4xDEU.DLL——德国版本、MFC4xESP.LL——意大利版本等等。 
     所以在安装之前,应先确定所安装的MFC4xLOC.DLL 的本地版本代 
 号与所使用的Window 系统是否相一致,例如:只有MFC42CHS.DLL 才能 
 安装在 Pwin95 的系统上。 
     需要指出的是,以上的方法会给应用程序的安装带来一定的复杂 
 性,因为用户的系统下可能会安装多种本地化版本的应用程序。例如: 
 支持简体中文;后来又装了一个日文版的软件而链接库文件MFC4xLOC. 
 DLL 只有一个,若后者覆盖了前者,应用程序运行时就会发生资源链接 
 出错。所以我们建议采用另一种方法,即建立自己的本地版本的MFC 
 资源 DLL 文件,而不是直接调用MFC4xLOC.DLL 文件,该方法后面会继 
 续分析。 
     处理代码 
     第二个问题是,应处理好各组件本地化资源的代码,使之能良好地 
 运行于目标环境。大多数情况下,这依赖于应用程序对字节的高位及 
 双字节字符的处理能力。在缺省情况下,MFC对它们直接支持。 
     所以,本地化应用程序和DLL实质上只需用本地语言改写相应的资 
 源即可。如果C++源代码中不带有需要本地化的字符串或正文,那么只 
 需对资源文件作修改。实际上,用户可以实现自己的组件,这样无须重 
 建原始代码即可获得本地版本。这或许很复杂,但很值得,MFC本身也 
 采用这种技术。可打开资源文件编辑器直接用本地语言进行编辑,但 
 这样每次版本的升级都需对应用程序进行重建。 
     注意:VC 4.0或以后的版本直接支持多种语言的.RC文件。 
     避免这样做的一种方法就是建立一个分离的DLL并对其进行本地 
 化,该 DLL 有时也叫做"卫星式 DLL"。在程序运行期间它将被动态地 
 进行链接,此时资源将从这个"卫星式 DLL"载入,而不是从代码的主模 
 块载入。MFC 直接支持这种方法,MFC4xLOC.DLL 本身就是一个本地化 
 的"卫星式 DLL",只不过是在缺省状况下是由 MFC 提供的。我们可以 
 建立一个自己的"卫星式 DLL",如有一名为MYAPP.EXE 的应用程序,它 
 的所有资源全来源于一个叫做 MYRES.DL 的文件。这些都在其应用程 
 序的InitInstance 事件中完成,如下所示: 
     CMyApp::InitInstance() 
     { 
       // 初始化代码的开始部分 
       HINSTANCE hInst = LoadLibrary("myres.dll"); 
       if (hInst != NULL) 
         AfxSetResourceHandle(hInst); 
         // 以下是其它初始化代码 
       . 
       . 
       . 
     } 
     这段代码执行后,MFC 将从 MYRES.DLL 中载入资源,而不是直接 
 从 MYAPP.EXE 中载入。 
     建立一个单一的资源DLL文件并不难。先建立一个 DLL 项目文件 
 ,并加入.RC文件和其他必要的资源,然后在链接器(Linker)的参数里 
 增加一个 "/NOENTRY"参数即可。这个参数告诉链接器该 DLL 没有接 
 入点,因为资源 DLL 文件没有代码。 
     另外,若应用程序以 Win32 Release 的方式建立(即EXE 文件中 
 不嵌入调试代码),则还需完成以下步骤。在工程文件里,打开菜单 Pr 
 ojects/settings... ,分别选中c/c++ 页和R esources页,将其中的 
 参数[ /D "_AFXDLL"]去掉(它一般由 AppWizard 自动生成)。该参数 
 指定只从 MFC 的共享 DLL 文件中载入资源,而并不定义其他的资源 
 来源,这样用户自己建立的资源 DLL 文件将不起作用。 
  最后,由于AppWizard 是VC++的一大特色,VC++ 允许在使用AppWi 
 zard 创建基于MFC的应用程序框架时就可以选择不同的语言,直接生 
 成本地化的程序框架。其中日文、韩文与简体中文,由于需要支持双 
 字节版本的操作系统,所以在缺省情况下,与这三种远东语言相对应的 
 MFC AppWizard DLLs并没有被VC 5.0的安装程序装入硬盘。因此,在 
 应用程序生成向导的第一页下拉式列表框中,找不到这些语言条目,但 
 可以在VC光盘的 \DevStudio\SharedIDE\Bi\ IDE 目录中找到: 
     语言                AppWizard DLL 
     ----------------------------------- 
     日文        ----    APPWZJPN.DLL 
     韩文        ----    APPWZKOR.DLL 
     简体中文    ----    APPWZCHS.DLL 
     在简体中文Pwin95下,只需将相应的APPWZCHS.DLL 文件从VC光盘 
 拷贝入硬盘的 \DevSu dio\SharedIDE\Bin\IDE 目录下即可。这时," 
 简体中文"这一条目就会出现在应用程序生成向导的第一页下拉式列 
 表框中
     这样,AppWizard 生成的应用程序框架将自动包含简体中文的菜 
 单、标题、状态栏等。我们将框架程序编译链接,运行后将会看到一 
 个漂亮的全中文界面。 
     所以,用VC制作简体中文的软件非常方便,感兴趣的朋友可以继续 
 查看VC帮助系统,以获得更多的信息。
 
***********************************************************

               C++Builder如何响应消息及自定义消息  
   
    Inprise(Borland) C++Builder中,可以象在Delphi中一样响应消息,
只是看起来要稍复杂一点。 

对于系统已定义的消息,可以直接响应: 

#define WM_MY_OPEN_CMDLINE_FILE (WM_USER+1) //进程间通讯的自定义消息 
#define WM_MY_SEARCH_NODE (WM_USER+2) //查找命令的自定义消息 

class TSomeForm : public TForm 
{ 
//...类中的其它代码 
protected: 
//消息的响应过程 
void __fastcall OpenCmdLineFile(TMessage Message); 
void __fastcall SearchDocumentNode(TMessage Message); 
void __fastcall GetWindowMinMaxInfo(TWMGetMinMaxInfo Message); 

//以下通过宏定义实现消息的正确响应 
BEGIN_MESSAGE_MAP 
MESSAGE_HANDLER(WM_MY_OPEN_CMDLINE_FILE, TMessage, OpenCmdLineFile) 
MESSAGE_HANDLER(WM_MY_SEARCH_NODE, TMessage, SearchDocumentNode) 
MESSAGE_HANDLER(WM_GETMINMAXINFO , TWMGetMinMaxInfo, GetWindowMinMaxIn 
fo) 
END_MESSAGE_MAP(TForm) 

};//end class 

//以下为实现代码 
void __fastcall TSomeForm::OpenCmdLineFile(TMessage Message) 
{//直接通过消息结构传递参数 
LPSTR lpCmdLine=(LPSTR)Message.LParam;//从Message中取得参数 
this->HandleCmdLineFile(lpCmdLine);//处理命令行的参数 
return; 
} 

void __fastcall TSomeForm::SearchDocumentNode(TMessage Message) 
{//响应查找消息 
//Message中的参数在此处不需要。 
this->SearchNode(); 
return; 
} 

void __fastcall TSomeForm::GetWindowMinMaxInfo(TWMGetMinMaxInfo Messag 
e) 
{//设置主窗口的最小尺寸 
MINMAXINFO *MinMaxInfo=Message.MinMaxInfo; 
MinMaxInfo->ptMinTrackSize.x=400; 
MinMaxInfo->ptMinTrackSize.y=300; 
return; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -