鱼C论坛

 找回密码
 立即注册
查看: 3105|回复: 6

win32编程中出现闪烁

[复制链接]
发表于 2015-9-15 23:08:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
/*
       程序实现的是输入字符并且在窗口显示出来,按下backspace键的时候消去一个
*/
下面是主要代码
i,还有szBuffer设置为全局变量
case WM_CHAR:
            
              switch(wParam)
              {
                  case '\b':
                         i--;
                         if(i<=0)
                         i=0;
                        szBuffer[i]=' ';
                       break;
             default:                     
                        szBuffer[i]=wParam;
                        i++;
                        szBuffer[i]=0;
              }
                 break;
           case  WM_PAINT:
                 GetClientRect(hwnd,&rect);
                 hdc=BeginPaint(hwnd,&ps);
                 DrawText(hdc,szBuffer,-1,&rect,DT_LEFT);
                InvalidateRect(hwnd,&rect,false);//这一句如果不加上的话字符为什么不显示,加上之后就会闪烁,问一下有没有其他方案
                 EndPaint(hwnd,&ps);
                 return 0;



求助,希望有更好的解决方案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-16 08:01:34 | 显示全部楼层
本帖最后由 santaclaus 于 2015-9-16 08:04 编辑

将以下两句移动WM_CHAR消息里,即该switch后面,break之前:
GetClientRect(hwnd,&rect);
DrawText(hdc,szBuffer,-1,&rect,DT_LEFT);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-19 22:56:36 | 显示全部楼层
santaclaus 发表于 2015-9-16 08:01
将以下两句移动WM_CHAR消息里,即该switch后面,break之前:
GetClientRect(hwnd,&rect);
DrawText(hdc ...

多谢你了,我的问题是这样解决的
把绘制代码放到WM_CHAR 中
并且在此之前获取设备环境描述表句柄
如果按照你的代码,没有设备描述表句柄,我输入不了汉字,你也可以试试
不管怎么,还是谢谢你了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-19 23:07:19 | 显示全部楼层
我说错了,是GetClientRect和InvalidateRect两句那到WM_CHAR里。Draw*还是你原来的样子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-22 00:02:08 | 显示全部楼层
santaclaus 发表于 2015-9-19 23:07
我说错了,是GetClientRect和InvalidateRect两句那到WM_CHAR里。Draw*还是你原来的样子。

完美解决,多谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-26 07:33:18 | 显示全部楼层
去掉InvalidateRect(hwnd,&rect,false);这句代码,这句代码是用来强制刷新界面的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-28 10:30:01 | 显示全部楼层
将InvalidateRect(hwnd,&rect,false)改为InvalidateRect(hwnd,NULL,false),并放在WM_CHAR的break之前就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 13:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表