"VS2008操作与代码: 定义捕获鼠标移动点的简单逃跑按钮"

版权申诉
0 下载量 181 浏览量 更新于2024-02-25 收藏 896KB DOCX 举报
#include "afxwin.h" class CMyButton : public CButton { public: CMyButton(); ~CMyButton(); BOOL m_bVisible; BOOL m_bIsOn; DECLARE_MESSAGE_MAP() afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnMouseHover(UINT nFlags, CPoint point); afx_msg void OnMouseLeave(); }; BEGIN_MESSAGE_MAP(CMyButton, CButton) ON_WM_MOUSEMOVE() ON_WM_LBUTTONDOWN() ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover) ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave) END_MESSAGE_MAP() CMyButton::CMyButton() { m_bVisible = TRUE; m_bIsOn = FALSE; } CMyButton::~CMyButton() { } void CMyButton::OnMouseMove(UINT nFlags, CPoint point) { if (!m_bIsOn) { CRect rect; GetWindowRect(&rect); ScreenToClient(&rect); if (rect.PtInRect(point)) { m_bIsOn = TRUE; SetCursor(LoadCursor(NULL, IDC_HAND)); } } else { CButton::OnMouseMove(nFlags, point); } } void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) { if (m_bIsOn) { MessageBox(_T("逃跑成功!")); } } void CMyButton::OnMouseHover(UINT nFlags, CPoint point) { if (!m_bIsOn) { SetCursor(LoadCursor(NULL, IDC_HAND)); } } void CMyButton::OnMouseLeave() { m_bIsOn = FALSE; } //在对话框类中添加成员变量 CMyButton m_btnEscape; //在OnInitDialog()函数中添加代码 m_btnEscape.Create(_T("你能抓住我吗?"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, CRect(100, 100, 200, 130), this, ID_ESCAPE_BUTTON); m_btnEscape.ShowWindow(SW_HIDE); //接下来就可以根据需要轮流显示隐藏按钮了 if (m_btnEscape.m_bVisible) { m_btnEscape.ShowWindow(SW_SHOW); } else { m_btnEscape.ShowWindow(SW_HIDE); } 在这段代码中,我们创建了一个自定义的按钮类CMyButton,通过重写鼠标移动、鼠标点击等消息处理函数,在鼠标移动到按钮上时改变光标形状,并在点击按钮时弹出消息框表示“逃跑成功!”。然后在对话框类中添加了一个成员变量m_btnEscape,用于创建这个按钮,并在OnInitDialog()函数中初始化按钮并设置初始状态。最后根据需要轮流显示隐藏按钮。 这段代码实现了一个简单的逃跑按钮,让用户在程序界面上体验到一些趣味性。通过这个例子,我们也学习了如何在VS2008中创建自定义的按钮类,重写消息处理函数,以及控件的显示与隐藏等操作。希望这个例子对你有所帮助。