pm编程怎么做十字划线

时间:2025-01-28 15:14:47 网络游戏

在PM编程中实现十字划线,你需要在鼠标按下时记录起点,并在鼠标移动时更新终点,然后绘制从起点到终点的线。以下是一个简单的示例,展示了如何在MFC(Microsoft Foundation Classes)应用程序中实现这一功能:

定义变量和光标

在你的视图类中定义变量来记录起点和终点。

加载十字形光标。

处理鼠标事件

在鼠标按下时记录起点,并设置光标为十字形。

在鼠标移动时更新终点。

在鼠标释放时绘制线。

```cpp

// DrawView.h

class CDrawView : public CView {

protected:

// create from serialization only

CDrawView();

DECLARE_DYNCREATE(CDrawView)

int m_nMouseState; // 判断鼠标是否按下

CPoint m_ptStart; // 记录起点

CPoint m_ptEnd;// 记录终点

HCURSOR m_hMyCursor; // 定义光标类型

public:

virtual void OnDraw(CDC* pDC); // 重写OnDraw函数

afx_msg void OnLButtonDown(UINT nFlags, CPoint point); // 鼠标左键按下消息处理函数

afx_msg void OnMouseMove(UINT nFlags, CPoint point); // 鼠标移动消息处理函数

afx_msg void OnLButtonUp(UINT nFlags, CPoint point); // 鼠标左键释放消息处理函数

afx_msg void OnInitDialog(); // 窗口初始化消息处理函数

DECLARE_MESSAGE_MAP()

};

// DrawView.cpp

BEGIN_MESSAGE_MAP(CDrawView, CView)

ON_WM_LBUTTONDOWN()

ON_WM_MOUSEMOVE()

ON_WM_LBUTTONUP()

ON_WM_INITDIALOG()

END_MESSAGE_MAP()

CDrawView::CDrawView() : m_nMouseState(0) {

// 初始化光标为十字形

m_hMyCursor = AfxGetApp()->LoadStandardCursor(IDC_CROSS);

}

void CDrawView::OnInitDialog() {

CView::OnInitDialog();

// 设置光标

SetCursor(m_hMyCursor);

}

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) {

// 记录起点

m_ptStart = point;

m_nMouseState = 1;

SetCapture(); // 捕获光标

// 设置光标为十字形

SetCursor(m_hMyCursor);

}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) {

if (m_nMouseState == 1) {

// 更新终点

m_ptEnd = point;

// 重绘视图

Invalidate();

}

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) {

if (m_nMouseState == 1) {

// 释放光标

ReleaseCapture();

m_nMouseState = 0;

}

}

void CDrawView::OnDraw(CDC* pDC) {

CView::OnDraw(pDC);

if (m_nMouseState == 1) {

// 绘制线

CPen pen(PS_SOLID, 2, RGB(0, 0, 255)); // 蓝色实线

pDC->SelectObject(&pen);

pDC->LineTo(m_ptStart.x, m_ptStart.y);

pDC->LineTo(m_ptEnd.x, m_ptEnd.y);

pDC->SelectObject(NULL);

}

}

```

解释

变量定义

`m_nMouseState`:用于判断鼠标是否按下。

`m_ptStart`:记录鼠标按下时的起点。

`m_ptEnd`:记录鼠标移动后的终点。

`m_hMyCursor`:用于存储十字形光标。

消息处理

`OnLButtonDown`:记录鼠标按下时的起点,并设置光标为十字形。

`On