|
|
【参加讨论】用VC++自制王码五笔输入法安装包 :
三、创建工程并添加代码
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 #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); } } } |
编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:在线资源指导
下一篇:没有了
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
|
|
|