MFC修改鼠标光标形状

1.新建项目

2.添加资源Cursor

3.添加鼠标移动响应函数,用于显示鼠标光标形状

void C修改鼠标光标View::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	CRect rc;
	GetClientRect(&rc);

	if (point.x <= rc.right / 2)//鼠标在窗口左侧时

		::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
	else
		::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR2));



	CView::OnMouseMove(nFlags, point);
}

4.打开您的视图类的头文件 (.h 文件)

添加一个私有成员变量来存储光标句柄


// 修改鼠标光标View.h : C修改鼠标光标View 类的接口
//

#pragma once


class C修改鼠标光标View : public CView
{
protected: // 仅从序列化创建
	C修改鼠标光标View();
	DECLARE_DYNCREATE(C修改鼠标光标View)

// 特性
public:
	C修改鼠标光标Doc* GetDocument() const;

// 操作
public:

// 重写
public:
	virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

// 实现
public:
	virtual ~C修改鼠标光标View();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// 生成的消息映射函数
protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
private:
	HCURSOR m_hCursor; // 自定义光标句柄
};

#ifndef _DEBUG  // 修改鼠标光标View.cpp 中的调试版本
inline C修改鼠标光标Doc* C修改鼠标光标View::GetDocument() const
   { return reinterpret_cast<C修改鼠标光标Doc*>(m_pDocument); }
#endif

在视图类的构造函数中加载光标资源。

C修改鼠标光标View::C修改鼠标光标View()
{
	// TODO:  在此处添加构造代码
	m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR3); // IDC_MY_CURSOR 是您在资源视图中定义的光标ID
}

重载SetCursor()消息

BOOL C修改鼠标光标View::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	if (nHitTest == HTCLIENT && m_hCursor != NULL)
	{
		::SetCursor(m_hCursor); // 显示自定义光标
		return;
	}

	return CView::OnSetCursor(pWnd, nHitTest, message);
}

全部代码

修改鼠标光标View.h


// 修改鼠标光标View.h : C修改鼠标光标View 类的接口
//

#pragma once


class C修改鼠标光标View : public CView
{
protected: // 仅从序列化创建
	C修改鼠标光标View();
	DECLARE_DYNCREATE(C修改鼠标光标View)

// 特性
public:
	C修改鼠标光标Doc* GetDocument() const;

// 操作
public:

// 重写
public:
	virtual void OnDraw(CDC* pDC);  // 重写以绘制该视图
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

// 实现
public:
	virtual ~C修改鼠标光标View();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// 生成的消息映射函数
protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
private:
	HCURSOR m_hCursor; // 自定义光标句柄
public:
	afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};

#ifndef _DEBUG  // 修改鼠标光标View.cpp 中的调试版本
inline C修改鼠标光标Doc* C修改鼠标光标View::GetDocument() const
   { return reinterpret_cast<C修改鼠标光标Doc*>(m_pDocument); }
#endif

修改鼠标光标View.cpp


// 修改鼠标光标View.cpp : C修改鼠标光标View 类的实现
//

#include "stdafx.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "修改鼠标光标.h"
#endif

#include "修改鼠标光标Doc.h"
#include "修改鼠标光标View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// C修改鼠标光标View

IMPLEMENT_DYNCREATE(C修改鼠标光标View, CView)

BEGIN_MESSAGE_MAP(C修改鼠标光标View, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
	ON_WM_MOUSEMOVE()
	ON_WM_SETCURSOR()
END_MESSAGE_MAP()

// C修改鼠标光标View 构造/析构

C修改鼠标光标View::C修改鼠标光标View()
{
	// TODO:  在此处添加构造代码
	m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR3); // IDC_MY_CURSOR 是您在资源视图中定义的光标ID
}

C修改鼠标光标View::~C修改鼠标光标View()
{
}

BOOL C修改鼠标光标View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO:  在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	return CView::PreCreateWindow(cs);
}

// C修改鼠标光标View 绘制

void C修改鼠标光标View::OnDraw(CDC* /*pDC*/)
{
	C修改鼠标光标Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO:  在此处为本机数据添加绘制代码
}


// C修改鼠标光标View 打印

BOOL C修改鼠标光标View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void C修改鼠标光标View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO:  添加额外的打印前进行的初始化过程
}

void C修改鼠标光标View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO:  添加打印后进行的清理过程
}


// C修改鼠标光标View 诊断

#ifdef _DEBUG
void C修改鼠标光标View::AssertValid() const
{
	CView::AssertValid();
}

void C修改鼠标光标View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

C修改鼠标光标Doc* C修改鼠标光标View::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(C修改鼠标光标Doc)));
	return (C修改鼠标光标Doc*)m_pDocument;
}
#endif //_DEBUG


// C修改鼠标光标View 消息处理程序


void C修改鼠标光标View::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	CRect rc;
	GetClientRect(&rc);

	if (point.x <= rc.right / 2)//鼠标在窗口左侧时

		::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
	else
		::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR2));



	CView::OnMouseMove(nFlags, point);
}


BOOL C修改鼠标光标View::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	if (nHitTest == HTCLIENT && m_hCursor != NULL)
	{
		::SetCursor(m_hCursor); // 显示自定义光标
		return true;
	}

	return CView::OnSetCursor(pWnd, nHitTest, message);
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值