zoukankan      html  css  js  c++  java
  • 为什么WinCE中LoadBitmap加载位图后无法在其上DrawText?

    之前想在WinCE中背景图片上DrawText,可是不成功,代码如下:

    1 CPaintDC dc(this); // device context for painting
    2  
    3 CRect rect ;
    4 CBitmap bBitmap ; //加载背景图片
    5   CBitmap* pOldBitmap;
    6 CDC displayDC; //加载背景图片的内存DC
    7   CFont font;
    8
    9 rect.left = 80;
    10 rect.right = 180;
    11 rect.top = 15;
    12 rect.bottom = 47;
    13 font.CreateFont(30, 12, 0, 0, FW_BOLD, FALSE, FALSE, 0, ANSI_CHARSET,
    14 OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
    15 DEFAULT_QUALITY, DEFAULT_PITCH|FF_SWISS, _T("Arial") );
    16
    17 bBitmap.LoadBitmap(IDB_BITMAP1);//加载背景图片
    18  
    19 displayDC.CreateCompatibleDC(&dc);//创建兼容DC
    20  
    21 pOldBitmap = displayDC.SelectObject(&bBitmap); //选入背景图片
    22  
    23 displayDC.SetBkMode(TRANSPARENT); //透明背景
    24   displayDC.SetTextColor(RGB(255,255,255));
    25 displayDC.SelectObject(&font);
    26
    27 displayDC.DrawText(_T("Temp"),&rect,DT_SINGLELINE|DT_LEFT);//写字 画图。。。。
    28  
    29 dc.BitBlt(0,0,800,480,&displayDC,0,0,SRCCOPY);//内存DC---->屏幕DC

    奇怪的是同样的代码,在Windows中就可以。后终于在一篇文章中发现原因:

    LoadBitmap:

        从资源加载位图,返回Device Independent 位图。WINCE 的设计为了节省内存,从资源中加载的位图不进行内存的复制,位图buffer直接用的是进程内静态资源区域的空间。实际上是把不可写的位图选进了DC, 那么试图对这个DC进行任何的写操作都将失败。

    MSDN:

    Bitmaps returned from LoadBitmap are not writable. All calls to write to a bitmap returned by the LoadBitmap function will fail.

    我的解决办法是再创建一内存DC,并选入新建的兼容位图,将之前从资源加载位图的DC拷贝过来,就可以DrawText了。代码如下:

    1 tempDC.CreateCompatibleDC(pDC);
    2 DisplayDC.CreateCompatibleDC(pDC);
    3
    4 pOldBitmap = tempDC.SelectObject(&bBitmap); //选入背景位图
    5 bDrawbmp.CreateCompatibleBitmap(pDC,800,480); //创建屏幕DC兼容位图才能在其上写字
    6 pOldDrawbmp = DisplayDC.SelectObject(&bDrawbmp); //选入兼容位图
    7 DisplayDC.BitBlt(0,0,800,480,&tempDC,0,0,SRCCOPY); //将tempDC中的位图拷到DisplayDC中
    8  
    9 DisplayDC.SetBkMode(TRANSPARENT); //透明背景
    10  DisplayDC.SetTextColor(WHITE);
    11 DisplayDC.DrawText(_T("Temp"),&rect,DT_SINGLELINE|DT_LEFT);//写字 画图。。。。
    12  

    不知道有没有更好的解决办法?有的话麻烦留言相告,谢了 :)。

  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/dahai/p/1762945.html
Copyright © 2011-2022 走看看