22 #ifndef BAGEL_MFC_WIN_HAND_H 23 #define BAGEL_MFC_WIN_HAND_H 25 #include "common/hashmap.h" 26 #include "bagel/mfc/afxwin.h" 35 bool operator()(
const void *x,
const void *y)
const {
41 uint operator()(
const void *x)
const {
53 return *(HANDLE *)&obj.m_hObject;
60 static HANDLE &GetHandle(
CDC &obj) {
61 return *(HANDLE *)&obj.m_hDC;
72 CMapPtrToPtr _permanentMap;
73 CMapPtrToPtr _temporaryMap;
80 T *FromHandle(HANDLE h) {
85 T *pObject = LookupPermanent(h);
86 if (pObject !=
nullptr)
88 else if ((pObject = LookupTemporary(h)) !=
nullptr) {
97 T *pTemp = (T *)T::CreateObject();
100 _temporaryMap[h] = pTemp;
108 for (
auto &entry : _temporaryMap) {
109 HANDLE h = entry._key;
110 T *pTemp = entry._value;
120 _temporaryMap.clear();
123 void SetPermanent(HANDLE h, T *permOb) {
124 assert(!LookupPermanent(h));
125 _permanentMap[(
void *)h] = permOb;
128 void RemoveHandle(HANDLE h) {
129 _permanentMap.erase((
void *)h);
132 inline T *LookupPermanent(HANDLE h)
const {
133 return _permanentMap.contains((
void *)h) ?
134 _permanentMap[(
void *)h] :
nullptr;
137 inline T *LookupTemporary(HANDLE h)
const {
138 return _temporaryMap.contains((
void *)h) ?
139 _temporaryMap[(
void *)h] :
nullptr;
Definition: afxwin.h:1934
Definition: win_hand.h:34
Definition: win_hand.h:40
Definition: win_hand.h:47