急!在线等待 在vc对话框程序中,如何在客户区上用内存显示方式实现一段文字的垂直滚动?能保证屏幕不闪烁?代码者高分相送! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Use Webbrowser control and MARQUEE 转贴://给你一个函数,很早以前的了,可以在一幅背景图上移动显示一个文本文件的所有内容。使用方法,先调用: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);} win32 窗口应用程序 d3d怎么处理物体伸缩时的纹理,希望纹理不要被拉伸 关于源目mack地址~~ 打开对话框修改默认目录的问题。 自定义复合控件的消息问题 关于文件存储的问题 CTypedPtrMap使用求救! 如何自画窗口的TITALEBAR 0x80070005 Calling ConnectServer with SERVICE shockwave flash object 不支持此接口 请教:fft变换,有经验的高手请务必进来看一下呀 CSDN!菜鸟聚集地!高手?哪有高手?炒分高手倒满多
//给你一个函数,很早以前的了,可以在一幅背景图上移动显示一个文本文件的所有内容。使用方法,先调用: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);
}