riched20: register ListBox & ComboBox classes
Partially implement REExtendedRegisterClass() to register missing window classes so that applications relying on them don't get confused.
This commit is contained in:
parent
38dbf09da2
commit
2a1a0cf22d
@ -2,6 +2,7 @@
|
|||||||
* RichEdit - functions dealing with editor object
|
* RichEdit - functions dealing with editor object
|
||||||
*
|
*
|
||||||
* Copyright 2004 by Krzysztof Foltman
|
* Copyright 2004 by Krzysztof Foltman
|
||||||
|
* Copyright 2005 by Cihan Altinay
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -208,6 +209,7 @@
|
|||||||
* - full justification
|
* - full justification
|
||||||
* - hyphenation
|
* - hyphenation
|
||||||
* - tables
|
* - tables
|
||||||
|
* - ListBox & ComboBox not implemented
|
||||||
*
|
*
|
||||||
* Bugs that are probably fixed, but not so easy to verify:
|
* Bugs that are probably fixed, but not so easy to verify:
|
||||||
* - EN_UPDATE/EN_CHANGE are handled very incorrectly (should be OK now)
|
* - EN_UPDATE/EN_CHANGE are handled very incorrectly (should be OK now)
|
||||||
@ -235,6 +237,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(richedit);
|
|||||||
int me_debug = 0;
|
int me_debug = 0;
|
||||||
HANDLE me_heap = NULL;
|
HANDLE me_heap = NULL;
|
||||||
|
|
||||||
|
static BOOL ME_ListBoxRegistered = FALSE;
|
||||||
|
static BOOL ME_ComboBoxRegistered = FALSE;
|
||||||
|
|
||||||
static ME_TextBuffer *ME_MakeText(void) {
|
static ME_TextBuffer *ME_MakeText(void) {
|
||||||
|
|
||||||
ME_TextBuffer *buf = ALLOC_OBJ(ME_TextBuffer);
|
ME_TextBuffer *buf = ALLOC_OBJ(ME_TextBuffer);
|
||||||
@ -934,6 +939,8 @@ void ME_DestroyEditor(ME_TextEditor *editor)
|
|||||||
|
|
||||||
static WCHAR wszClassName[] = {'R', 'i', 'c', 'h', 'E', 'd', 'i', 't', '2', '0', 'W', 0};
|
static WCHAR wszClassName[] = {'R', 'i', 'c', 'h', 'E', 'd', 'i', 't', '2', '0', 'W', 0};
|
||||||
static WCHAR wszClassName50[] = {'R', 'i', 'c', 'h', 'E', 'd', 'i', 't', '5', '0', 'W', 0};
|
static WCHAR wszClassName50[] = {'R', 'i', 'c', 'h', 'E', 'd', 'i', 't', '5', '0', 'W', 0};
|
||||||
|
static WCHAR wszClassNameListBox[] = {'R','E','L','i','s','t','B','o','x','2','0','W', 0};
|
||||||
|
static WCHAR wszClassNameComboBox[] = {'R','E','C','o','m','b','o','B','o','x','2','0','W', 0};
|
||||||
|
|
||||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
||||||
{
|
{
|
||||||
@ -951,6 +958,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
|||||||
UnregisterClassW(wszClassName50, 0);
|
UnregisterClassW(wszClassName50, 0);
|
||||||
UnregisterClassA("RichEdit20A", 0);
|
UnregisterClassA("RichEdit20A", 0);
|
||||||
UnregisterClassA("RichEdit50A", 0);
|
UnregisterClassA("RichEdit50A", 0);
|
||||||
|
if (ME_ListBoxRegistered)
|
||||||
|
UnregisterClassW(wszClassNameListBox, 0);
|
||||||
|
if (ME_ComboBoxRegistered)
|
||||||
|
UnregisterClassW(wszClassNameComboBox, 0);
|
||||||
HeapDestroy (me_heap);
|
HeapDestroy (me_heap);
|
||||||
me_heap = NULL;
|
me_heap = NULL;
|
||||||
break;
|
break;
|
||||||
@ -2167,12 +2178,62 @@ HRESULT WINAPI CreateTextServices(IUnknown *punkOuter, void *pITextHost,
|
|||||||
return E_FAIL; /* E_NOTIMPL isn't allowed by MSDN */
|
return E_FAIL; /* E_NOTIMPL isn't allowed by MSDN */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT WINAPI REComboWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||||
|
/* FIXME: Not implemented */
|
||||||
|
TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
|
||||||
|
hWnd, msg, get_msg_name(msg), wParam, lParam);
|
||||||
|
return DefWindowProcW(hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT WINAPI REListWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||||
|
/* FIXME: Not implemented */
|
||||||
|
TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
|
||||||
|
hWnd, msg, get_msg_name(msg), wParam, lParam);
|
||||||
|
return DefWindowProcW(hWnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************
|
/******************************************************************
|
||||||
* REExtendedRegisterClass (RICHED20.8)
|
* REExtendedRegisterClass (RICHED20.8)
|
||||||
*
|
*
|
||||||
* FIXME undocumented
|
* FIXME undocumented
|
||||||
|
* Need to check for errors and implement controls and callbacks
|
||||||
*/
|
*/
|
||||||
void WINAPI REExtendedRegisterClass(void)
|
LRESULT WINAPI REExtendedRegisterClass(void)
|
||||||
{
|
{
|
||||||
FIXME("stub\n");
|
WNDCLASSW wcW;
|
||||||
|
UINT result;
|
||||||
|
|
||||||
|
FIXME("semi stub\n");
|
||||||
|
|
||||||
|
wcW.cbClsExtra = 0;
|
||||||
|
wcW.cbWndExtra = 4;
|
||||||
|
wcW.hInstance = NULL;
|
||||||
|
wcW.hIcon = NULL;
|
||||||
|
wcW.hCursor = NULL;
|
||||||
|
wcW.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
||||||
|
wcW.lpszMenuName = NULL;
|
||||||
|
|
||||||
|
if (!ME_ListBoxRegistered)
|
||||||
|
{
|
||||||
|
wcW.style = CS_PARENTDC | CS_DBLCLKS | CS_GLOBALCLASS;
|
||||||
|
wcW.lpfnWndProc = REListWndProc;
|
||||||
|
wcW.lpszClassName = wszClassNameListBox;
|
||||||
|
if (RegisterClassW(&wcW)) ME_ListBoxRegistered = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ME_ComboBoxRegistered)
|
||||||
|
{
|
||||||
|
wcW.style = CS_PARENTDC | CS_DBLCLKS | CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW;
|
||||||
|
wcW.lpfnWndProc = REComboWndProc;
|
||||||
|
wcW.lpszClassName = wszClassNameComboBox;
|
||||||
|
if (RegisterClassW(&wcW)) ME_ComboBoxRegistered = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
if (ME_ListBoxRegistered)
|
||||||
|
result += 1;
|
||||||
|
if (ME_ComboBoxRegistered)
|
||||||
|
result += 2;
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user