HBITMAP paint (HWND hwnd) { HDC windc = ::GetwindowDC(hwnd); HDC memdc = ::CreateCompatibleDC(windc); HBITMAP bitmap = ::CreateCompatibleBitmap(windc,100,100); //Don't bother with the height and width ::SelectObject(memdc,(HGdioBJ)bitmap); /* DeleteDC(windc) here? */ //do the painting //... //painting done /*DeleteDC(memdc) here? */ return bitmap; /* Code does not reach here */ /* So where do I put DeleteObject(bitmap)? */ }
我的问题是何时何地删除位图? 另外,删除windc影响memdc? 或者memdc是纯粹创build的(并且不包含“指向”windc的信息)? 如果这是真的,那么创build位图和memdc后(在任何绘画之前)删除windc是适当的。
检测Windows jpeg图标
Linux上的时区转换C API,任何人?
检索要通过networking发送的ID3D11Texture2D数据
epoll在断开客户端时循环
DeleteDC(windc);
决不。 你必须打电话给ReleaseDC (windc); 代替。
After ::CreateCompatibleDC(windc); 你不需要windc ,也不必关心它会发生什么。 由CreateCompatibleDC返回的HDC只是派生了一些参数(设备相关的像素表示等),但是并没有以任何方式引用windc 。
而不是这个:
::SelectObject(memdc,(HGdioBJ)bitmap); //do the painting //... //painting done /*DeleteDC(memdc) here? */ return bitmap;
你必须这样做:
HGdioBJ prevBitmap = ::SelectObject(memdc,(HGdioBJ)bitmap); //do the painting //... //painting done ::SelectObject(memdc,prevBitmap); DeleteDC(memdc); return bitmap;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。