CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

各位帮帮忙

楼主arock(人渣人)2003-08-03 21:38:12 在 C/C++ / C语言 提问

拿位仁兄能给我讲讲SCROLLWINDOW这个函数的用法,最好有例子,谢谢! 问题点数:0、回复次数:14Top

1 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-03 21:48:12 得分 0

MFC里的?  
   
  好久都没接触MFC了。忘得差不多了。Top

2 楼arock(人渣人)回复于 2003-08-03 22:13:31 得分 0

不是,小弟最近在看WINDOWS程序设计,搞不懂这个函数怎么用,看书也看不明白!Top

3 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-03 22:16:52 得分 0

能写出他的原形吗?Top

4 楼duanma(断码)回复于 2003-08-03 22:17:11 得分 0

呵呵,你可以到书店去翻翻书不就可以看到了吗?  
   
  可惜这次我没有借MFC的书~<~Top

5 楼arock(人渣人)回复于 2003-08-03 22:25:02 得分 0

原形我忘了,不过书上说这个函数是滚动客户区上的信息,可是它也引发WM_PAINT消息,我搞不清楚,在怎样处理WM_PAINT消息!Top

6 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-03 22:30:37 得分 0

WM_PAINT消息:是在一个CASE分支里的,在里面编写操作即可。Top

7 楼arock(人渣人)回复于 2003-08-03 22:38:55 得分 0

哦,MaiCle兄,要不我明天贴个例子各你分析分析一下吧!  
  Top

8 楼arock(人渣人)回复于 2003-08-04 09:45:45 得分 0

LRESULT   CALLBACK   WndProc(HWND   hwnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)  
  {  
  static   int   cxChar,   cyChar,   cxClient,   cyClient;  
  int   i,   iBeginPaint,   iEndPaint,   iVscrollPos;  
  HDC   hdc;  
  PAINTSTRUCT   ps;  
  TEXTMETRIC   tm;  
  SCROLLINFO   si;  
  TCHAR   buffer[20];  
   
  switch(message)  
  {  
  case   WM_CREATE:  
            hdc   =   GetDC(hwnd);  
         
            GetTextMetrics(hdc,   &tm);  
            cxChar   =   tm.tmAverCharWidth;  
            cyChar   =   tm.tmHeight   +   tm.tmExternalLeading;  
   
            ReleaseDC(hwnd,   hdc);  
            return   0;  
  case   WM_SIZE:  
            cxClient   =   LOWORD(lParam);  
            cyClient   =   HIWORD(lParam);  
             
            si.cbSize   =   sizeof(si);  
            si.fMask   =   SIF_ALL;  
            si.nMin   =   0;  
            si.nMax   =   cyClient;  
            si.nPage   =   cyClient   /   cyChar;  
            SetScrollInfo(hwnd,   SB_VERT,   &si,   TRUE);  
            return   0;  
  case   WM_VSCROLL:  
            si.cbSize   =   sizeof(si);  
            si.fMask   =   SIF_POS;  
            GetScrollInfo(hwnd,   SB_VERT,   &si);  
            iVscrollPos   =   si.nPos;  
   
            switch(LOWORD(wParam))  
            {  
              case   SB_LINEUP:  
                        si.nPos   -=   1;  
                        break;  
              case   SB_LINEDOWN:  
                        si.nPos   +=   1;  
                        break;  
              case   SB_PAGEUP:  
                        si.nPos   -=   cyClient   /   cyChar;  
                        break;  
              case   SB_PAGEDOWN:  
                        si.nPos   +=   cyClient   /   cyChar;  
                        break;  
              case   SB_THUMBTRACK:  
                        si.nPos   =   HIWORD(wParam);  
                        break;              
            }  
            si.fMask   =   SIF_POS;  
            SetScrollInfo(hwnd,   SB_VERT,   &si,   TRUE);  
            si.fMask   =   SIF_POS;  
            GetScrollInfo(hwnd,   SB_VERT,   &si);  
             
            if(iVscrollPos   !=   si.nPos)  
            {  
                      ScrollWindow(hwnd,   0,   cyChar   *   (iVscrollPos   -   si.nPos),   NULL,   NULL);  
                      UpdateWindow(hwnd);  
            }  
            return   0;  
  case   WM_PAINT:  
            hdc   =   BeginPaint(hwnd);  
   
            si.cbSize   =   sizeof(si);  
            si.fMask   =   SIF_POS;  
            GetScrollInfo(hwnd,   SB_VERT,   &si);  
            iVscrollPos   =   si.nPos;  
   
            iBeginPaint   =   max(0,   iVscrollPos   +   ps.rcPaint.top   /   cyChar);  
            iEndPaint   =   min(cyClient,   iVscrollPos   +   ps.rcPaint.bottom   /   cyChar);  
   
            for(i   =   iBeginPaint;   i   <=   iEndPaint;   i++)  
            {  
                      MoveToEx(hdc,   0,   (i   -   iVscrollPos)   *   cyChar,   NULL);  
                      LineTo(hdc,   cxClient,   (i   -   iVscrollPos)   *   cyChar);  
                      TextOut(hdc,   0,   (i   -   iVscrollPos)   *   cyChar,   buffer,  
                  wsprintf(buffer,   "%d",   i));  
            }  
            EndPaint(hwnd,   hdc);  
            return   0;  
  case   WM_DESTROY:  
            PostQuitMessage(0);  
            return   0;  
  }  
  return   DefWindowProc(hwnd,   message,   wParam,   lParam);  
  }  
  这里给出了一个窗口函数,这程序的效果就是随着滚动条的滚动,客户区的数字也跟着滚动,我不明白的地方是ScrollWindow函数的用法和在WM_PAINT消息里的处理机制,哪位给我解析解析下!Top

