2 * Common controls functions
4 * Copyright 1997 Dimitrie O. Paun
19 /***********************************************************************
20 * DrawStatusText32A [COMCTL32.5][COMCTL32.27]
22 void WINAPI DrawStatusText32A( HDC32 hdc, LPRECT32 lprc, LPCSTR text,
26 UINT32 border = BDR_SUNKENOUTER;
29 border = BDR_RAISEDOUTER;
30 else if(style==SBT_NOBORDERS)
33 DrawEdge32(hdc, &r, border, BF_RECT|BF_ADJUST|BF_MIDDLE);
37 int oldbkmode = SetBkMode32(hdc, TRANSPARENT);
39 DrawText32A(hdc, text, lstrlen32A(text),
40 &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
41 if (oldbkmode != TRANSPARENT)
42 SetBkMode32(hdc, oldbkmode);
47 /***********************************************************************
48 * DrawStatusText32W (COMCTL32.28)
50 void WINAPI DrawStatusText32W( HDC32 hdc, LPRECT32 lprc, LPCWSTR text,
53 LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, text );
54 DrawStatusText32A(hdc, lprc, p, style);
55 HeapFree( GetProcessHeap(), 0, p );
58 /***********************************************************************
59 * CreateStatusWindow32A [COMCTL32.6][COMCTL32.21]
61 HWND32 WINAPI CreateStatusWindow32A( INT32 style, LPCSTR text, HWND32 parent,
64 return CreateWindow32A(STATUSCLASSNAME32A, text, style,
65 CW_USEDEFAULT32, CW_USEDEFAULT32,
66 CW_USEDEFAULT32, CW_USEDEFAULT32,
70 /***********************************************************************
71 * CreateStatusWindow32W (COMCTL32.22)
73 HWND32 WINAPI CreateStatusWindow32W( INT32 style, LPCWSTR text, HWND32 parent,
76 return CreateWindow32W((LPCWSTR)STATUSCLASSNAME32W, text, style,
77 CW_USEDEFAULT32, CW_USEDEFAULT32,
78 CW_USEDEFAULT32, CW_USEDEFAULT32,
82 /***********************************************************************
83 * CreateUpDownControl (COMCTL32.16)
85 HWND32 WINAPI CreateUpDownControl( DWORD style, INT32 x, INT32 y,
86 INT32 cx, INT32 cy, HWND32 parent,
87 INT32 id, HINSTANCE32 inst, HWND32 buddy,
88 INT32 maxVal, INT32 minVal, INT32 curVal )
90 HWND32 hUD = CreateWindow32A(UPDOWN_CLASS32A, 0, style, x, y, cx, cy,
93 SendMessage32A(hUD, UDM_SETBUDDY, buddy, 0);
94 SendMessage32A(hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal));
95 SendMessage32A(hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0));
102 /***********************************************************************
103 * InitCommonControls [COMCTL32.17]
110 InitCommonControls (VOID)
112 INITCOMMONCONTROLSEX icc;
114 icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
115 icc.dwICC = ICC_WIN95_CLASSES;
117 InitCommonControlsEx (&icc);
121 /***********************************************************************
122 * InitCommonControlsEx [COMCTL32.81]
129 InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls)
134 if (lpInitCtrls == NULL) return FALSE;
135 if (lpInitCtrls->dwSize < sizeof(INITCOMMONCONTROLSEX)) return FALSE;
137 for (cCount = 0; cCount <= 31; cCount++) {
138 dwMask = 1 << cCount;
139 if (!(lpInitCtrls->dwICC & dwMask))
142 switch (lpInitCtrls->dwICC & dwMask) {
143 case ICC_LISTVIEW_CLASSES:
144 TRACE (commctrl, "No listview class implemented!\n");
148 case ICC_TREEVIEW_CLASSES:
149 TRACE (commctrl, "No treeview class implemented!\n");
150 TRACE (commctrl, "No tooltip class implemented!\n");
153 case ICC_BAR_CLASSES:
156 TRACE (commctrl, "No trackbar class implemented!\n");
157 TRACE (commctrl, "No tooltip class implemented!\n");
160 case ICC_TAB_CLASSES:
161 TRACE (commctrl, "No tab class implemented!\n");
162 TRACE (commctrl, "No tooltip class implemented!\n");
166 case ICC_UPDOWN_CLASS:
170 case ICC_PROGRESS_CLASS:
171 PROGRESS_Register ();
174 case ICC_HOTKEY_CLASS:
175 TRACE (commctrl, "No hotkey class implemented!\n");
178 case ICC_ANIMATE_CLASS:
179 TRACE (commctrl, "No animation class implemented!\n");
182 /* advanced classes - not included in Win95 */
183 case ICC_DATE_CLASSES:
184 TRACE (commctrl, "No month calendar class implemented!\n");
185 TRACE (commctrl, "No date picker class implemented!\n");
186 TRACE (commctrl, "No time picker class implemented!\n");
190 case ICC_USEREX_CLASSES:
191 TRACE (commctrl, "No comboex class implemented!\n");
194 case ICC_COOL_CLASSES:
195 TRACE (commctrl, "No rebar class implemented!\n");
198 case ICC_INTERNET_CLASSES:
199 TRACE (commctrl, "No internet classes implemented!\n");
202 case ICC_PAGESCROLLER_CLASS:
203 TRACE (commctrl, "No page scroller class implemented!\n");
206 case ICC_NATIVEFNTCTL_CLASS:
207 TRACE (commctrl, "No native font class implemented!\n");
211 WARN (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask);
220 /***********************************************************************
221 * MenuHelp [COMCTL32.2]
229 MenuHelp (UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, HMENU32 hMainMenu,
230 HINSTANCE32 hInst, HWND32 hwndStatus, LPUINT32 lpwIDs)
232 char szStatusText[128];
234 if (!IsWindow32 (hwndStatus)) return;
238 TRACE (commctrl, "WM_MENUSELECT wParam=0x%X lParam=0x%lX\n",
241 if ((HIWORD(wParam) == 0xFFFF) && (lParam == 0)) {
242 /* menu was closed */
243 SendMessage32A (hwndStatus, SB_SIMPLE, FALSE, 0);
246 if (HIWORD(wParam) & MF_POPUP) {
247 TRACE (commctrl, "popup menu selected!\n");
252 TRACE (commctrl, "menu item selected!\n");
253 if (!LoadString32A (hInst, LOWORD(wParam), szStatusText, 128))
256 SendMessage32A (hwndStatus, SB_SETTEXT32A, 255 | SBT_NOBORDERS,
257 (LPARAM)szStatusText);
258 SendMessage32A (hwndStatus, SB_SIMPLE, TRUE, 0);
263 WARN (commctrl, "Invalid Message!\n");
269 /***********************************************************************
270 * CreateToolbarEx [COMCTL32.32]
277 CreateToolbarEx (HWND32 hwnd, DWORD style, UINT32 wID, INT32 nBitmaps,
278 HINSTANCE32 hBMInst, UINT32 wBMID, LPCTBBUTTON lpButtons,
279 INT32 iNumButtons, INT32 dxButton, INT32 dyButton,
280 INT32 dxBitmap, INT32 dyBitmap, UINT32 uStructSize)
283 CreateWindowEx32A (0, TOOLBARCLASSNAME32A, "", style, 0, 0, 0, 0,
284 hwnd, (HMENU32)wID, 0, NULL);
288 SendMessage32A (hwndTB, TB_BUTTONSTRUCTSIZE,
289 (WPARAM32)uStructSize, 0);
291 /* set bitmap and button size */
294 tbab.hInst = hBMInst;
296 SendMessage32A (hwndTB, TB_ADDBITMAP,
297 (WPARAM32)nBitmaps, (LPARAM)&tbab);
300 SendMessage32A (hwndTB, TB_ADDBUTTONS32A,
301 (WPARAM32)iNumButtons, (LPARAM)lpButtons);
308 /***********************************************************************
309 * CreateMappedBitmap [COMCTL32.8]
316 CreateMappedBitmap (HINSTANCE32 hInstance, INT32 idBitmap, UINT32 wFlags,
317 LPCOLORMAP lpColorMap, INT32 iNumMaps)
321 FIXME (commctrl, "semi-stub!\n");
323 hbm = LoadBitmap32A (hInstance, MAKEINTRESOURCE32A(idBitmap));
329 /***********************************************************************
330 * CreateToolbar [COMCTL32.7]
337 CreateToolbar (HWND32 hwnd, DWORD style, UINT32 wID, INT32 nBitmaps,
338 HINSTANCE32 hBMInst, UINT32 wBMID,
339 LPCOLDTBBUTTON lpButtons,INT32 iNumButtons)
341 return CreateToolbarEx (hwnd, style | CCS_NODIVIDER, wID, nBitmaps,
342 hBMInst, wBMID, (LPCTBBUTTON)lpButtons,
343 iNumButtons, 0, 0, 0, 0, sizeof (OLDTBBUTTON));
347 /***********************************************************************
348 * GetEffectiveClientRect [COMCTL32.4]
351 * hwnd [I] handle to the client window.
352 * lpRect [O] pointer to the rectangle of the client window
353 * lpInfo [I] pointer to an array of integers
359 GetEffectiveClientRect (HWND32 hwnd, LPRECT32 lpRect, LPINT32 lpInfo)
361 RECT32 rcClient, rcCtrl;
362 INT32 idCtrl, *lpRun;
364 TRACE (commctrl, "hwnd=0x%08lx lpRect=0x%08lx lpInfo=0x%08lx\n",
365 (DWORD)hwnd, (DWORD)lpRect, (DWORD)lpInfo);
367 GetClientRect32 (hwnd, &rcClient);
375 TRACE (commctrl, "control id 0x%x\n", idCtrl);
376 GetWindowRect32 (GetDlgItem32 (hwnd, idCtrl), &rcCtrl);
377 MapWindowPoints32 (NULL, hwnd, (LPPOINT32)&rcCtrl, 2);
378 SubtractRect32 (&rcClient, &rcClient, &rcCtrl);
383 CopyRect32 (lpRect, &rcClient);