求指点c++绘图闪烁残留问题

程序的目的是希望在用户打开的当前窗口上按照一定的频率显示指定文字,理想效果是频率调得足够小时,用户的眼睛观察不到闪烁的文字
现在存在的问题是在某些不同的页面(比如vc6),文字信息会保持显示而刷新无效,而且似乎有明显的闪烁。
请求高手指点,下面是代码。
#include "stdafx.h"
#include "afxwin.h"
#include<windows.h>
//不显示黑框窗体
//#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
void drawtop()
{
char text[]="test";
//
CFont font;
font.CreateFont(
160, // nHeight
100, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体"));
HDC hdc = GetWindowDC(GetForegroundWindow());
SetTextColor(hdc,RGB(255,0,0));
//背景色透明
SetBkMode(hdc,TRANSPARENT);
SelectObject( hdc, font );
TextOut(hdc, 100, 100, text, sizeof(text));
ReleaseDC(NULL,hdc);
}

int main( void )
{

RECT rect;

int wait=10;

//自己按ctrl+c退出
while(true)
{
HWND hwnd=GetForegroundWindow();
GetWindowRect(hwnd,&rect);
drawtop();
Sleep(wait);
InvalidateRect(hwnd,&rect,true);
//RedrawWindow(hwnd,&rect,NULL,RDW_INVALIDATE);
Sleep(1000-wait);
}
return 0;
}
如果能在我的代码基础上修改解决问题,加100分,感谢高手

第1个回答  2017-03-17
避免窗口重绘造成的闪烁问题,最好的解决办法是采用内存缓冲绘图方式,可以解决因为背景色和前景色的重绘导致频繁闪烁的问题。追问

如果能给出具体的代码我愿意加分

追答

我试试哈

第2个回答  2017-04-04
刷新的代码这么写
RedrawWindow(NULL,NULL,0,RDW_ERASE|RDW_INVALIDATE|RDW_ALLCHILDREN);
可以解决残留问题本回答被提问者采纳

为啥错了……求c++大神指点……_(:з」∠)_
c++里面=是赋值符号,判断相等的符号是==,其次一般在网站的提交要求格式,你可以变成cout<<"Good Guess!"<<endl;试试

C++报“输出超限”错误,求指点?
第一,算法过于复杂,未在规定时间结束。第二,可能存在无限循环。第三,可能是数组越界

求大神指点,利用c++能画等高线图吗,怎么画?
等高线图matlab自然可以。但是你这个图和等高线图没啥关系吧。随便拿个画图工具就能画

C++ 非常奇怪的问题 可能是内存越界 求高手指点
没有代码和相关变量定义,无法判断。

C++问题。求指点c运行出错sign未初始化,怎么解决。。。
while循环之前加scanf("\\t%c",&sign);来表明你的初始循环控制,不然编译器没法判断sign到底为何值

C++迭代求根,求指点
呃,这个代码的问题比较诡异哈,应该会报除数为0的错误直接退出,原因如下:do while之前b=sqrt(a);进入do后c=b=sqrt(a), b=1\/2*( b+a\/b)=0, 原因是最左边的1\/2=0,需要改成1.0\/2,或者整个改写成b=(b+a\/b)\/2; d=fabs(b-c)=c=sqrt(a);d>0.00001,继续do c=b=0;...

C++问题。求指点Run-Time Check Failure #3 - The variable 'a' is...
首先,你scanf("%f,%f,%f,&a,&b,&c");有问题,引号的位置不对。应该改成scanf("%f,%f,%f",&a,&b,&c);其次,建议你A=a*a,B=b*b,C=c*c;这语句放在scanf后面

求大神指点 这些都是什么 能否卸载?卸载了对电脑会有影响吗?会不会有...
亲,这些C++都不可以卸载哦 卸载了会导致你的部分程序不能用的,至于是哪些程序,不好说 SQL是数据库,卸载了没有问题 可以使用腾讯电脑管家的软件管理进行卸载,它可以侦测卸载过程,发现有残留的话会自动启动强力卸载模式,清扫卸载残留,确保你可以干净彻底的卸载它们 ...

求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错,谢谢了...
你有几个地方有错误:1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值 2.既然你已经定了个位为7,直接给m赋7就可以了吧。3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n\/=10,开始应该用个变量保存这个n的值 4....

c与指针的问题。下面是图像处理的源代码,很基础的c。求大神指点。
上面那个是C++中的引用,这样写当然是可以的,引用比如有个人名字叫明天,朋友们又叫他小明,同一个人,无论怎么叫都是他;下面那个是指针,当然不行。引用又不等于指针;指针是说另外有一个变量存了这个变量的地址,但是另外这个变量肯定不等于这个变量啊,就是这么回事。

相似回答