C++写一个内存清理软件(二、控制面板操作)

37 篇文章 3 订阅
32 篇文章 0 订阅

一、新增界面

新增dlg界面,并修改下图的属性
在这里插入图片描述
在这里插入图片描述

添加12个按钮,修改名称,以及自绘属性(此属性不修改,则重绘代码无效)
在这里插入图片描述

在这里插入图片描述

二、添加资源

将图标资源放入res文件夹内后,在资源视图中进行添加
在这里插入图片描述

三、交互

依次双击十二个按钮,在生成的函数中加入以下代码


void CDlgControl::OnBnClickedBtnInternet()
{
	// 打开 IE 的设置窗口
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL inetcpl.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnSound()
{
	// 打开 声音的设置窗口
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL mmsys.cpl @1", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnTime()
{
	// 启动日期和时间设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL timedate.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnDisplay()
{
	// 启动显示设置面板
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL desk.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnAccess()
{
	// 启动辅助选项
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL access.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnMouse()
{
	// 打开鼠标设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL main.cpl @0", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnKey()
{
	// 启动键盘设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL main.cpl @1", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnField()
{
	// 打开区域设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL intl.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnApp()
{
	// 启动添加软件设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL appwiz.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnAdd()
{
	// 启动添加硬件设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL hdwwiz.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnSys()
{
	// 打开系统设置
	::ShellExecute(NULL, "OPEN", "rundll32.exe",
		"shell32.dll Control_RunDLL sysdm.cpl", NULL, SW_SHOW);
}


void CDlgControl::OnBnClickedBtnManager()
{
	// 启动计算机管理设置
	::ShellExecute(NULL, "OPEN", "compmgmt.msc",
		"shell32.dll Control_RunDLL compmgmt.cpl", NULL, SW_SHOW);
}

四、重载按钮

MFC中想要实现特殊的按钮属性,比如icon、颜色等,只能重载属性来做

以下代码是将按键重载为黑色,按键文本为白色,添加图标显示

.h文件

#if !defined(AFX_ICONBTN_H__02A1419C_0E38_4922_ABE2_3D6D23E7A6B7__INCLUDED_)
#define AFX_ICONBTN_H__02A1419C_0E38_4922_ABE2_3D6D23E7A6B7__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// IconBtn.h : header file
//

/
// CIconBtn window

class CIconBtn : public CButton
{
// Construction
public:
	CIconBtn();
	CImageList  m_ImageList;
	int			m_ImageIndex;	// 图标索引
	BOOL		IsPressed;		// 按钮是否被按下
// Attributes
public:

// Operations
public:

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CIconBtn)
	public:
	virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
	//}}AFX_VIRTUAL

// Implementation
public:
	void SetImageIndex(UINT Index);
	virtual ~CIconBtn();

	// Generated message map functions
protected:
	//{{AFX_MSG(CIconBtn)
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	//}}AFX_MSG

	DECLARE_MESSAGE_MAP()
};

/

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_ICONBTN_H__02A1419C_0E38_4922_ABE2_3D6D23E7A6B7__INCLUDED_)

.cpp文件

// IconBtn.cpp : implementation file
//

#include "pch.h"
#include "resource.h"
#include "CleanMasterDlg.h"
#include "IconBtn.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CIconBtn

CIconBtn::CIconBtn()
{
	m_ImageList.Create(32,32,ILC_COLOR24|ILC_MASK,1,0);			// 创建图像列表
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_INTERNET));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SOUND)); 				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_TIME));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_DISPLAY)); 				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ACCESS));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_MOUSE)); 				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_KEY));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_FILED)); 				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_APP));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ADD)); 				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SYS));				// 加载图标
	m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_MANAGER)); 				// 加载图标

	IsPressed = FALSE;
}

CIconBtn::~CIconBtn()
{
}


BEGIN_MESSAGE_MAP(CIconBtn, CButton)
	//{{AFX_MSG_MAP(CIconBtn)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CIconBtn message handlers

