WEB开发网
开发学院软件开发VC 用VC++仿制金山毒霸专杀工具界面 阅读

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

 2008-01-19 20:25:05 来源:WEB开发网   
核心提示:三.Static问题这个界面上Static不少,中上部有一个Static有一种凹下去的效果,用VC++仿制金山毒霸专杀工具界面(5),其实只需要一般的Static设置了“下沉”的风格即可,其余几个Static可算作一类,只不过在它的风格里去掉了边框而已,自此,存在的问题和前面的一样,也就是背景颜

三.Static问题

这个界面上Static不少,中上部有一个Static有一种凹下去的效果,其实只需要一般的Static设置了“下沉”的风格即可。其余几个Static可算作一类,存在的问题和前面的一样,也就是背景颜色问题,为此又从CStatic中派生出CcolorStatic类,主要代码如下:

// ColorStatic.h : header file
class CColorStatic : public CStatic
{
……//省略了无关代码
public:
void SetTextColor(COLORREF TextColor);
COLORREF m_TextColor;
void SetBackColor(COLORREF BackColor);
void SetCaption(CString strCaption);
void Create(CString strCaption,COLORREF BackColor);
COLORREF m_BackColor;
CString m_strCaption;
protected:
//{{AFX_MSG(CColorStatic)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
// ColorStatic.cpp
BEGIN_MESSAGE_MAP(CColorStatic, CStatic)
//{{AFX_MSG_MAP(CColorStatic)
ON_WM_CREATE()
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CColorStatic::OnPaint() //重画Static
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
dc.SetBkColor(m_BackColor);
dc.SetBkMode(TRANSPARENT);
CFont *pFont=GetParent()->GetFont();//得到父窗体的字体
CFont *pOldFont;
pOldFont=dc.SelectObject(pFont);//选用父窗体的字体
dc.SetTextColor(m_TextColor);//设置文本颜色
dc.DrawText(m_strCaption,&rect,DT_CENTER);//将文本画在Static的中央
dc.SelectObject(pOldFont);
// Do not call CStatic::OnPaint() for painting messages
}
void CColorStatic::SetCaption(CString strCaption)
{
m_strCaption=strCaption;//设置Static文本
}
void CColorStatic::SetBackColor(COLORREF BackColor)
{
m_BackColor=BackColor;//设置背景颜色
}
void CColorStatic::SetTextColor(COLORREF TextColor)
{
m_TextColor=TextColor;//设置文字颜色
}OK,这也是个很简单的类,主要功能就是可以设置该Static的文字颜色和背景颜色,但是已经基本满足我们的需要了。有一点缺陷就是下面三个Static应该还具备超链接的功能,不过你可以通过修改这个类来实现。或者直接用一个超链接类来替代也可以。 总之,这个问题也解决了,现在我们的程序运行起来已经非常像金山毒霸的Duba_GOP.exe了,做到这一步仿制任务已经基本完成,但是低头看看系统的任务栏你会发现自己的程序还不够完美,因为在任务栏上属于自己程序的那个小方块上空空如也,太不专业了。

请注意Windows是将程序的标题栏上的Caption和图标显示在任务栏上,而我的这个程序没有标题栏,故而什么也显示不出来,怎么办呢?办法在这里:

1.恢复标题在对话框的OnInitDialog()中添加:

SetWindowText("金山毒霸专杀工具");//设置对话框的标题为金山毒霸专杀工具

2.恢复图标

在对话框上打开属性对话框,重新选上“System Menu”和“Title Bar”风格。然后在对话框的OnInitDialog()中添加:

ModifyStyle(WS_CAPTION,WS_MINIMIZEBOX,SWP_DRAWFRAME);

现在运行起来看看,瞧!系统任务栏上熟悉的图标和标题又回来了。但是这样又带来一个问题:窗体最下面的那个Static在运行后与背景图片上金山毒霸2002几个字重叠在一起,很不好看。而且由于对话框的尺寸有限制,这个Static也移不到合适的位置,于是咱们只好在程序里动动脑筋了。比如在OnInitDialog()里加上几句:

CRect rect1;
m_Link3.GetWindowRect(&rect1);
rect1.top+=17;
rect1.bottom+=17;
m_Link3.MoveWindow(rect1.left,rect1.top,rect1.Width(),rect1.Height());//往下移17其中的m_Link3就是代表那个Static的成员变量。至于那个ListCtrl嘛,只不过在它的风格里去掉了边框而已。自此,大功告成!

该程序在VC6+Win98/2k/xp下调试通过。

上一页  1 2 3 4 5 

Tags:VC 仿制 金山

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接