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

2016-01-29 11:52 15 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

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

下载本文示例源代码

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

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

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

界面如图所示:

好,开始准备工具:
提取资源工具: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”,重新编译,运行,搞定!

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

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

来源:https://www.tulaoshi.com/n/20160129/1483685.html

延伸阅读
查看金山毒霸监控事件   金山毒霸是老牌的国内杀毒软件之一。普通用户在使用金山毒霸的过程中,通常都会感觉到金山毒霸似乎比较文静。在电脑系统比较安全的情况下,它并不会主动弹出各种提示来,与用户进行交流。我们在做一些杀毒软件使用反馈的调查中也发现,在普通安全的电脑中,杀毒软件似乎如同休眠一般的安静。但事实是不是真的...
金山毒霸热点怎么关闭   1.点击右上角的菜单按钮,然后。 2.选择,点击即可。 从今以后金山毒霸热点弹窗就永远都不会弹出来了。
金山毒霸卸载不了怎么办   那为什么就是卸载不掉呢?可能是方法不对,我们这里所说的是卸载而不是删除,有朋友期望通过直接删除金山毒霸安装目录里的文件来达到卸载的目的。这显然是不行的,作为一款杀毒软件,如果就这样可以被轻松删除,那也太low了吧。 还有就是非正常的安装包,或者说不是从金山毒霸官方下载的安装包。有朋友...
金山毒霸护航手机安全   在普通电脑用户的系统中,安全软件的使用算是一件非常平常而又常规的事情。因为当今,电脑已经是人们日常生活所不可或缺的工具之一了。而随着智能手机的不断普及,在手机上运行的软件达到了铺天盖地的效果,加之移动互联网的加入,使手机的网络活动愈加频繁。因此用户对手机安全问题已然越来越重视。 如...
金山毒霸电脑提速有技巧   随着目前杀毒软件功能集成化程度的越来越高,很多在过去的软件中,只能是以独立的方式存在于一些特定软件中的功能,现在都被结合到了安全软件,特别是杀毒软件中。本文所要涉及的金山毒霸(新毒霸),其中就集成了很多非常实用的功能。笔者今天想跟大家的分享的也是新毒霸众多使用功能中,用户日常最可能用到...

经验教程

18

收藏

29
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部