|
楼主 |
发表于 2007-5-5 00:04:50
|
显示全部楼层
祝论坛的大虾们五一快乐~~~
dave3086给出的代码的运行结果是
- hdc = BeginPaint (hWnd);
- hdcMem = CreateCompatibleDC(hdc);
- LoadBitmapFromFile (hdcMem, &s_bmp, bmpno);
- FillBoxWithBitmap (hdcMem, 0, 0, 512, 480, &s_bmp);
- UnloadBitmap (&s_bmp);
- BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0);
- DeleteCompatibleDC (hdcMem);
- if(bmpno[0] == '3' && bmpno[1] == '1')
- {
- bmpno[0] = '0';
- bmpno[1] = '0';
- }
- ...
- 这段代码运行的结果还是出现刷屏现象,程度和前面的一样
复制代码
- hdc = BeginPaint (hWnd);
- LoadBitmapFromFile (hdc, &s_bmp, bmpno);
- hdcMem = CreateMemDCFromBitmap (hdc, &s_bmp);
- UnloadBitmap (&s_bmp);
- FillBoxWithBitmap (hdcMem, 0, 0, 512, 480, &s_bmp);
- if(bmpno[0] == '3' && bmpno[1] == '1')
- {
- bmpno[0] = '0';
- bmpno[1] = '0';
- }
- ...
- 这段代码在执行过程中, 在客户区看不到图片图片的加载,应该是图片在内存中,没有加载到显存中
复制代码
- hdc = BeginPaint (hWnd);
- LoadBitmapFromFile (hdc, &s_bmp, bmpno);
- hdcMem = CreateMemDCFromBitmap (hdc, &s_bmp);
- UnloadBitmap (&s_bmp);
- BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0);
- DeleteCompatibleDC (hdcMem);
- if(bmpno[0] == '3' && bmpno[1] == '1')
- {
- bmpno[0] = '0';
- bmpno[1] = '0';
- }
- ...
- 这段代码在执行过程中, 当运行到 BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0),
- 程序就自动退出了,显示“已放弃”
- 当去掉 UnloadBitmap (&s_bmp);时,运行正常,可以显示图片加载,但是还是有刷屏现象
复制代码
以上就是运行的结果
关于刷屏,虽然当对显存操作的同时进行了比较耗时的操作,这样出现了刷屏,但在这个代码中
- case MSG_TIMER:
- printf("this is a test4\n");
- InvalidateRect (hWnd, &rc, TRUE);
- break;
复制代码
代码中的 InvalidateRect (hWnd, &rc, TRUE)破坏了显存中的数据,从他的破坏开始到我们创建了内存数据,在把内存数据加载到显存,这个过程的时间会不会太长,如果把
InvalidateRect (hWnd, &rc, TRUE)放在内存数据加载到显存的这个空当当中,不知道合不合理?
想这么试的时候突然发现个问题
PostMessage(hWnd, MSG_PAINT,0L, 0L);
// PostMessage 传MSG_PAINT消息传不过去
PostMessage(hWnd, MSG_ERASEBKGND,0L, 0L);
// PostMessage 传MSG_ERASEBKGND消息可以传过去 |
|