TypeCodes

图文实例说MFC制作工具的心得(二)

继前文《图文实例说MFC制作工具的心得(一)》,这篇文章继续写几点心得。

1 如何将CString转换成char *指针

由于异或的时候可以直接调用《十六进制字符串异或》一文中的十六进制字符串异或方法void hexstrxor(char * HexStr1, char * HexStr2, char * HexStr)

但是Edit Control控件添加变量HexStr1HexStr2都是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。”的情况。

计算机丢失mfc120.dll

这是由于该电脑没有VC运行库,所以在项目属性中需要设置MFC的使用在静态库中使用MFC,这样就能在其它win系统上运行了。

在静态库中使用MFC

3 鼠标显示生成的可执行exe文件的相关信息

把使用“Release”生成的可执行文件HexStrXor.exe放到桌面上,然后鼠标移至该文件上,会发现如下图所示的信息说明:

mfc鼠标显示可执行exe文件的相关信息

这个主要是通过“资源视图”——“Version”——“VS-VERSION-INFO”实现的:

mfc设置鼠标显示可执行exe文件的相关信息

4 修改可执行文件默认的MFC图标

在当前VS2013的解决方案下的工程目录下面,可以看到一个res文件夹,里面就有一个MFC默认的ico图标。把自己制作的喜欢的ico图标替换,然后重新生成解决方案,这样就将生成的可执行文件HexStrXor.exe图标改成自己的了。我用的是自己博客的ico图标,绿色的TC两个字母,TypeCodes的含义,哈哈!

5 结语

还是那句话:整个项目已经托管在GithubCoding上了,也可直接点击这里下载这个工具,最后欢迎大家拍砖!

打赏支持

Comments »