Send WM_CTLCOLOREDIT not WM_CTLCOLORSTATIC messages to parent of a
disabled edit control if the application expects a windows version before WIN95 and NT40.
This commit is contained in:
parent
0ea089b6a8
commit
077ec0cffd
|
@ -23,6 +23,7 @@
|
|||
#include "debugtools.h"
|
||||
#include "callback.h"
|
||||
#include "tweak.h"
|
||||
#include "winversion.h"
|
||||
|
||||
DECLARE_DEBUG_CHANNEL(combo)
|
||||
DECLARE_DEBUG_CHANNEL(edit)
|
||||
|
@ -3103,7 +3104,8 @@ static LRESULT EDIT_WM_EraseBkGnd(WND *wnd, EDITSTATE *es, HDC dc)
|
|||
HBRUSH brush;
|
||||
RECT rc;
|
||||
|
||||
if (!es->bEnableState || (es->style & ES_READONLY))
|
||||
if ( VERSION_AppWinVer() >= 0x40000 &&(
|
||||
!es->bEnableState || (es->style & ES_READONLY)))
|
||||
brush = (HBRUSH)EDIT_SEND_CTLCOLORSTATIC(wnd, dc);
|
||||
else
|
||||
brush = (HBRUSH)EDIT_SEND_CTLCOLOR(wnd, dc);
|
||||
|
@ -3710,7 +3712,8 @@ static void EDIT_WM_Paint(WND *wnd, EDITSTATE *es, WPARAM wParam)
|
|||
}
|
||||
if (es->font)
|
||||
old_font = SelectObject(dc, es->font);
|
||||
if (!es->bEnableState || (es->style & ES_READONLY))
|
||||
if ( VERSION_AppWinVer() >= 0x40000 &&(
|
||||
!es->bEnableState || (es->style & ES_READONLY)))
|
||||
EDIT_SEND_CTLCOLORSTATIC(wnd, dc);
|
||||
else
|
||||
EDIT_SEND_CTLCOLOR(wnd, dc);
|
||||
|
|
|
@ -16,5 +16,6 @@ typedef enum
|
|||
extern WINDOWS_VERSION VERSION_GetVersion(void);
|
||||
extern char *VERSION_GetVersionName(void);
|
||||
extern BOOL VERSION_OsIsUnicode(void);
|
||||
extern DWORD VERSION_AppWinVer(void);
|
||||
|
||||
#endif /* __WINE_WINVERSION_H */
|
||||
|
|
|
@ -317,6 +317,32 @@ WINDOWS_VERSION VERSION_GetVersion(void)
|
|||
return pdb->winver;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
* VERSION_AppWinVer
|
||||
* Returns the window version in case Wine emulates a later version
|
||||
* of windows then the application expects.
|
||||
*
|
||||
* In a number of cases when windows runs an application that was
|
||||
* designed for an earlier windows version, windows reverts
|
||||
* to "old" behaviour of that earlier version.
|
||||
*
|
||||
* An example is a disabled edit control that needs to be painted.
|
||||
* Old style behaviour is to send a WM_CTLCOLOREDIT message. This was
|
||||
* changed in Win95, NT4.0 by a WM_CTLCOLORSTATIC message _only_ for
|
||||
* applications with an expected version 0f 4.0 or higher.
|
||||
*
|
||||
*/
|
||||
DWORD VERSION_AppWinVer(void)
|
||||
{
|
||||
WINDOWS_VERSION ver = VERSION_GetVersion();
|
||||
DWORD dwEmulatedVersion=MAKELONG( VersionData[ver].getVersionEx.dwMinorVersion,
|
||||
VersionData[ver].getVersionEx.dwMajorVersion);
|
||||
/* fixme: this may not be 100% correct; see discussion on the
|
||||
* wine developer list in Nov 1999 */
|
||||
DWORD dwProcVersion = GetProcessVersion(0);
|
||||
return dwProcVersion < dwEmulatedVersion ? dwProcVersion : dwEmulatedVersion;
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* VERSION_GetVersionName
|
||||
|
|
Loading…
Reference in New Issue