如何在 MFC 中删除一行
Posted
技术标签:
【中文标题】如何在 MFC 中删除一行【英文标题】:How to delete a Line in MFC 【发布时间】:2014-11-23 10:39:07 【问题描述】:我正在编写像 Paint 这样的 MFC 应用程序。 我分两步画一条线(按住并移动鼠标):
第 1 步:处理 WM_LBUTTONDOWN 并获取 startPoint。
第 2 步:处理 WM_MOUSEMOVE(使用 MK_LBUTTON)获取 endPoint,并使用 LineTo() 函数从 startPoint 到 endPoint 画一条线。
但是在第2步中,收到WM_MOUSEMOVE时画了一条线,所以创建了太多的线。我想在这一步删除旧线并绘制新线。 (接收 WM_LBUTTONUP 时只画一条线)。 你能帮我吗。谢谢大家。对不起,如果我的英语这么差。
【问题讨论】:
【参考方案1】:在WM_LBUTTONDOWN中,设置一个新的成员变量m_pMouseObject为NULL。
在WM_MOUSEMOVE中,如果m_pMouseObject == NULL,则将m_pMouseObject设置为新创建的线对象,否则在鼠标移动时不断修改m_pMouseObject。
在 WM_LBUTTONUP 中,从 m_pMouseObject 创建您的最终线对象并设置 m_pMouseObject = NULL。
【讨论】:
感谢您的回答。但我不知道如果我“来自 m_pMouseObject 的明确线对象”(调用 Invalidate()),它会擦除我在客户区绘制的所有形状,不是吗?我是 MFC 的新手,我需要你的帮助。非常感谢。 如果您遵循标准的绘制方式(当您收到 WM_PAINT 而不是鼠标移动时),invalidate 将正确绘制对象 - 您还需要在鼠标移动期间使对象的矩形无效跨度> 【参考方案2】:在 WM_MOUSEMOVE 中设置 endPoint 变量但不绘制。而是调用无效。这将导致擦除和重绘。所以在 OnPaint/OnDraw 中画一条从 startPoint 到 endPoint 的线。
【讨论】:
感谢您的回答。我是 MFC 的新手。如果我调用 Invalidate(),OnPaint() 将擦除客户区中的所有内容?但我只想擦除之前 WM_MOUSEMOVE 消息中的旧线并绘制当前线。你能帮帮我吗? 如果你想控制线条的颜色和宽度,那么它必须按照我的描述来完成。还有另一种使用异或笔的方法,经常用于让用户拖动橡皮线或矩形。 XOR 笔可以通过重绘来擦除。要研究这种方法,请在 MSDN 中查找 SetROP2。 我有一些小问题,需要您的帮助。你能给我雅虎ID或其他我可以和你实时聊天的东西吗?谢谢。以上是关于如何在 MFC 中删除一行的主要内容,如果未能解决你的问题,请参考以下文章