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

一个鼠标画图的小问题(关于刷新整个客户区)!!!

楼主MPU(黑眼圈)2003-05-03 12:25:23 在 VC/MFC / 基础类 提问

一个鼠标画图的小问题(关于刷新整个客户区)!!!  
   
    switch   (message)  
            {  
  //鼠标左键画图  
    case   WM_LBUTTONDOWN:  
    iCount   =   0;  
    InvalidateRect(hwnd,NULL,FALSE);  
      return   0;  
   
  //鼠标右键刷新整个客户区,变白。  
   
  //画几条线,但按下右键总有最后画的一条还在!  
    case   WM_RBUTTONDOWN:  
    hdc   =   GetDC   (hwnd);  
    rect.left   =   0;  
            rect.top   =   0;  
                    rect.right   =   LOWORD(lParam);  
            rect.bottom   =   HIWORD(lParam);  
    //单独用InvalidateRect(hwnd,NULL,TRUE);也不行。  
    InvalidateRect(hwnd,NULL,TRUE);  
                    ReleaseDC   (hwnd,hdc);  
      return   0;  
  //  
  case   WM_MOUSEMOVE:  
    if(   wParam   &   MK_LBUTTON   &&   iCount   <   1000   )  
    {  
    pt[iCount     ].x   =   LOWORD(lParam);  
    pt[iCount     ].y   =   HIWORD(lParam);  
    iCount++;  
   
    hdc   =   GetDC   (hwnd);  
    InvalidateRect(hwnd,NULL,FALSE);  
    ReleaseDC   (hwnd,hdc);  
    }    
    return   0;  
   
            case   WM_PAINT:  
                      hdc   =   BeginPaint   (hwnd,   &ps)   ;  
   
      for   (   i=0;   i   <   iCount   -   1   ;i++)  
          //   for(   j   =   i   +   1;   j   <   iCount;   j++)  
    {  
    MoveToEx(hdc,pt[i].x,pt[i].y,NULL);  
    LineTo   (hdc,pt[i+1].x,pt[i+1].y);  
    }  
    EndPaint   (hwnd,   &ps)   ;  
                      return   0   ;  
   
  问题点数:50、回复次数:4Top

1 楼Mackz(在相互)回复于 2003-05-03 12:45:36 得分 0

我不知道你在:WM_RBUTTONDOWN和WM_MOUSEMOVE中使用GetDC()干什么用?Top

2 楼MPU(黑眼圈)回复于 2003-05-03 13:04:55 得分 0

WM_MOUSEMOVE中使用GetDC()是为了鼠标在客户区中拖动时留下痕迹。  
   
  《Windows   程序设计》中用了GetDC()。  
   
   
   
  WM_RBUTTONDOWN我想让鼠标右键刷新客户区,使之变白。  
  没有实现,就乱试一下。的确不该用。  
          switch   (message)  
            {  
   
    case   WM_LBUTTONDOWN:  
    iCount   =   0;  
    InvalidateRect(hwnd,NULL,FALSE);  
      return   0;  
   
    case   WM_RBUTTONDOWN:  
    InvalidateRect(hwnd,NULL,TRUE);  
      return   0;  
                           
    case   WM_MOUSEMOVE:  
    if(   wParam   &   MK_LBUTTON   &&   iCount   <   1000   )  
    {  
    pt[iCount     ].x   =   LOWORD(lParam);  
    pt[iCount     ].y   =   HIWORD(lParam);  
    iCount++;  
     
    hdc   =   GetDC   (hwnd);  
    InvalidateRect(hwnd,NULL,FALSE);  
    ReleaseDC   (hwnd,hdc);  
     
    }  
     
    return   0;  
   
            case   WM_PAINT:  
                      hdc   =   BeginPaint   (hwnd,   &ps)   ;  
   
      SetCursor(LoadCursor(NULL,IDC_WAIT));  
      ShowCursor(TRUE);  
   
      for   (   i=0;   i   <   iCount   -   1   ;i++)  
          //   for(   j   =   i   +   1;   j   <   iCount;   j++)  
    {  
    MoveToEx(hdc,pt[i].x,pt[i].y,NULL);  
    LineTo   (hdc,pt[i+1].x,pt[i+1].y);  
    }  
   
    ShowCursor(FALSE);  
    SetCursor   (   LoadCursor(NULL,IDC_ARROW));  
                       
                      EndPaint   (hwnd,   &ps)   ;  
                      return   0   ;  
  Top

3 楼superS(super慢)回复于 2003-05-03 13:10:31 得分 50

鼠标右建点下后应该先把记录点的数组pt清空再InvalidateRect.因为InvalidateRect会导致  
  WM_PAINT消息啊。Top

4 楼MPU(黑眼圈)回复于 2003-05-03 13:28:07 得分 0

这样好了!  
    case   WM_RBUTTONDOWN:  
                iCount   =   0;  
                InvalidateRect(hwnd,NULL,TRUE);  
                return   0;  
                       
  谢谢!Top

相关问题

  • 鼠标画图
  • 鼠标画图问题
  • ※ 鼠标事件?刷新?
  • 我在窗口客户区内画图,使用了很多的Rectange()和LineTo()等画图函数,使用滚动条不断刷新窗口时,CPU的占用率特别高
  • 求救:客户端 画图 提交... ...
  • 在窗口客户区内画图,图的大小远大于客户区,这样就要求利用滚动条来滚动刷新,可是现在速度很慢,有何好办法?
  • 如何在vc程序中用鼠标画图?急急急
  • 投石问路--一个简单的鼠标画图问题
  • 画图+屏幕随鼠标自动滚动
  • 关于一个制作鼠标画图程序里几行程序的疑问

关键词

  • 鼠标
  • 客户
  • null
  • 刷新整个客户区
  • invalidaterect
  • 右键
  • rect
  • hwnd
  • icount
  • hdc

得分解答快速导航

  • 帖主:MPU
  • superS

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

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