win32编程中出现闪烁
/*程序实现的是输入字符并且在窗口显示出来,按下backspace键的时候消去一个
*/
下面是主要代码
i,还有szBuffer设置为全局变量
case WM_CHAR:
switch(wParam)
{
case '\b':
i--;
if(i<=0)
i=0;
szBuffer=' ';
break;
default:
szBuffer=wParam;
i++;
szBuffer=0;
}
break;
caseWM_PAINT:
GetClientRect(hwnd,&rect);
hdc=BeginPaint(hwnd,&ps);
DrawText(hdc,szBuffer,-1,&rect,DT_LEFT);
InvalidateRect(hwnd,&rect,false);//这一句如果不加上的话字符为什么不显示,加上之后就会闪烁,问一下有没有其他方案
EndPaint(hwnd,&ps);
return 0;
求助,希望有更好的解决方案 本帖最后由 santaclaus 于 2015-9-16 08:04 编辑
将以下两句移动WM_CHAR消息里,即该switch后面,break之前:
GetClientRect(hwnd,&rect);
DrawText(hdc,szBuffer,-1,&rect,DT_LEFT); santaclaus 发表于 2015-9-16 08:01
将以下两句移动WM_CHAR消息里,即该switch后面,break之前:
GetClientRect(hwnd,&rect);
DrawText(hdc ...
多谢你了,我的问题是这样解决的
把绘制代码放到WM_CHAR 中
并且在此之前获取设备环境描述表句柄
如果按照你的代码,没有设备描述表句柄,我输入不了汉字,你也可以试试
不管怎么,还是谢谢你了, 我说错了,是GetClientRect和InvalidateRect两句那到WM_CHAR里。Draw*还是你原来的样子。 santaclaus 发表于 2015-9-19 23:07
我说错了,是GetClientRect和InvalidateRect两句那到WM_CHAR里。Draw*还是你原来的样子。
完美解决,多谢大神 去掉InvalidateRect(hwnd,&rect,false);这句代码,这句代码是用来强制刷新界面的。 将InvalidateRect(hwnd,&rect,false)改为InvalidateRect(hwnd,NULL,false),并放在WM_CHAR的break之前就可以了
页:
[1]