LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: rambo0808

MiniGUI什么语句可获取主窗口句柄,等同于VC中AfxGetApp()->GetMainWnd();

[复制链接]
 楼主| 发表于 2007-5-5 00:04:50 | 显示全部楼层
祝论坛的大虾们五一快乐~~~

dave3086给出的代码的运行结果是

  1. hdc = BeginPaint (hWnd);
  2. hdcMem = CreateCompatibleDC(hdc);
  3. LoadBitmapFromFile (hdcMem, &s_bmp, bmpno);       
  4. FillBoxWithBitmap (hdcMem, 0, 0, 512, 480, &s_bmp);
  5. UnloadBitmap (&s_bmp);
  6. BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0);
  7. DeleteCompatibleDC (hdcMem);


  8. if(bmpno[0] == '3' && bmpno[1] == '1')              
  9.   {
  10.             bmpno[0] = '0';
  11.             bmpno[1] = '0';
  12.             }

  13. ...

  14. 这段代码运行的结果还是出现刷屏现象,程度和前面的一样
复制代码

  1. hdc = BeginPaint (hWnd);
  2. LoadBitmapFromFile (hdc, &s_bmp, bmpno);
  3. hdcMem = CreateMemDCFromBitmap (hdc, &s_bmp);
  4. UnloadBitmap (&s_bmp);
  5. FillBoxWithBitmap (hdcMem, 0, 0, 512, 480, &s_bmp);

  6. if(bmpno[0] == '3' && bmpno[1] == '1')              
  7.   {
  8.             bmpno[0] = '0';
  9.             bmpno[1] = '0';
  10.             }
  11. ...

  12. 这段代码在执行过程中, 在客户区看不到图片图片的加载,应该是图片在内存中,没有加载到显存中      
复制代码

  1. hdc = BeginPaint (hWnd);
  2. LoadBitmapFromFile (hdc, &s_bmp, bmpno);
  3. hdcMem = CreateMemDCFromBitmap (hdc, &s_bmp);
  4. UnloadBitmap (&s_bmp);
  5. BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0);
  6. DeleteCompatibleDC (hdcMem);


  7. if(bmpno[0] == '3' && bmpno[1] == '1')              
  8.   {
  9.             bmpno[0] = '0';
  10.             bmpno[1] = '0';
  11.             }
  12. ...

  13. 这段代码在执行过程中, 当运行到 BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0),
  14. 程序就自动退出了,显示“已放弃”

  15. 当去掉 UnloadBitmap (&s_bmp);时,运行正常,可以显示图片加载,但是还是有刷屏现象
复制代码


以上就是运行的结果

关于刷屏,虽然当对显存操作的同时进行了比较耗时的操作,这样出现了刷屏,但在这个代码中

  1.         case MSG_TIMER:
  2.                 printf("this is a test4\n");
  3.                  InvalidateRect (hWnd, &rc, TRUE);
  4.                  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消息可以传过去
回复 支持 反对

使用道具 举报

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

本版积分规则

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