仿制金山毒霸专杀工具界面

恋爱子宫

恋爱子宫

2016-01-29 11:52

仿制金山毒霸专杀工具界面,仿制金山毒霸专杀工具界面

仿制金山毒霸专杀工具界面
作者: 西安 汪俊

下载本文示例源代码

金山毒霸2002自推出以来,广受用户的喜爱。今天在这里我要谈的不是金山毒霸的功能,而是其别具一格的界面。本人早就对金山毒霸的界面垂涎三尺,如果自己的程序里能用上金山毒霸那样的界面,那该多爽!

说干就干,本着由浅入深的原则,我选择了金山毒霸的一个附带工具:Duba_GOP.exe来开刀。该工具在金山毒霸的网站上可以下载到,其

界面如图所示:

好,开始准备工具:
提取资源工具:freeRes
编程工具:VC++
还有一个Vc自带的小工具:spy++
之所以不用大家都熟悉的eXeScope,是因为Duba_GOP.exe已经被压缩过了,有些资源提取工具无法再用。
用freeRes打开Duba_GOP.exe,可看到其带有20个bmp位图,有整个窗体的背景图,右上角两个小按钮“主页”和“关闭”的三态位图,以及两个大按钮“浏览文件夹”和“开始扫描”的三态位图。看到这些图片,即可猜到该软件是没有标题栏的,而显示出来的标题栏只是背景,而且连同窗体下部的金山毒霸的标志都是属于同一幅背景图片!那么“标题栏”上的“主页”,“关闭”是怎么回事?用spy++来试一下,发现这两个是Button,而不是Bitmap。同样“浏览文件夹”和“开始扫描”也是Button,随即想到这四个Button可以用VC中的CBitmap类来实现。而窗体下部的超链接仅仅是Static静态框。把这些难点分析出来了,下面就可以开始我们的编程之旅了,不过记得把有用的图片保存下来。

一.窗体背景问题
打开vc,新建一个对话框工程,名为Interface。去掉缺省的一个Static和两个Button,在窗体上点右键,在出现的属性对话框中,去掉标题栏,再将用freeRes提取的所有图片Import进工程的资源中。修改CInterfaceDlg::OnPaint()如下:

void CInterfaceDlg::OnPaint() {    if (IsIconic())    {        CPaintDC dc(this); // device context for painting        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);        // Center icon in client rectangle        int cxIcon = GetSystemMetrics(SM_CXICON);        int cyIcon = GetSystemMetrics(SM_CYICON);        CRect rect;        GetClientRect(&rect);        int x = (rect.Width() - cxIcon + 1) / 2;        int y = (rect.Height() - cyIcon + 1) / 2;        // Draw the icon        dc.DrawIcon(x, y, m_hIcon);    }    else    {//      CDialog::OnPaint();//将这一句注销掉        ***************************************************************        CPaintDC dc(this);        CRect rect;        GetClientRect(&rect);//得到窗体的大小        CDC dcMem;         dcMem.CreateCompatibleDC(&dc);         CBitmap bmpBackground;        bmpBackground.LoadBitmap(IDB_BITMAPBACKGROUND);//加载背景图片        BITMAP bitMap;        bmpBackground.GetBitmap(&bitMap);        CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);        dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);//画窗体        **************************************************************    }}

其中两个“*”行之间的部分为所添加部分。

这段代码的作用是将那幅背景图片画在窗体上, 其中我使用了StretchBlt来画出窗体,StretchBlt比BitBlt要慢许多,如果你想得到更好的速度,可以考虑建立与背景位图相同尺寸的窗体,然后用BitBlt来画出。CBitmap bmpBackground;最好作为CInterfaceDlg的成员变量并在CInterfaceDlg::OnInitDialog中提前加载位图,感兴趣的朋友可以试试。

编译,运行。可看到修改后的效果,由于该图片是平铺在窗体上的,如果图片和窗体尺寸不一致就会导致图片发生扭曲。因此可将窗体调整到与图片相同或相近的尺寸大小,那么运行后看起来就顺眼多了。但是窗体边框还是不大对劲,于是再进vc的资源编辑器,将窗体的Border由“Dialog Frame”该为“Thin”,重新编译,运行,搞定!

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

但是没过一秒钟就觉得这话说早了,标题栏没了,窗体怎么移动啊?

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 别急,车到山前必有路,我们不妨骗骗Windows。当我们的鼠标在窗体任意位置上拖动鼠标时,让Windows以为鼠标在标题栏上拖动,不就可以实现任意点击窗体
展开更多 50%)
分享

猜你喜欢

仿制金山毒霸专杀工具界面

C语言教程 C语言函数
仿制金山毒霸专杀工具界面

用VC++仿制金山毒霸专杀工具界面

编程语言 网络编程
用VC++仿制金山毒霸专杀工具界面

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

金山毒霸9 界面设计欣赏

平面设计 标志设计 UI设计 VI设计
金山毒霸9 界面设计欣赏

金山毒霸怎么关闭热点 金山毒霸怎么永久关闭热点

软件教程
金山毒霸怎么关闭热点  金山毒霸怎么永久关闭热点

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

金山毒霸怎么关闭热点

电脑网络
金山毒霸怎么关闭热点

金山毒霸免费wifi怎么用

电脑网络
金山毒霸免费wifi怎么用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《剑魂之刃》vip等级特权解析

《剑魂之刃》vip等级特权解析

如何有效地使用对话框

如何有效地使用对话框
下拉加载更多内容 ↓