AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

用VC++自制王码五笔字型输入法安装包

51自学网 2015-08-30 http://www.wanshiok.com

  三、创建工程并添加代码

  1.打开Visual C++ 6.0,通过菜单“File→New”新建名为“WINWB”的“Win32 Application”工程,单击“OK”。

  2.在应用程序类型选择中选择“An empty project”,单击“Finsish”。这样我们就新建好了一个空的Win32应用程序工程。

  3.通过菜单“Project→Add to Project→New”添加一个“Resource Script”资源文件,命名为“WINWB”。

  4.通过菜单“Insert→Resource”添加一个新的Dialog资源。

  5.调整Dialog资源的若干属性。在Dialog的任意空白区域双击鼠标左键打开属性对话框,在属性对话框的Gerneral选项卡中更改ID为“IDD_MAIN”、 Caption属性为“王码五笔字型输入法安装程序”。单击Font按钮,更改字体为宋体9号(这是简体中文版XP的标准字体型号)。单击More Styles选项卡,选中Center属性,使对话框能在屏幕中居中显示。

  6.关闭属性对话框,回到资源编辑界面。删掉系统自动添加的“Cancel”按钮并更改“OK”按钮的Caption属性为“安装”。

  7.添加一个新的Static Text控件,打开属性对话框更改Caption属性为“请选择输入法版本:”。

  8.添加一个新的List Box控件,打开属性对话框更改ID为“IDC_LIST”,并更改它的Selection属性为“Multiple”。

  9.适当调整控件的大小和位置,完成资源创建(见图1)。


  10.通过菜单“Project→Add to Project→New”添加一个“C++ Source File”代码文件,命名为“WINWB”。

  11.在新添加“WINWB.CPP”文件中输入程序代码,代码如下:

#include <Windows.h>
#include "resource.h"

#pragma comment(lib, "imm32.lib")

#define IME_WINWB86 0
#define IME_WINWB98 1

BOOL CALLBACK Main_DlgProc(HWND, UINT, WPARAM, LPARAM);

LPCTSTR TranslateFileName(LPCTSTR);
void InstallIME(int);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
 DialogBox(hInstance, (LPCTSTR)IDD_MAIN, NULL, Main_DlgProc);
 return 0;
}

// 对话框IDD_MAIN的回调函数
BOOL CALLBACK Main_DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
TCHAR strWINWB86[] = "王码五笔字型输入法86版";
TCHAR strWINWB98[] = "王码五笔字型输入法98版";
TCHAR cBuf[30]; // 存放LISTBOX中ITEM文本的缓冲区
int nBuf[2]; // 存放LISTBOX中被选中的ITEM索引号的缓冲区
int nSel; // LISTBOX中被选种的ITEM的数目

switch (uMsg)
{
case WM_INITDIALOG:
 // 初始化LISTBOX
 SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)strWINWB86);
 SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)strWINWB98);
 return TRUE;

 case WM_COMMAND:
 switch (LOWORD(wParam))
 {
  // 响应“退出”按钮
 case IDCANCEL:
  EndDialog(hDlg, 0);
  return TRUE;

  // 响应“添加”按钮
 case IDOK:
  // 获取LISTBOX中被选中的ITEM的数目及索引号
  nSel = SendDlgItemMessage(hDlg, IDC_LIST, LB_GETSELITEMS, 2, (LPARAM)nBuf);

  if (nSel == 0)
  {
   MessageBox(hDlg, "请选择输入法版本!", "提示信息", MB_OK);
   return TRUE;
  }

  for (-- nSel; nSel >= 0; nSel --)
  {
   // 获取LISTBOX中该索引号对应的ITEM的文本
   SendDlgItemMessage(hDlg, IDC_LIST, LB_GETTEXT, nBuf[nSel], (LPARAM)cBuf);

   if (lstrcmp(cBuf, strWINWB86) == 0)
   {
    InstallIME(IME_WINWB86); // 安装王码五笔字型输入法86版
   }
   else if (lstrcmp(cBuf, strWINWB98) == 0)
   {
    InstallIME(IME_WINWB98); // 安装王码五笔字型输入法98版
   }
  }
  return TRUE;
 }

 default:
  return FALSE;
 }
}

