CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

关于画图的问题~~(在线急等)

楼主LVOLCANO(风起)2003-11-01 09:49:50 在 C/C++ / C语言 提问

我在WM_LBUTTONDOWN的时候取得xpos=LOWORD(lParam);ypos=HIWORD(lParam);后,我在WM_MOUSEMOVE的时候这样写:    
  hdc=GetDC(hwnd);  
    if(wParam=MK_LBUTTON)    
  {    
  Ellipse(hdc,LOWORD(lParam),ypos,xpos,HIWORD(lParam));  
  }  
    ReleaseDC(hwnd,hdc);    
  然后在WM_PAINT中我用到了InvalidateRect(hwnd,NULL,true);,但是这只是用来消除背景,不能消除椭圆,在我鼠标拖动的时候,随着鼠标位置的拖动画出的椭圆仍然存在,当鼠标左键UP的时候,可以看到很多椭圆,这种情况怎么解决,怎样消除椭圆?就是windows画板的那个画椭圆的的效果  
   
  谢谢~~ 问题点数:50、回复次数:4Top

1 楼Andy84920(你也不懂)回复于 2003-11-01 10:43:11 得分 5

MFC的东西不懂!Top

2 楼fierygnu(va_list)回复于 2003-11-01 11:16:44 得分 15

处理顺序有问题。你应该在WM_PAINT中调用BeginPaint消除背景,然后画椭圆。在MOUSEMOVE里只更新坐标,然后调用InvalidateRect。只是事件驱动应用编程的基本模式。否则你就需要用xor方式来消除原来的椭圆了。Top

3 楼leyt(思维机器)回复于 2003-11-01 11:32:38 得分 30

你在WM_PAINT中用InvalidateRect(hwnd,NULL,true)是没有用的(应该说是不对的)。  
  因为你是在WM_MOUSEMOVE中画的椭圆,随着鼠标位置的拖动当然会画出椭圆。  
  应该在WM_MOUSEMOVE后加上InvalidateRect(hwnd,NULL,TRUE)擦除背景。  
   
  我写了一个,效果还不错。  
   
  LRESULT   CALLBACK   WndProc   ( HWND   hwnd,   UINT   message,   WPARAM   wParam,LPARAM   lParam)  
  {  
  static   int       xpos,   ypos,   x,   y;  
  HDC         hdc   ;  
  PAINTSTRUCT     ps   ;  
  switch   (message)  
            {  
          case WM_LBUTTONDOWN:  
  xpos=LOWORD(lParam);  
  ypos=HIWORD(lParam);                   return   0   ;  
                       
          case WM_MOUSEMOVE:  
  hdc=GetDC(hwnd);  
  if   (wParam   &   MK_LBUTTON   )  
  {  
          x=LOWORD(lParam);  
          y=HIWORD(lParam);  
  }                       InvalidateRect   (hwnd,   NULL,1)   ;  
  ReleaseDC(hwnd,hdc);  
                      return   0   ;  
   
            case   WM_PAINT:  
                      hdc   =   BeginPaint   (hwnd,   &ps)   ;  
                                      Ellipse(hdc,xpos,ypos,x,y);                      
                      EndPaint   (hwnd,   &ps)   ;  
                      return   0   ;  
                                 
            case   WM_DESTROY:  
                      PostQuitMessage   (0)   ;  
                      return   0   ;  
            }  
            return   DefWindowProc   (hwnd,   message,   wParam,   lParam)   ;  
  }Top

4 楼leyt(思维机器)回复于 2003-11-01 11:34:18 得分 0

TO:Andy84920(你也不懂)  
  不是MFC的,是WINDOWS   SDK的,呵呵Top

相关问题

  • 无闪烁画图?在线
  • 在InternalFrame中画图的问题~~~~急(在线等待)
  • 怎样在桌面上画图?很急,在线给分
  • 急!!在线等!!关于在JPanel上画图形的问题
  • 在线等待,关于画图问题,急!!!
  • 关于gd画图的问题--急(在线等)
  • asp 画图??急!!!!
  • 一个简单的多文档画图程序(在线等,急急急!)
  • 请大侠帮忙,pb中实现画图功能。急急急!!!!!(在线等待)
  • 请大侠帮忙,pb中实现画图功能。急急急!!!!!(在线等待)

关键词

  • 鼠标
  • ps
  • null
  • 椭圆
  • hdc
  • invalidaterect
  • lparam
  • hwnd
  • ypos
  • xpos

得分解答快速导航

  • 帖主:LVOLCANO
  • Andy84920
  • fierygnu
  • leyt

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo