soui 5.0.0.1
Soui5 Doc
 
Loading...
Searching...
No Matches
SMemDC.cpp
1#include "souistd.h"
2#include "helper/SMemDC.h"
3SNSBEGIN
4
5SMemDC::SMemDC()
6 : m_bBmpOwner(FALSE)
7 , m_bHasBitmap(FALSE)
8 , m_hOldBmp(NULL)
9 , m_hDC(NULL)
10{
11}
12
13SMemDC::SMemDC(HDC hdc, const CRect &rc)
14 : m_bBmpOwner(FALSE)
15 , m_bHasBitmap(FALSE)
16 , m_hOldBmp(NULL)
17{
18 InitDC(hdc, rc);
19}
20
21SMemDC::SMemDC(HDC hdc, HBITMAP hBmp)
22 : m_bBmpOwner(FALSE)
23 , m_bHasBitmap(TRUE)
24{
25 m_hDC = CreateCompatibleDC(hdc);
26 SASSERT(m_hDC != NULL);
27 if (hBmp)
28 m_hOldBmp = (HBITMAP)::SelectObject(m_hDC, hBmp);
29 else
30 m_hOldBmp = NULL;
31 ::SetViewportOrgEx(m_hDC, 0, 0, NULL);
32}
33
34SMemDC::~SMemDC(void)
35{
36 DeleteDC();
37}
38
39HBITMAP SMemDC::SelectBitmap(HBITMAP hBmp)
40{
41 SASSERT(m_hDC);
42 if (hBmp)
43 {
44 m_hOldBmp = (HBITMAP)::SelectObject(m_hDC, hBmp);
45 m_bBmpOwner = FALSE;
46 m_bHasBitmap = TRUE;
47 ::SetViewportOrgEx(m_hDC, 0, 0, NULL);
48 return m_hOldBmp;
49 }
50 else if (m_bHasBitmap)
51 {
52 HBITMAP hBmp = (HBITMAP)::SelectObject(m_hDC, m_hOldBmp);
53 m_hOldBmp = NULL;
54 m_bBmpOwner = FALSE;
55 m_bHasBitmap = FALSE;
56 return hBmp;
57 }
58 else
59 {
60 return NULL;
61 }
62}
63
64void SMemDC::DeleteDC()
65{
66 if (m_hDC && m_hOldBmp)
67 {
68 HBITMAP hBmp = (HBITMAP)::SelectObject(m_hDC, m_hOldBmp);
69 if (m_bBmpOwner)
70 DeleteObject(hBmp);
71 }
72 if (m_hDC)
73 ::DeleteDC(m_hDC);
74 m_bHasBitmap = FALSE;
75 m_bBmpOwner = FALSE;
76}
77
78BOOL SMemDC::InitDC(HDC hdc, const CRect &rc)
79{
80 if (m_hDC)
81 return FALSE;
82 m_hDC = ::CreateCompatibleDC(hdc);
83 if (!m_hDC)
84 return FALSE;
85 HBITMAP hBmp = CreateCompatibleBitmap(hdc, rc.Width(), rc.Height());
86 if (!hBmp)
87 {
88 ::DeleteDC(m_hDC);
89 return FALSE;
90 }
91 m_hOldBmp = (HBITMAP)SelectObject(m_hDC, hBmp);
92 ::SetViewportOrgEx(m_hDC, -rc.left, -rc.top, NULL);
93 m_bHasBitmap = TRUE;
94 m_bBmpOwner = TRUE;
95 return TRUE;
96}
97
98SNSEND