TCHAR g_strFileName[MAX_PATH]; // 函数TranslateFileName用到的字符串缓冲区

// 将以Windows目录为基准的用相对路径表示的文件名转换成用绝对路径表示的文件名
LPCTSTR TranslateFileName(LPCTSTR lpszFileName)
{
 // 获取Windows目录的路径
 GetWindowsDirectory(g_strFileName, MAX_PATH);

 // 如果Windows目录的路径是根目录
 if (g_strFileName[lstrlen(g_strFileName)-1] == '//')
 {
  // 去掉路径最后的“/”
  g_strFileName[lstrlen(g_strFileName)-1] = '/0';
 }

 // 连接Windows目录路径和用相对路径表示的文件名
 lstrcat(g_strFileName, lpszFileName);
 return g_strFileName;
}

// 安装指定的输入法
void InstallIME(int nIMEType)
{
 TCHAR strWINWB86A[] = "王码五笔字型86版";
 TCHAR strWINWB86W[] = "中文 (简体) - 王码五笔字型86版";

 TCHAR strWINWB98A[] = "王码五笔字型98版";
 TCHAR strWINWB98W[] = "中文 (简体) - 王码五笔字型98版";

 HKL hKL;

 if (nIMEType == IME_WINWB86)
 {
  // 复制输入法帮助文件
  CopyFile("WINWB86.HLP", TranslateFileName("//HELP//WINWB86.HLP"), FALSE);
  CopyFile("WINWB86.CHM", TranslateFileName("//HELP//WINWB86.CHM"), FALSE);
  CopyFile("WINWB86.CNT", TranslateFileName("//HELP//WINWB86.CNT"), FALSE);

  if (GetVersion() < 0x80000000) // NT/2000/XP系统
  {
   // 复制UNICODE版输入法文件
   CopyFile("WINWB86W.IME", TranslateFileName("//SYSTEM32//WINWB86.IME"), FALSE);
   CopyFile("WINWB86W.MB", TranslateFileName("//SYSTEM32//WINWB86.MB"), FALSE);

   // 安装UNICODE版输入法
   hKL = ImmInstallIME(TranslateFileName("//SYSTEM32//WINWB86.IME"), strWINWB86W);
  }
  else // 9X/ME系统
  {
   // 复制ANSI版输入法文件
   CopyFile("WINWB86A.IME", TranslateFileName("//SYSTEM//WINWB86.IME"), FALSE);
   CopyFile("WINWB86A.MB", TranslateFileName("//SYSTEM//WINWB86.MB"), FALSE);

   // 安装ANSI版输入法
   hKL = ImmInstallIME(TranslateFileName("//SYSTEM//WINWB86.IME"), strWINWB86A);
  }

  // 验证输入法句柄是否有效
  if (ImmIsIME(hKL))
  {
   MessageBox(NULL, "安装王码五笔字型输入法86版成功!", "提示信息", MB_OK);
  }
  else
  {
   MessageBox(NULL, "安装王码五笔字型输入法86版失败!", "提示信息", MB_OK);
  }
 }
 else if (nIMEType == IME_WINWB98)
 {
  CopyFile("WINWB98.HLP", TranslateFileName("//HELP//WINWB98.HLP"), FALSE);
  CopyFile("WINWB98.CHM", TranslateFileName("//HELP//WINWB98.CHM"), FALSE);
  CopyFile("WINWB98.CNT", TranslateFileName("//HELP//WINWB98.CNT"), FALSE);

  if (GetVersion() < 0x80000000)
  {
   CopyFile("WINWB98W.IME", TranslateFileName("//SYSTEM32//WINWB98.IME"), FALSE);
   CopyFile("WINWB98W.MB", TranslateFileName("//SYSTEM32//WINWB98.MB"), FALSE);
   hKL = ImmInstallIME(TranslateFileName("//SYSTEM32//WINWB98.IME"), strWINWB98W);
  }
  else
  {
   CopyFile("WINWB98A.IME", TranslateFileName("//SYSTEM//WINWB98.IME"), FALSE);
   CopyFile("WINWB98A.MB", TranslateFileName("//SYSTEM//WINWB98.MB"), FALSE);

   hKL = ImmInstallIME(TranslateFileName("//SYSTEM//WINWB98.IME"), strWINWB98A);
  }
  if (ImmIsIME(hKL))
  {
   MessageBox(NULL, "安装王码五笔字型输入法98版成功!", "提示信息", MB_OK);
  }
  else
  {
   MessageBox(NULL, "安装王码五笔字型输入法98版失败!", "提示信息", MB_OK);
  }
 }
}

  四、制作安装包

  在菜单“Build→Set Active Configuration”设置工程配置为“Win32 – Release”,然后进行编译、连接。将编译、连接后生成的可执行文件/Release/winwb.exe与前面提取出来的14个王码五笔字型输入法文件放在同一目录中,我们的王码五笔字型输入法全自动安装程序就完成了。但作为一个小功能程序,需要携带15个文件,未免有些不太方便。同时也为了使我们的程序看上去更专业点,我们可以使用一些压缩软件或者安装包制作工具来将它制作成一个单一文件的软件安装包,这样也可以方便携带和使用。

  这里推荐使用Windows 2000/XP自带的一个安装包制作工具——IExpress,它采用微软的CAB压缩文件格式,能生成自解压缩文件,是一款小巧、免费的安装包制作工具。

  具体制作步骤如下:

  1.在开始菜单的运行中键入“iexpress”,单击确定打开IExpress程序。

  2.保持默认选项“Create new Self Extraction Directive file”,单击“下一步”继续。

  3.保持默认选项“Extract files and run an installation command”,单击“下一步”继续。

  4.进入“Package title”界面,在编辑框中输入“解压缩文件”,这是将生成的安装包解压缩时出现的对话框的标题栏,可以随意设定。输入完成后单击“下一步”继续。

  5.保持默认选项“No prompt”,单击“下一步”继续。

  6.保持默认选项“Do not display a license”,单击“下一步”继续。

  7.进入“Packaged files”界面,单击“Add”按钮,在打开文件对话框中选中王码五笔字型输入法安装程序的所有15个文件,单击“下一步”继续。

  8.进入“Install Program to”,在“Install Program”下拉式组合框中选中“WINWB.exe”,单击“下一步”继续。

  9.保持默认选项“Default(recommended)”,单击“下一步”继续。

  10.保持默认选项“No message”,单击“下一步”继续。

  11.进入“Package Name and Options”界面,单击“Browse”按钮选择安装包存放位置和文件名。这里仍然使用“WINWB.EXE”。注意使用这个文件名时不要将安装包放在安装程序所在目录,以免和我们制作的安装程序WINWB.exe重名。单击“下一步”继续。

  12.进入“Configure restart”界面,选中“No restart”,单击“下一步”继续。

  13.进入“Save Self Extraction Directive”界面,选中“Don't save”,单击“下一步”继续。

  14.进入“Create package”界面,单击“下一步”完成设置工作并开始制作安装包。

  15.单击完成结束安装包制作。

  现在,王码五笔字型输入法安装包就算制作完成了。本程序在Windows XP Profession(SP1)简体中文版、Visual Studio 6.0(SP6)英文企业版下调试通过。在Windows 98 SE简体中文版下运行通过。

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:VC++6.0实现视频数据实时获取的探讨  下一篇:VC++中查找/替换对话框的使用