一个小问题

简介:
 昨天写一个简单的画图程序,遇到一个奇怪的问题,目的是想点鼠标左键,画个以此点为中心画个椭圆,最初的代码如下:

void CE02View::OnLButtonDown(UINT nFlags, CPoint point)
{
      CPaintDC dc(this);
      OnPrepareDC(&dc);
      if(this->m_nColor==GRAY_BRUSH)
      {
           this->m_nColor = WHITE_BRUSH;
      }
      else
      {
           this->m_nColor=GRAY_BRUSH;
      }
      this->m_rectEllipse.left=point.x/2;
      this->m_rectEllipse.right = point.x+point.x/2;
      this->m_rectEllipse.top = point.y+point.y/2;
      this->m_rectEllipse.bottom = point.y/2;
      this->OnDraw(&dc);
      CView::OnLButtonDown(nFlags, point);
}

void CE02View::OnDraw(CDC* pDC)
{   
      CE02Doc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
      pDC->SelectStockObject(this->m_nColor);
      pDC->Ellipse(this->m_rectEllipse);
}
并且也考虑了第一次运行时会发出WM_PAINT事件,而在OnPaint方法里会去调用OnDraw(),所以我把OnPaint重写了,让其不调用OnDraw,这样第一次运行就不会去画了。

void CE02View::OnPaint()
{
      CPaintDC dc(this); // device context for painting
}

可尽管这样,点击鼠标左键还是无法画出东西来,问了下师兄,他也不熟悉VC,弄了一会儿也无功而返,今天想了下可能是DC有问题,换了个CClientDC,唉,好了,真是怪了,用CPaintDC我是想模仿这OnPaint()的代码来写,按道理说应该可以的,可为什么在OnLButtonDown里就不行呢?最后可以运行的代码如下:

void CE02View::OnLButtonDown(UINT nFlags, CPoint point)
{
      CClientDC dc(this);
    OnPrepareDC(&dc);
      if(this->m_nColor==GRAY_BRUSH)
      {
           this->m_nColor = WHITE_BRUSH;
      }
      else
      {
           this->m_nColor=GRAY_BRUSH;
      }
      this->m_rectEllipse.left=point.x/2;
      this->m_rectEllipse.right = point.x+point.x/2;
      this->m_rectEllipse.top = point.y+point.y/2;
      this->m_rectEllipse.bottom = point.y/2;
      this->OnDraw(&dc);
      CView::OnLButtonDown(nFlags, point);
}


本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/06/09/777508.html,如需转载请自行联系原作者
目录
相关文章
|
编解码
Blender视图渲染知识
Blender视图渲染知识
Blender视图渲染知识
|
11月前
|
机器学习/深度学习 人工智能 缓存
让AI评测AI:构建智能客服的自动化运营Agent体系
大模型推动客服智能化演进,从规则引擎到RAG,再到AI原生智能体。通过构建“评估-诊断-优化”闭环的运营Agent,实现对话效果自动化评测与持续优化,显著提升服务质量和效率。
4436 86
让AI评测AI:构建智能客服的自动化运营Agent体系
|
机器学习/深度学习 数据采集 算法
基于mediapipe深度学习的运动人体姿态提取系统python源码
本内容介绍了基于Mediapipe的人体姿态提取算法。包含算法运行效果图、软件版本说明、核心代码及详细理论解析。Mediapipe通过预训练模型检测人体关键点,并利用部分亲和场(PAFs)构建姿态骨架,具有模块化架构,支持高效灵活的数据处理流程。
|
Web App开发 网络协议 Linux
如何屏蔽 iOS 26 软件自动更新,去除更新通知和标记
如何屏蔽 iOS 26 软件自动更新,去除更新通知和标记
26103 3
|
移动开发 JavaScript 网络协议
SpringBoot:Netty-SocketIO + VUE:SocketIO实现前后端实时双向通信
SpringBoot:Netty-SocketIO + VUE:SocketIO实现前后端实时双向通信
1490 0
|
传感器 网络协议 网络架构
计算机网络基础教程:拓扑
【4月更文挑战第5天】
2488 9
 计算机网络基础教程:拓扑
|
Java 数据库连接 数据库
java系列之~如何给sqlite数据库添加表
这篇文章介绍了如何在Java中使用SQLite JDBC驱动来连接SQLite数据库,并提供了示例代码来演示如何创建一个新的数据库表。
|
canal 监控 Java
Canal 结合spring boot项目开发
Canal 结合spring boot项目开发
725 3
|
存储 JavaScript 前端开发
小白实战!用JS实现一个3D翻书效果,附上代码
小白实战!用JS实现一个3D翻书效果,附上代码
|
机器学习/深度学习 自然语言处理 语音技术
自然语言处理(NLP)中的语言模型
自然语言处理(NLP)中的语言模型
1297 1