zoukankan      html  css  js  c++  java
  • SystemBar显示的一点问题

    今天调试SystemBar,主要功能是: 由主页面发送WM_COPYDATA消息给SystemBar,传递一个结构,结构中包含了要用到的图标,窗口句柄,自定义的消息等等内容,问题是,我在SystemBar中总是不能正确的显示出图标来。

     1 case WM_PAINT:  
     2         hdc = BeginPaint(hWnd, &ps);  
     3         dwErrorCode = GetLastError();  
     4         if (hdc && pThis)  
     5         {  
     6             int left = ps.rcPaint.left;  
     7             int top = ps.rcPaint.top;  
     8             int width = ps.rcPaint.right - left;  
     9             int height = ps.rcPaint.bottom - top;  
    10             BitBlt(hdc, left, top, width, height, pThis->m_hMemDC, left, top, SRCCOPY);  
    11         }  
    12         EndPaint(hWnd, &ps);  
    13         break;  

     这样简单的一段代码却总是不能正常显示,感觉是MemDC出了问题,这个还没有解决,最后被迫在绘制的地方使用了硬件DC。代码如下:

     1 LRESULT CSystemBar::Draw()  
     2 {  
     3     //add code here...  
     4     HDC hDC = GetDC(m_hwndHost);  
     5     for (int i = 0; i < m_iconList.count; i++)  
     6     {  
     7         int iconIndex = m_iconList.IconArray[i].index;  
     8         RECT rc;  
     9         rc.left = SYSTEM_BAR_ICON_START_POS + i*(SYSTEM_BAR_ICON_WIDTH + SYSTEM_BAR_ICON_INTERSPACE);  
    10         rc.right = rc.left + SYSTEM_BAR_ICON_WIDTH;  
    11         rc.top = m_iDisplayHeight - BAR_HEIGHT + (BAR_HEIGHT - SYSTEM_BAR_ICON_HIGHT)/2;  
    12         rc.bottom = rc.top + SYSTEM_BAR_ICON_HIGHT;  
    13         HBITMAP hBmp = LoadBitmap(g_hInst, MAKEINTRESOURCE(iconIndex));  
    14         HDC hMemDC = CreateCompatibleDC(hDC);  
    15         DWORD dwErrorCode = GetLastError();  
    16         HGDIOBJ hOldBmp = SelectObject(hMemDC,hBmp);  
    17         BitBlt(hDC, 0, 0, 56, 30, hMemDC, 0, 0, SRCCOPY);  
    18         SelectObject(hMemDC,hOldBmp);  
    19         DeleteObject(hBmp);  
    20         DeleteDC(hMemDC);  
    21     }  
    22     ReleaseDC(m_hwndHost,hDC);  
    23     return 0;  
    24 }  

     

    本来想让硬件DC当作参数传进来,但不知道为什么总是无效句柄,难道是因为我的硬件DC是在窗口PROC里边获取的,而PROC不属于这个类引起的?后来只好根据窗口句柄重新获取DC,这才搞定。

    Mark一下,以防自己忘记~~~

  • 相关阅读:
    springboot + mybatis + 多数据源
    Git 常见问题汇总
    Git 常见问题汇总
    sqlserver存储过程实现多表分页
    bzoj5248(洛谷4363)(2018九省联考)一双木棋
    bzoj4033 [HAOI2015]树上染色
    bzoj3195 [Jxoi2012]奇怪的道路
    bzoj1426(洛谷4550)收集邮票
    bzoj4806 炮
    bzoj1090(SCOI2003)字符串折叠
  • 原文地址:https://www.cnblogs.com/yueang/p/2649834.html
Copyright © 2011-2022 走看看