文本横向滚动的源代码?
不要MFC的,多谢!

解决方案 »

  1.   

    我在论坛中找到了这个……
    但是编译时提示:
    error C2065: '_CTRL_FMT_' : undeclared identifier
    error C2065: 'tEF_X_MOVE' : undeclared identifier
    error C2065: 'tEF_Y_MOVE' : undeclared identifier
    error C2065: 'tEF_Z_MOVE' : undeclared identifier
    error C2065: '_SUB_LeftTop_' : undeclared identifier
    error C2065: '_SUB_RightBottom_' : undeclared identifier
    error C2065: '_SUB_CTRL_FMT_' : undeclared identifier
    error C2065: '_SCROLL_TEXT_' : undeclared identifier
    error C2065: 'TextFont' : undeclared identifier
    error C2065: 'tEF_FLOAT' : undeclared identifier
    上面这些都是怎么定义的呀?[转贴]
    //给你一个函数,很早以前的了,可以在一幅背景图上移动显示一个文本文件的所有内容。使用方法,先调用:ShowText( hdc, rect, szTextFileName ); 进行初始化,然后在定时器中调用ShowScrollText函数就可以了,具体的使用你可以看懂源代码在进行修改,原理差不多。typedef struct
    {
     unsigned long _CTRL_FMT_;
     char  * textBuff;            //文本缓冲区,<32000个字节
     HFONT   TextFont;            //滚动的文本字体句柄
     COLORREF TextColor,TextBkColor;
     int     TextOffX,TextOffY;
     int     TextWidth,TextHigh;
     int     DX,DY; 
     HDC     hBgDC;               //背景DC
     HBITMAP hBgBMP;              //背景BMP
     HDC     hFgDC;               //前景DC
     HBITMAP hFgBMP;              //前景BMP
     int     left,top;            //显示区域的左上角坐标
     int     width,high;          //显示区域的宽,高
     RECT    rect;                //背景的显示区域
     int     dx,dy,dz;            //滚动的三个方向的步进值
    }_Scroll_Text_;_Scroll_Text_ ScrollText;void ShowText(HDC hdc,RECT rect, char *textFile)
    {
     FILE * fp;
     char * textBuff;
     unsigned int fileSize;
     RECT bkRect; fp=fopen(textFile,"rt");
     fileSize=(unsigned int)filelength(fileno(fp))+1;
     if(fileSize>32000) fileSize=32000;
     textBuff=malloc(fileSize);
     memset(textBuff,0,fileSize);
     fread(textBuff,fileSize,1,fp);
     fclose(fp); CreatFont(FALSE);
     if((_CTRL_FMT_&tEF_X_MOVE)||
     (_CTRL_FMT_&tEF_Y_MOVE)||
     (_CTRL_FMT_&tEF_Z_MOVE))
     {
      ScrollText._CTRL_FMT_=_CTRL_FMT_;
      ScrollText.textBuff = textBuff;
      ScrollText.TextColor=_SUB_LeftTop_;
      ScrollText.TextBkColor=_SUB_RightBottom_;
      ScrollText.TextOffX=HIWORD(_SUB_CTRL_FMT_);
      ScrollText.TextOffY=LOWORD(_SUB_CTRL_FMT_);  ScrollText.width = rect.right-rect.left+1;
      ScrollText.high  = rect.bottom-rect.top+1;
      ScrollText.left  = rect.left;
      ScrollText.top   = rect.top;  ScrollText.rect.left   = 0;
      ScrollText.rect.top    = 0;
      ScrollText.rect.right  = ScrollText.width;
      ScrollText.rect.bottom = ScrollText.high;  ScrollText.hBgBMP=CreateCompatibleBitmap(hdc,
     ScrollText.width,
     ScrollText.high);
      ScrollText.hBgDC=CreateCompatibleDC(hdc);
      SelectObject(ScrollText.hBgDC,ScrollText.hBgBMP);  ScrollText.hFgBMP=CreateCompatibleBitmap(hdc,
     ScrollText.width,
     ScrollText.high);
      ScrollText.hFgDC=CreateCompatibleDC(hdc);
      SelectObject(ScrollText.hFgDC,ScrollText.hFgBMP);  SetBkMode(ScrollText.hFgDC,TRANSPARENT);
      SelectObject(ScrollText.hFgDC, ScrollText.TextFont);  BitBlt(ScrollText.hBgDC,0,0,ScrollText.width,ScrollText.high,
    hdc,rect.left,rect.top,SRCCOPY);  _SCROLL_TEXT_=TRUE;
     }
     else
      _SCROLL_TEXT_=FALSE; SetBkMode(hdc,TRANSPARENT);
     SelectObject(hdc, TextFont);
     if(_CTRL_FMT_&tEF_FLOAT)
     {
      bkRect.left   =rect.left   +HIWORD(_SUB_CTRL_FMT_);
      bkRect.top    =rect.top    +LOWORD(_SUB_CTRL_FMT_);
      bkRect.right  =rect.right  +HIWORD(_SUB_CTRL_FMT_);
      bkRect.bottom =rect.bottom +LOWORD(_SUB_CTRL_FMT_);  SetTextColor(hdc,_SUB_RightBottom_);
      DrawText(hdc,textBuff,-1,&bkRect,DT_LEFT|DT_NOPREFIX);
      SetTextColor(hdc,_SUB_LeftTop_);
      DrawText(hdc,textBuff,-1,&rect,DT_LEFT|DT_NOPREFIX);  ScrollText.TextHigh=DrawText(hdc,textBuff,-1,&rect,
     DT_LEFT|DT_NOPREFIX|DT_CALCRECT);
      ScrollText.TextWidth=rect.right;
     }
     else
     {
      SetTextColor(hdc,_SUB_LeftTop_);
      DrawText(hdc,textBuff,-1,&rect,DT_LEFT|DT_NOPREFIX);
      ScrollText.TextHigh=DrawText(hdc,textBuff,-1,&rect,
     DT_LEFT|DT_NOPREFIX|DT_CALCRECT);
      ScrollText.TextWidth=rect.right;
     }
     if(!_SCROLL_TEXT_)
     {
      DeleteObject(TextFont);
      free(textBuff);
     }
    }void ShowScrollText(HWND hWnd)
    {
     HDC hdc;
     RECT bkRect; hdc=GetDC(hWnd);
     BitBlt(ScrollText.hFgDC,0,0,ScrollText.width,ScrollText.high,
      ScrollText.hBgDC,0,0,SRCCOPY); ScrollText.DX+=ScrollText.dx;
     if(abs(ScrollText.DX)<ScrollText.TextWidth)
      ScrollText.rect.left+=ScrollText.dx;
     else
     {
      ScrollText.DX=
      ScrollText.rect.left=0;
     } ScrollText.DY+=ScrollText.dy;
     if(abs(ScrollText.DY)<ScrollText.TextHigh)
      ScrollText.rect.top +=ScrollText.dy;
     else
     {
      ScrollText.DY=
      ScrollText.rect.top=0;
     }// SetBkMode(ScrollText.hFgDC,TRANSPARENT);
    // SelectObject(ScrollText.hFgDC, ScrollText.TextFont); if(ScrollText._CTRL_FMT_&tEF_FLOAT)
     {
      bkRect.left   =ScrollText.rect.left   +ScrollText.TextOffX;
      bkRect.top    =ScrollText.rect.top    +ScrollText.TextOffY;
      bkRect.right  =ScrollText.rect.right  +ScrollText.TextOffX;
      bkRect.bottom =ScrollText.rect.bottom +ScrollText.TextOffY;  SetTextColor(ScrollText.hFgDC,ScrollText.TextBkColor);
      DrawText(ScrollText.hFgDC,ScrollText.textBuff,-1,&bkRect,DT_LEFT|DT_NOPREFIX);
      SetTextColor(ScrollText.hFgDC,ScrollText.TextColor);
      DrawText(ScrollText.hFgDC,ScrollText.textBuff,-1,&ScrollText.rect,DT_LEFT|DT_NOPREFIX);
     }
     else
     {
      SetTextColor(ScrollText.hFgDC,ScrollText.TextColor);
      DrawText(ScrollText.hFgDC,ScrollText.textBuff,-1,&ScrollText.rect,DT_LEFT|DT_NOPREFIX);
     } BitBlt(hdc,ScrollText.left,ScrollText.top,ScrollText.width,ScrollText.high,
      ScrollText.hFgDC,0,0,SRCCOPY);
     ReleaseDC(hWnd,hdc);
    }