diff --git a/dlls/comctl32/Makefile.in b/dlls/comctl32/Makefile.in index 8c7b770fa3d..b0960c6ca34 100644 --- a/dlls/comctl32/Makefile.in +++ b/dlls/comctl32/Makefile.in @@ -13,7 +13,9 @@ C_SRCS = \ header.c \ hotkey.c \ imagelist.c \ + ipaddress.c \ listview.c \ + nativefont.c \ pager.c \ progress.c \ rebar.c \ diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index b0b5c7c5793..c71bea174bf 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -13,7 +13,9 @@ #include "comboex.h" #include "header.h" #include "hotkey.h" +#include "ipaddress.h" #include "listview.h" +#include "nativefont.h" #include "pager.h" #include "progress.h" #include "rebar.h" @@ -28,13 +30,17 @@ #include "winerror.h" +HANDLE32 COMCTL32_hHeap = (HANDLE32)NULL; +DWORD COMCTL32_dwProcessesAttached = 0; + + /*********************************************************************** * ComCtl32LibMain [Internal] Initializes the internal 'COMCTL32.DLL'. * * PARAMS * hinstDLL [I] handle to the 'dlls' instance * fdwReason [I] - * lpvReserved [I] + * lpvReserved [I] reserverd, must be NULL * * RETURNS * Success: TRUE @@ -48,18 +54,43 @@ ComCtl32LibMain (HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved) switch (fdwReason) { case DLL_PROCESS_ATTACH: - ANIMATE_Register (); - HEADER_Register (); - HOTKEY_Register (); - LISTVIEW_Register (); - PROGRESS_Register (); - STATUS_Register (); - TAB_Register (); - TOOLBAR_Register (); - TOOLTIPS_Register (); - TRACKBAR_Register (); - TREEVIEW_Register (); - UPDOWN_Register (); + if (COMCTL32_dwProcessesAttached == 0) { + /* create private heap */ + COMCTL32_hHeap = HeapCreate (0, 1, 0x40000000); + TRACE (commctrl, "Heap created: 0x%x\n", COMCTL32_hHeap); + + /* register all Win95 common control classes */ + ANIMATE_Register (); + HEADER_Register (); + HOTKEY_Register (); + LISTVIEW_Register (); + PROGRESS_Register (); + STATUS_Register (); + TAB_Register (); + TOOLBAR_Register (); + TOOLTIPS_Register (); + TRACKBAR_Register (); + TREEVIEW_Register (); + UPDOWN_Register (); + } + COMCTL32_dwProcessesAttached++; + break; + + case DLL_PROCESS_DETACH: + COMCTL32_dwProcessesAttached--; + if (COMCTL32_dwProcessesAttached == 0) { + /* unregister all common control classes */ + IPADDRESS_Unregister (); + + NATIVEFONT_Unregister (); + + TOOLTIPS_Unregister (); + + /* destroy private heap */ + HeapDestroy (COMCTL32_hHeap); + TRACE (commctrl, "Heap destroyed: 0x%x\n", COMCTL32_hHeap); + COMCTL32_hHeap = (HANDLE32)NULL; + } break; } @@ -117,7 +148,7 @@ MenuHelp (UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, HMENU32 hMainMenu, CHAR szText[256]; if (!LoadString32A (hInst, uMenuID, szText, 256)) - szText[0] = 0; + szText[0] = '\0'; SendMessage32A (hwndStatus, SB_SETTEXT32A, 255 | SBT_NOBORDERS, (LPARAM)szText); @@ -127,7 +158,7 @@ MenuHelp (UINT32 uMsg, WPARAM32 wParam, LPARAM lParam, HMENU32 hMainMenu, break; default: - WARN (commctrl, "Invalid Message!\n"); + FIXME (commctrl, "Invalid Message!\n"); break; } } @@ -291,7 +322,7 @@ DrawStatusText32A (HDC32 hdc, LPRECT32 lprc, LPCSTR text, UINT32 style) * hdc [I] handle to the window's display context * lprc [I] pointer to a rectangle * text [I] pointer to the text - * style [I] + * style [I] * * RETURNS * No return value. @@ -336,8 +367,8 @@ CreateStatusWindow32A (INT32 style, LPCSTR text, HWND32 parent, UINT32 wid) * PARAMS * style [I] * text [I] - * parent [I] - * wid [I] + * parent [I] handle to the parent window + * wid [I] control id of the status bar * * RETURNS * Success: handle to the control @@ -440,10 +471,12 @@ InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls) INT32 cCount; DWORD dwMask; - TRACE(commctrl,"\n"); - - if (lpInitCtrls == NULL) return FALSE; - if (lpInitCtrls->dwSize < sizeof(INITCOMMONCONTROLSEX)) return FALSE; + if (!lpInitCtrls) + return FALSE; + if (lpInitCtrls->dwSize != sizeof(INITCOMMONCONTROLSEX)) + return FALSE; + + TRACE(commctrl,"(0x%08lx)\n", lpInitCtrls->dwICC); for (cCount = 0; cCount < 32; cCount++) { dwMask = 1 << cCount; @@ -465,8 +498,7 @@ InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls) /* advanced classes - not included in Win95 */ case ICC_DATE_CLASSES: FIXME (commctrl, "No month calendar class implemented!\n"); - FIXME (commctrl, "No date picker class implemented!\n"); - FIXME (commctrl, "No time picker class implemented!\n"); + FIXME (commctrl, "No date and time picker class implemented!\n"); break; case ICC_USEREX_CLASSES: @@ -478,7 +510,7 @@ InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls) break; case ICC_INTERNET_CLASSES: - FIXME (commctrl, "No IPAddress class implemented!\n"); + IPADDRESS_Register (); break; case ICC_PAGESCROLLER_CLASS: @@ -486,11 +518,11 @@ InitCommonControlsEx (LPINITCOMMONCONTROLSEX lpInitCtrls) break; case ICC_NATIVEFNTCTL_CLASS: - FIXME (commctrl, "No native font class implemented!\n"); + NATIVEFONT_Register (); break; default: - WARN (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask); + FIXME (commctrl, "Unknown class! dwICC=0x%lX\n", dwMask); break; } } diff --git a/dlls/comctl32/ipaddress.c b/dlls/comctl32/ipaddress.c new file mode 100644 index 00000000000..34570e7960b --- /dev/null +++ b/dlls/comctl32/ipaddress.c @@ -0,0 +1,134 @@ +/* + * IP Address control + * + * Copyright 1998 Eric Kohl + * + * NOTES + * This is just a dummy control. An author is needed! Any volunteers? + * I will only improve this control once in a while. + * Eric + * + * TODO: + * - All messages. + * - All notifications. + * + */ + +#include "windows.h" +#include "commctrl.h" +#include "ipaddress.h" +#include "win.h" +#include "debug.h" + + +#define IPADDRESS_GetInfoPtr(wndPtr) ((IPADDRESS_INFO *)wndPtr->wExtra[0]) + + + + + + +static LRESULT +IPADDRESS_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam) +{ + IPADDRESS_INFO *infoPtr; + + /* allocate memory for info structure */ + infoPtr = (IPADDRESS_INFO *)COMCTL32_Alloc (sizeof(IPADDRESS_INFO)); + wndPtr->wExtra[0] = (DWORD)infoPtr; + + if (infoPtr == NULL) { + ERR (listview, "could not allocate info memory!\n"); + return 0; + } + + if ((IPADDRESS_INFO*)wndPtr->wExtra[0] != infoPtr) { + ERR (listview, "pointer assignment error!\n"); + return 0; + } + + /* initialize info structure */ + + + + return 0; +} + + +static LRESULT +IPADDRESS_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam) +{ + IPADDRESS_INFO *infoPtr = IPADDRESS_GetInfoPtr(wndPtr); + + + + + + + /* free ipaddress info data */ + COMCTL32_Free (infoPtr); + + return 0; +} + + + + +LRESULT WINAPI +IPADDRESS_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam) +{ + WND *wndPtr = WIN_FindWndPtr(hwnd); + + switch (uMsg) + { +// case IPM_CLEARADDRESS: +// case IPM_GETADDRESS: +// case IPM_ISBLANK: +// case IPM_SETADDRESS: +// case IPM_SETFOCUS: +// case IPM_SETRANGE: + + + case WM_CREATE: + return IPADDRESS_Create (wndPtr, wParam, lParam); + + case WM_DESTROY: + return IPADDRESS_Destroy (wndPtr, wParam, lParam); + + default: + if (uMsg >= WM_USER) + ERR (ipaddress, "unknown msg %04x wp=%08x lp=%08lx\n", + uMsg, wParam, lParam); + return DefWindowProc32A (hwnd, uMsg, wParam, lParam); + } + return 0; +} + + +VOID +IPADDRESS_Register (VOID) +{ + WNDCLASS32A wndClass; + + if (GlobalFindAtom32A (WC_IPADDRESS32A)) return; + + ZeroMemory (&wndClass, sizeof(WNDCLASS32A)); + wndClass.style = CS_GLOBALCLASS; + wndClass.lpfnWndProc = (WNDPROC32)IPADDRESS_WindowProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = sizeof(IPADDRESS_INFO *); + wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A); + wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1); + wndClass.lpszClassName = WC_IPADDRESS32A; + + RegisterClass32A (&wndClass); +} + + +VOID +IPADDRESS_Unregister (VOID) +{ + if (GlobalFindAtom32A (WC_IPADDRESS32A)) + UnregisterClass32A (WC_IPADDRESS32A, (HINSTANCE32)NULL); +} + diff --git a/dlls/comctl32/nativefont.c b/dlls/comctl32/nativefont.c new file mode 100644 index 00000000000..c4ae462f594 --- /dev/null +++ b/dlls/comctl32/nativefont.c @@ -0,0 +1,119 @@ +/* + * Native Font control + * + * Copyright 1998 Eric Kohl + * + * NOTES + * This is just a dummy control. An author is needed! Any volunteers? + * I will only improve this control once in a while. + * Eric + * + * TODO: + * - All messages. + * - All notifications. + */ + +#include "windows.h" +#include "commctrl.h" +#include "nativefont.h" +#include "win.h" +#include "debug.h" + + +#define NATIVEFONT_GetInfoPtr(wndPtr) ((NATIVEFONT_INFO *)wndPtr->wExtra[0]) + + + + +static LRESULT +NATIVEFONT_Create (WND *wndPtr, WPARAM32 wParam, LPARAM lParam) +{ + NATIVEFONT_INFO *infoPtr; + + /* allocate memory for info structure */ + infoPtr = (NATIVEFONT_INFO *)COMCTL32_Alloc (sizeof(NATIVEFONT_INFO)); + wndPtr->wExtra[0] = (DWORD)infoPtr; + + if (infoPtr == NULL) { + ERR (listview, "could not allocate info memory!\n"); + return 0; + } + + if ((NATIVEFONT_INFO*)wndPtr->wExtra[0] != infoPtr) { + ERR (listview, "pointer assignment error!\n"); + return 0; + } + + /* initialize info structure */ + + + return 0; +} + + +static LRESULT +NATIVEFONT_Destroy (WND *wndPtr, WPARAM32 wParam, LPARAM lParam) +{ + NATIVEFONT_INFO *infoPtr = NATIVEFONT_GetInfoPtr(wndPtr); + + + + + /* free comboex info data */ + COMCTL32_Free (infoPtr); + + return 0; +} + + + +LRESULT WINAPI +NATIVEFONT_WindowProc (HWND32 hwnd, UINT32 uMsg, WPARAM32 wParam, LPARAM lParam) +{ + WND *wndPtr = WIN_FindWndPtr(hwnd); + + switch (uMsg) + { + + case WM_CREATE: + return NATIVEFONT_Create (wndPtr, wParam, lParam); + + case WM_DESTROY: + return NATIVEFONT_Destroy (wndPtr, wParam, lParam); + + default: + ERR (nativefont, "unknown msg %04x wp=%08x lp=%08lx\n", + uMsg, wParam, lParam); + return DefWindowProc32A (hwnd, uMsg, wParam, lParam); + } + return 0; +} + + +VOID +NATIVEFONT_Register (VOID) +{ + WNDCLASS32A wndClass; + + if (GlobalFindAtom32A (WC_NATIVEFONTCTL32A)) return; + + ZeroMemory (&wndClass, sizeof(WNDCLASS32A)); + wndClass.style = CS_GLOBALCLASS; + wndClass.lpfnWndProc = (WNDPROC32)NATIVEFONT_WindowProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = sizeof(NATIVEFONT_INFO *); + wndClass.hCursor = LoadCursor32A (0, IDC_ARROW32A); + wndClass.hbrBackground = (HBRUSH32)(COLOR_WINDOW + 1); + wndClass.lpszClassName = WC_NATIVEFONTCTL32A; + + RegisterClass32A (&wndClass); +} + + +VOID +NATIVEFONT_Unregister (VOID) +{ + if (GlobalFindAtom32A (WC_NATIVEFONTCTL32A)) + UnregisterClass32A (WC_NATIVEFONTCTL32A, (HINSTANCE32)NULL); +} + diff --git a/include/debug.h b/include/debug.h index 2d279ac8bcb..feb462690ee 100644 --- a/include/debug.h +++ b/include/debug.h @@ -64,87 +64,89 @@ #define dbch_int10 56 #define dbch_int21 57 #define dbch_int31 58 -#define dbch_key 59 -#define dbch_keyboard 60 -#define dbch_ldt 61 -#define dbch_listbox 62 -#define dbch_listview 63 -#define dbch_local 64 -#define dbch_mci 65 -#define dbch_mcianim 66 -#define dbch_mciwave 67 -#define dbch_mdi 68 -#define dbch_menu 69 -#define dbch_message 70 -#define dbch_metafile 71 -#define dbch_midi 72 -#define dbch_mmaux 73 -#define dbch_mmio 74 -#define dbch_mmsys 75 -#define dbch_mmtime 76 -#define dbch_module 77 -#define dbch_mpr 78 -#define dbch_msg 79 -#define dbch_nonclient 80 -#define dbch_ntdll 81 -#define dbch_ole 82 -#define dbch_pager 83 -#define dbch_palette 84 -#define dbch_pidl 85 -#define dbch_print 86 -#define dbch_process 87 -#define dbch_profile 88 -#define dbch_progress 89 -#define dbch_prop 90 -#define dbch_psapi 91 -#define dbch_psdrv 92 -#define dbch_rebar 93 -#define dbch_reg 94 -#define dbch_region 95 -#define dbch_relay 96 -#define dbch_resource 97 -#define dbch_s 98 -#define dbch_scroll 99 -#define dbch_security 100 -#define dbch_segment 101 -#define dbch_selector 102 -#define dbch_sem 103 -#define dbch_sendmsg 104 -#define dbch_shell 105 -#define dbch_shm 106 -#define dbch_snoop 107 -#define dbch_sound 108 -#define dbch_static 109 -#define dbch_statusbar 110 -#define dbch_stress 111 -#define dbch_string 112 -#define dbch_syscolor 113 -#define dbch_system 114 -#define dbch_tab 115 -#define dbch_task 116 -#define dbch_text 117 -#define dbch_thread 118 -#define dbch_thunk 119 -#define dbch_timer 120 -#define dbch_toolbar 121 -#define dbch_toolhelp 122 -#define dbch_tooltips 123 -#define dbch_trackbar 124 -#define dbch_treeview 125 -#define dbch_tweak 126 -#define dbch_uitools 127 -#define dbch_updown 128 -#define dbch_ver 129 -#define dbch_virtual 130 -#define dbch_vxd 131 -#define dbch_win 132 -#define dbch_win16drv 133 -#define dbch_win32 134 -#define dbch_wing 135 -#define dbch_winsock 136 -#define dbch_wnet 137 -#define dbch_x11 138 -#define dbch_x11drv 139 +#define dbch_ipaddress 59 +#define dbch_key 60 +#define dbch_keyboard 61 +#define dbch_ldt 62 +#define dbch_listbox 63 +#define dbch_listview 64 +#define dbch_local 65 +#define dbch_mci 66 +#define dbch_mcianim 67 +#define dbch_mciwave 68 +#define dbch_mdi 69 +#define dbch_menu 70 +#define dbch_message 71 +#define dbch_metafile 72 +#define dbch_midi 73 +#define dbch_mmaux 74 +#define dbch_mmio 75 +#define dbch_mmsys 76 +#define dbch_mmtime 77 +#define dbch_module 78 +#define dbch_mpr 79 +#define dbch_msg 80 +#define dbch_nativefont 81 +#define dbch_nonclient 82 +#define dbch_ntdll 83 +#define dbch_ole 84 +#define dbch_pager 85 +#define dbch_palette 86 +#define dbch_pidl 87 +#define dbch_print 88 +#define dbch_process 89 +#define dbch_profile 90 +#define dbch_progress 91 +#define dbch_prop 92 +#define dbch_psapi 93 +#define dbch_psdrv 94 +#define dbch_rebar 95 +#define dbch_reg 96 +#define dbch_region 97 +#define dbch_relay 98 +#define dbch_resource 99 +#define dbch_s 100 +#define dbch_scroll 101 +#define dbch_security 102 +#define dbch_segment 103 +#define dbch_selector 104 +#define dbch_sem 105 +#define dbch_sendmsg 106 +#define dbch_shell 107 +#define dbch_shm 108 +#define dbch_snoop 109 +#define dbch_sound 110 +#define dbch_static 111 +#define dbch_statusbar 112 +#define dbch_stress 113 +#define dbch_string 114 +#define dbch_syscolor 115 +#define dbch_system 116 +#define dbch_tab 117 +#define dbch_task 118 +#define dbch_text 119 +#define dbch_thread 120 +#define dbch_thunk 121 +#define dbch_timer 122 +#define dbch_toolbar 123 +#define dbch_toolhelp 124 +#define dbch_tooltips 125 +#define dbch_trackbar 126 +#define dbch_treeview 127 +#define dbch_tweak 128 +#define dbch_uitools 129 +#define dbch_updown 130 +#define dbch_ver 131 +#define dbch_virtual 132 +#define dbch_vxd 133 +#define dbch_win 134 +#define dbch_win16drv 135 +#define dbch_win32 136 +#define dbch_wing 137 +#define dbch_winsock 138 +#define dbch_wnet 139 +#define dbch_x11 140 +#define dbch_x11drv 141 /* Definitions for classes identifiers */ #define dbcl_fixme 0 #define dbcl_err 1 diff --git a/include/debugdefs.h b/include/debugdefs.h index 104fbb0cc27..11718dbe37e 100644 --- a/include/debugdefs.h +++ b/include/debugdefs.h @@ -4,7 +4,7 @@ #include "debugtools.h" #endif -#define DEBUG_CHANNEL_COUNT 140 +#define DEBUG_CHANNEL_COUNT 142 #ifdef DEBUG_RUNTIME short debug_msg_enabled[][DEBUG_CLASS_COUNT] = { {1, 1, 0, 0}, @@ -147,6 +147,8 @@ short debug_msg_enabled[][DEBUG_CLASS_COUNT] = { {1, 1, 0, 0}, {1, 1, 0, 0}, {1, 1, 0, 0}, +{1, 1, 0, 0}, +{1, 1, 0, 0}, }; const char* debug_ch_name[] = { "1", @@ -208,6 +210,7 @@ const char* debug_ch_name[] = { "int10", "int21", "int31", +"ipaddress", "key", "keyboard", "ldt", @@ -229,6 +232,7 @@ const char* debug_ch_name[] = { "module", "mpr", "msg", +"nativefont", "nonclient", "ntdll", "ole", diff --git a/include/ipaddress.h b/include/ipaddress.h new file mode 100644 index 00000000000..9c90ce4ecba --- /dev/null +++ b/include/ipaddress.h @@ -0,0 +1,21 @@ +/* + * IP Address class extra info + * + * Copyright 1998 Eric Kohl + */ + +#ifndef __WINE_IPADDRESS_H +#define __WINE_IPADDRESS_H + +typedef struct tagIPADDRESS_INFO +{ + DWORD dwDummy; /* just to keep the compiler happy ;-) */ + + +} IPADDRESS_INFO, *LPIPADDRESS_INFO; + + +extern VOID IPADDRESS_Register (VOID); +extern VOID IPADDRESS_Register (VOID); + +#endif /* __WINE_IPADDRESS_H */ diff --git a/include/nativefont.h b/include/nativefont.h new file mode 100644 index 00000000000..13603f3cf4d --- /dev/null +++ b/include/nativefont.h @@ -0,0 +1,20 @@ +/* + * Native font class extra info + * + * Copyright 1998 Eric Kohl + */ + +#ifndef __WINE_NATIVEFONT_H +#define __WINE_NATIVEFONT_H + +typedef struct tagNATIVEFONT_INFO +{ + DWORD dwDummy; /* just to keep the compiler happy ;-) */ + +} NATIVEFONT_INFO; + + +extern VOID NATIVEFONT_Register (VOID); +extern VOID NATIVEFONT_Unregister (VOID); + +#endif /* __WINE_NATIVEFONT_H */