继前文《图文实例说MFC制作工具的心得(一)》,这篇文章继续写几点心得。
1 如何将CString转换成char *指针
由于异或的时候可以直接调用《十六进制字符串异或》一文中的十六进制字符串异或方法void hexstrxor(char * HexStr1, char * HexStr2, char * HexStr)
。
但是Edit Control
控件添加变量HexStr1
、HexStr2
都是CString类型,所以需要转换。由于项目的字符集是使用多字节字符集
,所以可以通过(LPSTR)(LPCTSTR)CString
方法强制将CString数据转换成char *指针类型,这样就可以直接调用了hexstrxor((LPSTR)(LPCTSTR)HexStr1, (LPSTR)(LPCTSTR)HexStr2, HexStrXorResult);
。
下面是当用户点击“进行异或”按钮这个控件所触发事件的处理代码,也就是异或的主要过程。异或后会同时更新所有Edit Control
控件对应的字节数,同时释放保存异或结果时所开辟的内存:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 | void CHexStrXorDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
//定义长度
int iHexStr1Len, iHexStr2Len, iHexStrLenHigh;
//大写转换并求长度
HexStr1.MakeUpper();
HexStr2.MakeUpper();
iHexStr1Len = HexStr1.GetLength();
iHexStr2Len = HexStr2.GetLength();
//获取最大长度
iHexStrLenHigh = iHexStr1Len > iHexStr2Len ? iHexStr1Len : iHexStr2Len;
//为异或结果开辟内存
char * HexStrXorResult = (char *)malloc(sizeof(char)*iHexStrLenHigh+1);
//调用异或方法
hexstrxor((LPSTR)(LPCTSTR)HexStr1, (LPSTR)(LPCTSTR)HexStr2, HexStrXorResult);
//显示异或结果
HexStr = HexStrXorResult;
//更新静态控件1的长度
CString UpdateHexStrLen;
UpdateHexStrLen.Format("%s%d%s", "字节=[", HexStr1.GetLength(), "]");
//SetDlgItemText(IDC_STATIC_STR1, UpdateHexStr1Len );
GetDlgItem(IDC_STATIC_STR1)->SetWindowTextA(UpdateHexStrLen);
//更新静态控件2的长度
UpdateHexStrLen.Format("%s%d%s", "字节=[", HexStr2.GetLength(), "]");
//SetDlgItemText(IDC_STATIC_STR2, UpdateHexStr2Len );
GetDlgItem(IDC_STATIC_STR2)->SetWindowTextA(UpdateHexStrLen);
//更新静态控件3的长度
UpdateHexStrLen.Format("%s%d%s", "字节=[", iHexStrLenHigh, "]");
//SetDlgItemText(IDC_STATIC_STR, UpdateHexStrLen );
GetDlgItem(IDC_STATIC_STR3)->SetWindowTextA(UpdateHexStrLen);
//更新所有控件数据
UpdateData(FALSE);
//释放内存
free(HexStrXorResult);
HexStrXorResult = NULL;
}
|
2 使用“Release”生成可执行文件后,无法在其它电脑上运行
在vs2013中调试完程序后,依次点击“配置管理器”--“Release”,然后重新生成整个项目。接着将Release文件夹下面的HexStrXor.exe文件放到其它电脑上,结果一运行时出现“无法启动该程序,因为计算机丢失mfc120.dll。”的情况。
这是由于该电脑没有VC运行库,所以在项目属性中需要设置MFC的使用
为在静态库中使用MFC
,这样就能在其它win系统上运行了。
3 鼠标显示生成的可执行exe文件的相关信息
把使用“Release”生成的可执行文件HexStrXor.exe放到桌面上,然后鼠标移至该文件上,会发现如下图所示的信息说明:
这个主要是通过“资源视图”——“Version”——“VS-VERSION-INFO”实现的:
4 修改可执行文件默认的MFC图标
在当前VS2013的解决方案下的工程目录下面,可以看到一个res
文件夹,里面就有一个MFC默认的ico图标。把自己制作的喜欢的ico图标替换,然后重新生成解决方案,这样就将生成的可执行文件HexStrXor.exe图标改成自己的了。我用的是自己博客的ico图标,绿色的TC
两个字母,TypeCodes的含义,哈哈!
5 结语
还是那句话:整个项目已经托管在Github和Coding上了,也可直接点击这里下载这个工具,最后欢迎大家拍砖!
Comments »