| /* |
| * Common controls functions |
| * |
| * Copyright 1997 Dimitrie O. Paun |
| * |
| */ |
| |
| #include "win.h" |
| #include "heap.h" |
| #include "commctrl.h" |
| #include "progress.h" |
| #include "status.h" |
| #include "updown.h" |
| |
| /* Win32 common controls */ |
| |
| static WNDCLASS32A WIDGETS_CommonControls32[] = |
| { |
| { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, StatusWindowProc, 0, |
| sizeof(STATUSWINDOWINFO), 0, 0, 0, 0, 0, STATUSCLASSNAME32A }, |
| { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, UpDownWindowProc, 0, |
| sizeof(UPDOWN_INFO), 0, 0, 0, 0, 0, UPDOWN_CLASS32A }, |
| { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, ProgressWindowProc, 0, |
| sizeof(PROGRESS_INFO), 0, 0, 0, 0, 0, PROGRESS_CLASS32A } |
| }; |
| |
| #define NB_COMMON_CONTROLS32 \ |
| (sizeof(WIDGETS_CommonControls32)/sizeof(WIDGETS_CommonControls32[0])) |
| |
| |
| /*********************************************************************** |
| * DrawStatusText32A (COMCTL32.5) |
| */ |
| void WINAPI DrawStatusText32A( HDC32 hdc, LPRECT32 lprc, LPCSTR text, |
| UINT32 style ) |
| { |
| RECT32 r = *lprc; |
| UINT32 border = BDR_SUNKENOUTER; |
| |
| DrawEdge32(hdc, &r, BDR_RAISEDINNER, BF_RECT|BF_ADJUST|BF_FLAT); |
| |
| if(style==SBT_POPOUT) |
| border = BDR_RAISEDOUTER; |
| else if(style==SBT_NOBORDERS) |
| border = 0; |
| |
| DrawEdge32(hdc, &r, border, BF_RECT|BF_ADJUST|BF_MIDDLE); |
| |
| /* now draw text */ |
| if (text) { |
| int oldbkmode = SetBkMode32(hdc, TRANSPARENT); |
| r.left += 3; |
| DrawText32A(hdc, text, lstrlen32A(text), |
| &r, DT_LEFT|DT_VCENTER|DT_SINGLELINE); |
| if (oldbkmode != TRANSPARENT) |
| SetBkMode32(hdc, oldbkmode); |
| } |
| |
| } |
| |
| /*********************************************************************** |
| * DrawStatusText32W (COMCTL32.24) |
| */ |
| void WINAPI DrawStatusText32W( HDC32 hdc, LPRECT32 lprc, LPCWSTR text, |
| UINT32 style ) |
| { |
| LPSTR p = HEAP_strdupWtoA( GetProcessHeap(), 0, text ); |
| DrawStatusText32A(hdc, lprc, p, style); |
| HeapFree( GetProcessHeap(), 0, p ); |
| } |
| |
| /*********************************************************************** |
| * DrawStatusText16 (COMCTL32.23) |
| */ |
| void WINAPI DrawStatusText16( HDC16 hdc, LPRECT16 lprc, LPCSTR text, |
| UINT16 style ) |
| { |
| if(!lprc) |
| DrawStatusText32A((HDC32)hdc, 0, text, (UINT32)style); |
| else{ |
| RECT32 rect32; |
| CONV_RECT16TO32( lprc, &rect32 ); |
| DrawStatusText32A((HDC32)hdc, &rect32, text, (UINT32)style); |
| } |
| } |
| |
| /*********************************************************************** |
| * CreateStatusWindow32A (COMCTL32.6) |
| */ |
| HWND32 WINAPI CreateStatusWindow32A( INT32 style, LPCSTR text, HWND32 parent, |
| UINT32 wid ) |
| { |
| return CreateWindow32A(STATUSCLASSNAME32A, text, style, |
| CW_USEDEFAULT32, CW_USEDEFAULT32, |
| CW_USEDEFAULT32, CW_USEDEFAULT32, |
| parent, wid, 0, 0); |
| } |
| |
| /*********************************************************************** |
| * CreateStatusWindow16 (COMCTL32.18) |
| */ |
| HWND16 WINAPI CreateStatusWindow16( INT16 style, LPCSTR text, HWND16 parent, |
| UINT16 wid ) |
| { |
| return CreateWindow16(STATUSCLASSNAME16, text, style, |
| CW_USEDEFAULT16, CW_USEDEFAULT16, |
| CW_USEDEFAULT16, CW_USEDEFAULT16, |
| parent, wid, 0, 0); |
| } |
| |
| /*********************************************************************** |
| * CreateStatusWindow32W (COMCTL32.19) |
| */ |
| HWND32 WINAPI CreateStatusWindow32W( INT32 style, LPCWSTR text, HWND32 parent, |
| UINT32 wid ) |
| { |
| return CreateWindow32W(STATUSCLASSNAME32W, text, style, |
| CW_USEDEFAULT32, CW_USEDEFAULT32, |
| CW_USEDEFAULT32, CW_USEDEFAULT32, |
| parent, wid, 0, 0); |
| } |
| |
| /*********************************************************************** |
| * CreateUpDownControl (COMCTL32.16) |
| */ |
| HWND32 WINAPI CreateUpDownControl( DWORD style, INT32 x, INT32 y, |
| INT32 cx, INT32 cy, HWND32 parent, |
| INT32 id, HINSTANCE32 inst, HWND32 buddy, |
| INT32 maxVal, INT32 minVal, INT32 curVal ) |
| { |
| HWND32 hUD = CreateWindow32A(UPDOWN_CLASS32A, 0, style, x, y, cx, cy, |
| parent, id, inst, 0); |
| if(hUD){ |
| SendMessage32A(hUD, UDM_SETBUDDY, buddy, 0); |
| SendMessage32A(hUD, UDM_SETRANGE, 0, MAKELONG(maxVal, minVal)); |
| SendMessage32A(hUD, UDM_SETPOS, 0, MAKELONG(curVal, 0)); |
| } |
| |
| return hUD; |
| } |
| |
| |
| /*********************************************************************** |
| * InitCommonControls (COMCTL32.17) |
| */ |
| void WINAPI InitCommonControls(void) |
| { |
| int i; |
| char name[30]; |
| const char *old_name; |
| WNDCLASS32A *class32 = WIDGETS_CommonControls32; |
| |
| for (i = 0; i < NB_COMMON_CONTROLS32; i++, class32++) |
| { |
| /* Just to make sure the string is > 0x10000 */ |
| old_name = class32->lpszClassName; |
| strcpy( name, (char *)class32->lpszClassName ); |
| class32->lpszClassName = name; |
| class32->hCursor = LoadCursor16( 0, IDC_ARROW ); |
| RegisterClass32A( class32 ); |
| class32->lpszClassName = old_name; |
| } |
| } |
| |