2 * Windows Properties Functions
4 static char Copyright
[] = "Copyright Martin Ayotte, 1994";
23 typedef PROPENTRY
*LPPROPENTRY
;
26 /*************************************************************************
27 * RemoveProp [USER.24]
29 HANDLE
RemoveProp(HWND hWnd
, LPSTR lpStr
)
35 if (((DWORD
)lpStr
& 0xFFFF0000) == 0L)
36 printf("RemoveProp(%04X, Atom %04X)\n", hWnd
, LOWORD((DWORD
)lpStr
));
38 printf("RemoveProp(%04X, '%s')\n", hWnd
, lpStr
);
40 wndPtr
= WIN_FindWndPtr(hWnd
);
42 printf("RemoveProp // Bad Window handle !\n");
45 lpProp
= (LPPROPENTRY
) GlobalLock(wndPtr
->hProp
);
46 if (lpProp
== NULL
) return 0;
48 if ((((DWORD
)lpStr
& 0xFFFF0000) == 0L &&
49 lpProp
->Atom
== LOWORD((DWORD
)lpStr
)) ||
50 (((DWORD
)lpStr
& 0xFFFF0000) != 0L &&
51 strcmp(lpProp
->PropName
, lpStr
) == 0)) {
52 printf("RemoveProp // Property found ! hData=%04X\n", lpProp
->hData
);
53 hOldData
= lpProp
->hData
;
54 if (lpProp
->lpPrevProp
!= NULL
)
55 ((LPPROPENTRY
)lpProp
->lpPrevProp
)->lpNextProp
=
57 if (lpProp
->lpNextProp
!= NULL
)
58 ((LPPROPENTRY
)lpProp
->lpNextProp
)->lpPrevProp
=
60 if (lpProp
->PropName
!= NULL
) free(lpProp
->PropName
);
62 GlobalUnlock(wndPtr
->hProp
);
65 if (lpProp
->lpNextProp
== NULL
) break;
66 lpProp
= lpProp
->lpNextProp
;
68 GlobalUnlock(wndPtr
->hProp
);
69 printf("RemoveProp // Property not found !\n");
74 /*************************************************************************
77 HANDLE
GetProp(HWND hWnd
, LPSTR lpStr
)
82 if (((DWORD
)lpStr
& 0xFFFF0000) == 0L)
83 printf("GetProp(%04X, Atom %04X)\n", hWnd
, LOWORD((DWORD
)lpStr
));
85 printf("GetProp(%04X, '%s')\n", hWnd
, lpStr
);
87 wndPtr
= WIN_FindWndPtr(hWnd
);
89 printf("GetProp // Bad Window handle !\n");
92 lpProp
= (LPPROPENTRY
) GlobalLock(wndPtr
->hProp
);
93 if (lpProp
== NULL
) return 0;
95 if ((((DWORD
)lpStr
& 0xFFFF0000) == 0L &&
96 lpProp
->Atom
== LOWORD((DWORD
)lpStr
)) ||
97 (((DWORD
)lpStr
& 0xFFFF0000) != 0L &&
98 strcmp(lpProp
->PropName
, lpStr
) == 0)) {
99 printf("GetProp // Property found ! hData=%04X\n", lpProp
->hData
);
100 GlobalUnlock(wndPtr
->hProp
);
101 return lpProp
->hData
;
103 if (lpProp
->lpNextProp
== NULL
) break;
104 lpProp
= lpProp
->lpNextProp
;
106 printf("GetProp // Property not found !\n");
107 GlobalUnlock(wndPtr
->hProp
);
112 /*************************************************************************
115 BOOL
SetProp(HWND hWnd
, LPSTR lpStr
, HANDLE hData
)
119 LPPROPENTRY lpNewProp
;
122 if (((DWORD
)lpStr
& 0xFFFF0000) == 0L)
123 printf("SetProp(%04X, Atom %04X, %04X)\n",
124 hWnd
, LOWORD((DWORD
)lpStr
), hData
);
126 printf("SetProp(%04X, '%s', %04X)\n", hWnd
, lpStr
, hData
);
128 wndPtr
= WIN_FindWndPtr(hWnd
);
129 if (wndPtr
== NULL
) {
130 printf("SetProp // Bad Window handle !\n");
133 lpProp
= (LPPROPENTRY
) GlobalLock(wndPtr
->hProp
);
134 if (lpProp
!= NULL
) {
136 if ((((DWORD
)lpStr
& 0xFFFF0000) == 0L &&
137 lpProp
->Atom
== LOWORD((DWORD
)lpStr
)) ||
138 (((DWORD
)lpStr
& 0xFFFF0000) != 0L &&
139 strcmp(lpProp
->PropName
, lpStr
) == 0)) {
141 printf("SetProp // change already exinsting property !\n");
143 lpProp
->hData
= hData
;
144 GlobalUnlock(wndPtr
->hProp
);
147 if (lpProp
->lpNextProp
== NULL
) break;
148 lpProp
= lpProp
->lpNextProp
;
151 hNewProp
= GlobalAlloc(GMEM_MOVEABLE
, sizeof(PROPENTRY
));
152 lpNewProp
= (LPPROPENTRY
) GlobalLock(hNewProp
);
153 if (lpNewProp
== NULL
) {
154 printf("SetProp // Can't allocate Property entry !\n");
155 GlobalUnlock(wndPtr
->hProp
);
159 printf("SetProp // entry allocated %08X\n", lpNewProp
);
161 if (lpProp
== NULL
) {
162 wndPtr
->hProp
= hNewProp
;
163 lpNewProp
->lpPrevProp
= NULL
;
165 printf("SetProp // first entry \n");
169 lpProp
->lpNextProp
= lpNewProp
;
170 lpNewProp
->lpPrevProp
= lpProp
;
172 lpNewProp
->lpNextProp
= NULL
;
173 lpNewProp
->hData
= hData
;
174 if (((DWORD
)lpStr
& 0xFFFF0000) == 0L) {
175 lpNewProp
->PropName
= NULL
;
176 lpNewProp
->Atom
= LOWORD((DWORD
)lpStr
);
180 lpNewProp
->PropName
= malloc(strlen(lpStr
));
181 if (lpNewProp
->PropName
== NULL
) {
182 printf("SetProp // Can't allocate memory for Property Name !\n");
183 GlobalUnlock(wndPtr
->hProp
);
186 strcpy(lpNewProp
->PropName
, lpStr
);
188 GlobalUnlock(hNewProp
);
189 GlobalUnlock(wndPtr
->hProp
);
194 /*************************************************************************
195 * EnumProps [USER.27]
197 int EnumProps(HWND hWnd
, FARPROC lpEnumFunc
)
203 printf("EnumProps(%04X, %08X)\n", hWnd
, lpEnumFunc
);
204 wndPtr
= WIN_FindWndPtr(hWnd
);
205 if (wndPtr
== NULL
) {
206 printf("EnumProps // Bad Window handle !\n");
209 lpProp
= (LPPROPENTRY
) GlobalLock(wndPtr
->hProp
);
210 if (lpProp
== NULL
) return 0;
211 if (lpEnumFunc
!= NULL
) return 0;
213 printf("EnumProps // lpProp->Atom=%04X !\n", lpProp
->Atom
);
214 str
= (LPSTR
)MAKELONG(lpProp
->Atom
, 0);
215 if (lpProp
->PropName
!= NULL
) {
216 printf("EnumProps // lpProp->PropName='%s' !\n", lpProp
->PropName
);
217 str
= lpProp
->PropName
;
220 nRet
= (*lpEnumFunc
)((HWND
)hWnd
, (WORD
)0,
221 (LPSTR
)str
, (HANDLE
)lpProp
->hData
);
223 nRet
= CallBack16(lpEnumFunc
, 4, (HANDLE
)lpProp
->hData
,
224 (LPSTR
)str
, (WORD
)0, (HWND
)hWnd
);
226 if (nRet
== 0) break;
227 if (lpProp
->lpNextProp
== NULL
) break;
228 lpProp
= lpProp
->lpNextProp
;
230 GlobalUnlock(wndPtr
->hProp
);