9 楼fixopen(dup)回复于 2003-08-04 10:25:39 得分 0

ScrollWindow的作用是构造一个SCROLLINFO结构,充填它的成员,记录出滚动相关的信息。然后post出WM_PAINT消息。  
   
  这样,在你处理该消息时,你可以取出SCROLLINFO记录的信息,然后画出来就是了。Top

10 楼BAYERN(我有个愿望-要把月亮踹成直的,把太阳捏成方的)回复于 2003-08-04 10:51:09 得分 0

study.Top

11 楼yndfcd(YNDFCD)回复于 2003-08-04 15:25:49 得分 0

BOOL   ScrollWindow(  
      HWND   hWnd,         //   handle   to   window   to   scroll  
      int   XAmount,     //   amount   of   horizontal   scrolling  
      int   YAmount,     //   amount   of   vertical   scrolling  
      CONST   RECT   *lpRect,  
                                  //   address   of   structure   with   scroll   rectangle  
      CONST   RECT   *lpClipRect    
                                  //   address   of   structure   with   clip   rectangle  
  );  
   
  MSDN上的解释很清楚,不知道你为什么看不懂。  
  第一个参数不用说了。第二三个参数分别为水平方向和垂直方向的滚动距离。  
  第四个参数指明窗口的哪一个部需要滚动。你可以设为NULL表示整个窗口都要滚动。  
  第五个参数为要更新的窗口区域。窗口滚动后,如果不更新是看不出效果的。是看不出效果的。这个参数就相当于InvalidateRect的第二个参数。Top

12 楼arock(人渣人)回复于 2003-08-05 11:20:42 得分 0

哪位大佬给我解析解析上面的程序WM_PAINT消息里是怎样画图的!Top

13 楼arock(人渣人)回复于 2003-08-06 11:32:26 得分 0

呀,怎么没人给我解析一下呢!Top

14 楼fixopen(dup)回复于 2003-08-18 08:31:18 得分 0

画图的一般步骤是:获取绘画句柄(BeginPaint),画,释放绘画句柄(EndPaint)。  
  其中,画的时候,先获取要画的区域信息(scrollinfo),然后计算出画的位置,画。Top

相关问题

  • 请教各位各位!!
  • 请问各位?
  • 各位小心
  • 各位大哥.....
  • 各位老大:
  • 各位累吗?
  • 各位早呀!!!
  • 各位helpme
  • 谢谢各位!
  • 请教各位!!

关键词

  • 函数
  • mfc
  • 书

得分解答快速导航

  • 帖主:arock

相关链接

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

广告也精彩

反馈

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