void CIconBtn::SetImageIndex(UINT Index)
{
	m_ImageIndex = Index;
}

void CIconBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	CDC dc;
	dc.Attach(lpDrawItemStruct->hDC);	
	UINT state  = lpDrawItemStruct->itemState; // 获取状态
	// 获取图像列中图像大小
	IMAGEINFO imageinfo;
	m_ImageList.GetImageInfo(m_ImageIndex,&imageinfo);
	CSize imagesize;
	imagesize.cx = imageinfo.rcImage.right - imageinfo.rcImage.left;
	imagesize.cy = imageinfo.rcImage.bottom - imageinfo.rcImage.top;
	// 在按钮垂直方向居中显示位图
	CRect rect;
	GetClientRect(rect);
	CPoint point;
	point.x = 5;
	point.y = (rect.Height() - imagesize.cy)/2;
	
	CRect focusRect(rect);
	focusRect.DeflateRect(2,2,2,2);	
	// 按钮被选中或者获得焦点时
	if((state&ODS_SELECTED)||(state&ODS_FOCUS))
	{
		CPen pen(PS_DASHDOTDOT,1,RGB(0,0,0));
		CBrush brush;
		dc.FillSolidRect(rect, RGB(0,0,0));
		brush.CreateStockObject(NULL_BRUSH);
		dc.SelectObject(&brush);
		dc.SelectObject(&pen);
		// 绘制焦点矩形
		dc.DrawFocusRect(focusRect);
		// 绘制立体效果
		dc.DrawEdge(rect,BDR_RAISEDINNER|BDR_RAISEDOUTER,BF_BOTTOMLEFT|BF_TOPRIGHT);			
		// 获得焦点时绘制黑色边框
		dc.Draw3dRect(rect,RGB(0,0,0),RGB(0,0,0));
	}
	else  // 默认情况下
	{		
		CPen pen(PS_DOT,1,RGB(192,192,192));
		CBrush brush;
		brush.CreateStockObject(NULL_BRUSH);
		dc.FillSolidRect(rect, RGB(0, 0, 0));
		dc.SelectObject(&brush);
		dc.SelectObject(&pen);
		dc.Rectangle(focusRect);			
		dc.DrawEdge(rect,BDR_RAISEDINNER|BDR_RAISEDOUTER,BF_BOTTOMLEFT|BF_TOPRIGHT);	
	}
	if(IsPressed) // 在按钮被按下时绘制按下效果
	{
		dc.DrawFocusRect(focusRect);			
		dc.DrawEdge(rect,BDR_SUNKENINNER |BDR_SUNKENOUTER,BF_BOTTOMLEFT|BF_TOPRIGHT);
		dc.Draw3dRect(rect,RGB(0,0,0),RGB(0,0,0));	
	}
	m_ImageList.Draw(&dc, m_ImageIndex, point, ILD_NORMAL | ILD_TRANSPARENT); //绘制图标要放到绘制按钮背景的后面,不然会覆盖图标
	// 绘制按钮文本
	CString text;
	GetWindowText(text);
	rect.DeflateRect(point.x+imagesize.cx,0,0,0);
	dc.SetBkMode(TRANSPARENT);
	dc.SetBkColor(RGB(0, 0, 0));
	dc.SetTextColor(RGB(255,255,255));
	dc.DrawText(text,rect,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
}

void CIconBtn::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	IsPressed = TRUE;
	CButton::OnLButtonDown(nFlags, point);
}

void CIconBtn::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	IsPressed = FALSE;
	CButton::OnLButtonUp(nFlags, point);
}



五、调用

5.1 子界面调用

右键类向导,生成此函数,在对应的代码里加入以下代码,从而使子界面变为黑色
在这里插入图片描述
在这里插入图片描述
生成界面初始化函数,加入以下代码
在这里插入图片描述
在这里插入图片描述

5.2 主界面调用

双击控制面板操作,

  1. 让选中框选中
  2. 生成子界面,并显示到主界面上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

六、运行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值