/* * 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; } }