CheckerCtrl






4.96/5 (11投票s)
一个类似于 Microsoft Scandisk 的控件(在用户界面方面),允许您在屏幕上放置一系列块。
引言
我花了好几天在网上寻找类似于 Microsoft Scandisk 的控件(在图形用户界面方面,而不是行为),但我没有找到任何一个。所以我创建了一个名为 CCheckerCtrl
的类,它可以做同样的事情。您可以填充一系列您自己选择的颜色的块,以及获取任何块的颜色。
如何使用
要使用该控件,您需要导入头文件以及附加到本文的 .cpp 文件。 然后,您只需打开对话框编辑器并在对话框上放置一个矩形。 我们将这个静态控件称为 IDC_STATIC_CHECKER
。 之后,您可以从 CCheckerCtrl
类实例化一个对象,例如 m_ctrlChecker
,作为对话框类的公共数据成员。
然后在 WM_INITDIALOG
消息的消息处理程序中,您获取已经在对话框上放置的静态矩形的区域,然后您只需创建如下的检查器控件
//Declaring a local variable CRect rect; //Get the rectangulare coordinates of the //rectangle we already placed on dialog GetDlgItem(IDC_STATIC_CHECKER)->GetWindowRect(rect); //Convert to the client coordinates ScreenToClient(rect); //Create and place the checker control on screen m_ctrlChecker.Create(WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_TABSTOP, rect, this, IDC_STATIC_CHECKER);
完成此操作后,检查器的窗口将显示在屏幕上。现在,我们使用该类的 SetTotalBlocks
方法来设置我们希望检查器控件包含的块的总数
//Creating and placing 500 blocks on the checker control m_ctrlChecker.SetTotalBlocks(500);
该函数的声明如下
void CCheckerCtrl::SetTotalBlocks(const UINT nNumberofBlocks, const UINT nStartIndex = 0)
其中 nNumberofBlocks
是我们想要放置在检查器控件中的块数,nStartIndex
是起始块的索引。 假设您需要将这些块从 5 编号到 505。为此,您将 5 作为 nStartIndex
。 这样,第一个块的第一个数字将是 5,第二个块的数字是 6,依此类推...直到 505。默认值为 0。
如果您现在运行该程序,您将面临 500 个白色块。 现在,您可以通过该类的以下成员函数简单地设置块的颜色
void CCheckerCtrl::SetBlock(const UINT nBlockNumber, const COLORREF crColor)
例如,要将控件的第 2、3、4 和 5 个块涂成红色,我们将执行以下操作
for(register i = 2; i < 6; i++) m_ctrlChecker.SetBlock(i, RGB(255, 0, 0));
现在为了使更改生效,我们只需调用该类的 Refresh
函数
m_ctrlChecker.Refresh();
但有时您需要立即刷新一个块,因此您可以使用该类的 Update
方法。 声明如下
void CCheckerCtrl::Update(const UINT nBlockNumber);
例如,
for(register i = 2; i < 6; i++) { m_ctrlChecker.SetBlock(i, RGB(255, 0, 0)); m_ctrlChecker.Update(i); }
当我们想要获取特定块的颜色时,此控件的下一个函数开始发挥作用。 为此,使用 GetBlock
成员函数
COLORREF GetBlock(const UINT nBlockNumber) const;
例如,要获取第 6 个块的颜色,我们这样做
COLORREF crColor = m_ctrlChecker.GetBlock(6);
最后,我们来看该类的最后一个成员函数,Reset()
,它将所有块的颜色再次重置为白色。
此类中还有一个预定义的消息,名为 WM_CHECKERCTRL_RBUTTONDOWN
,当您需要控制鼠标左键单击时使用,例如,在屏幕上显示弹出菜单。 请注意,该消息将被发送到创建时提供给该类的父窗口。 您可以使用以下原型为此消息定义处理程序
UINT OnRclickedChecker(WPARAM wParam, LPARAM lParam)
其中 wParam
是检查器控件的控件 ID,lParam
是用户单击的块的编号。 控件 ID 用于区分同一对话框上的不同检查器控件。
最后说明
由于源代码非常简单明了,并且充满了前提条件、后置条件和不同的注释行,我认为本文现在已经完成。 您可以通过他的电子邮件地址联系作者。 欢迎提出任何意见、问题或建议。 阿罗哈!