简介

MFC这个东西已经落伍了,不建议使用。我就是吃饱了撑着,还在折腾这个。

平时写点带界面的小程序一般都用Qt来做,简单好用,也很容易做的比较漂亮。我觉得唯一一个算不得多大缺点的缺点就是Qt体积太大了。

之前用MFC写过几个小程序,那天看见一个介绍MFC美化的文章,就想着也给来加个皮肤。只是MFC没有像Qt的qss这么方便的东西。

网上看到一个开源的库SkinTK,就下载回来试试。

这个库不知道与CJ60Lib有什么关系,在这里下载的源码里面有一部分是来自cj60的。附上CJ60LIB的一篇编译说明http://www.cnblogs.com/icmzn/p/6724969.html

修改后的代码上传到了gitee,下载地址https://gitee.com/solym/SkinTK_VS2017

编译

编译过程倒是不难,就是有些地方需要改动一下,比较烦。

这个库依赖于Detours,来Hook与Windows窗口操作相关的一些系统函数。

Detours这个库已经微软已经开源了,下载地址https://github.com/Microsoft/Detours.git

因为它原本使用的是老版本的,不支持64位系统,所以我给替换成了最新的。

编译的时候要修改一些地方。

  • 1、针对64位的修改

    很多用到了SetWindowLongGetWindowLong以及GetClassLong的地方需要修改为SetWindowLongPtrGetWindowLongPtrGetClassLongPtr

  • 2、CMemDC的修改

    因为VC2010版本已经包含了CMemDC的实现,而这个库自己实现了一个,在使用的时候会有冲突,所以进行以下修改

// 文件 include\MenDC.h
// 类 CMemDC声明前加上
#if _MSC_VER >= 1600
#define CMemDC SkinCMemDC
#endif
否则可能出现 uafxcwd.lib(afxglobals.obj) error LNK2005: "public: virtual __thiscall CMemDC::~CMemDC(void)" (??1CMemDC@@UAE@XZ) already defined in
  • 3、修改SKINTKDLL宏定义

    因为我要编译静态库版本,所以这里SKINTKDLL宏的定义修改为空

  • 4、问题

    这里还有很多问题,我没有去解决。64位编译的结果回出现崩溃的状况,具体来说是在SetWindowLongPtr函数调用的时候出现0x5c00000000异常的问题。

    32位也有问题,不加载皮肤没有问题,加载皮肤运行一会就崩溃。

使用

具体的使用方法见使用SkinTK进行换肤

下面是使用前后的一个对比图



SkinTK编译使用的更多相关文章

  1. TODO:macOS编译PHP7.1

    TODO:macOS编译PHP7.1 本文主要介绍在macOS上编译PHP7.1,有兴趣的朋友可以去尝试一下. 1.下载PHP7.1源码,建议到PHP官网下载纯净到源码包php-7.1.0.tar.g ...

  2. Centos6.5下编译安装mysql 5.6

    一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...

  3. CENTOS 6.5 平台离线编译安装 PHP5.6.6

    一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...

  4. CENTOS 6.5 平台离线编译安装 Mysql5.6.22

    一.下载源码包 http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.22.tar.gz 二.准备工作 卸载之前本机自带的MYSQL 安装 cmake,编 ...

  5. Android注解使用之注解编译android-apt如何切换到annotationProcessor

    前言: 自从EventBus 3.x发布之后其通过注解预编译的方式解决了之前通过反射机制所引起的性能效率问题,其中注解预编译所采用的的就是android-apt的方式,不过最近Apt工具的作者宣布了不 ...

  6. Hawk 6. 编译和扩展开发

    Hawk是开源项目,因此任何人都可以为其贡献代码.作者也非常欢迎使用者能够扩展出更有用的插件. 编译 编译需要Visual Stuido,版本建议使用2015, 2010及以上没有经过测试,但应该可以 ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  9. 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~

    这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...

随机推荐

  1. Python实现进度条功能

    Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...

  2. Ext.js入门:TabPanel组件(八)

    一:TabPanel组件简介 二:简单代码示例 三:使用iframe作为tab的标签页内容 四:动态添加tabpanel的标签页 五:为tabpanel标签页添加右键菜单 方式一: <html ...

  3. jquery.Inputmask 插件用法(中文API文档)

      jquery.Inputmask 可以算是input文本输入限制的神器了,内部融合了多种输入限制, 如金额,电话号码,身份证号,网关等..,并且还可以自定义规则. inputmask 据说最早起源 ...

  4. Codeforces 1102F Elongated Matrix 状压dp

    Elongated Matrix 预处理一下两两之间的最小值, 然后直接dp. #include<bits/stdc++.h> #define LL long long #define f ...

  5. Centos 6.5安装mysql

    转载自:https://www.cnblogs.com/leffss/p/8512773.html 一.安装前准备 安装采用二进制包方式,软件包5.7.19版本下载地址:https://dev.mys ...

  6. Hat’s Words HDU1247

    一个很经典的字典树题目 先建树 再拆单词进行判断是否都在树内 因为爆内存错了很久 如果一个四十万的数组  用mamset的话会直接爆几十万的内存 所以要:用多少 初始化多少才对!( 修改了两条初始化语 ...

  7. Python2 - 基础2 - 数据类型和模块

    一.数据类型 标准数据类型(5): Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) 其中数字类型有4种: int(有符号整型) 在3 ...

  8. 20172302 《Java软件结构与数据结构》第六周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 第六周 教材学习内容总结 1.树的概述及基本概念 (1)树是一种非线性数据结构,其中的元素被组织成了一个层次结构. (2)树由一个 ...

  9. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  10. Orleans部署

    一.配置指南 1,客户端配置 2,服务端配置 3,典型配置 4,配置.NET垃圾收集 5,SQL系统存储 二.监控 1,运行时监视 2,silo错误代码监测 3,客户端错误代码监测 三.解决部署问题 ...