![]() Sun Nov 16 07:42:44 1997 Alex Korobka <alex@trantor.pharm.sunysb.edu> * [windows/dce.c] [windows/clipboard.c] [windows/nonclient.c] Bug fixes. * [misc/shell.c] [resources/*] New "About" dialog. Sat Nov 15 17:30:18 1997 Alexandre Julliard <julliard@lrc.epfl.ch> * [configure.in] [Makefile.in] Replaced --with-library option by --disable-emulator. The default is now to build both the library and the emulator. Renamed --with options to --enable to follow autoconf guidelines. * [loader/main.c] [miscemu/main.c] (New file) Split initialization in WinelibInit/EmulatorInit. * [loader/*.c] Removed all remaining #ifdef's WINELIB. * [controls/widgets.c] [windows/mdi.c] Converted MDIClientWndProc to 32-bit. * [debugger/break.c] [if1632/signal.c] [include/selectors.h] [scheduler/thread.c] Code and data selector values are now computed at run-time. * [library/libres.c] Moved to loader/ directory. * [misc/main.c] [misc/version.c] (New file) Moved all version stuff to version.c. Cleaned up a bit. * [msdos/dpmi.c] Update the REALMODECALL structure on return from real-mode interrupt. * [windows/event.c] [windows/keyboard.c] Changed the way event coordinates are determined. Don't rely on the ConfigureNotify event values. This should fix all problems with cursor position in -desktop and -managed modes. Sat Nov 15 16:09:36 1997 Slaven Rezic <eserte@cs.tu-berlin.de> * [controls/button.c] (BUTTON_CheckAutoRadioButton): Prevent possible endless loop. Wed Nov 12 03:42:45 1997 Chris Faherty <chrisf@america.com> * [misc/ver.c] Changed VerInstall32A to assume srcdir as destination if destdir is blank. This was causing alot of DLL installation into SYSTEM directory to fail. * [loader/ne_image.c] NE_LoadSegment buffer[100] was too small and getting overruns. Changed it to buffer[200]. Sat Nov 8 06:09:57 1997 Len White <phreak@cgocable.net> * [misc/ddeml.c] [include/ddeml.h] [if1632/ddeml.spec] Added stub functions DdeConnectList(), DdeQueryNextServer(), DdeDisconnectList(), DdeSetUserHandle(), DdeAbandonTransaction(), DdePostAdvise(), DdeCreateDataHandle(), DdeAddData(), DdeGetData(), DdeAccessData(), DdeUnaccessData(), DdeEnableCallback(), DdeCmpStringHandles(). Fri Nov 7 19:44:26 1997 Olaf Flebbe <o.flebbe@science-computing.de> * [files/directory.c] Fix typo in directory.c [broke loading of cdplayer on nt40] * [misc/main.c] Implemented -winver nt40. * [loader/resource.c] [user32.spec] Stubs for CopyAcceleratorTable, Destroy AcceleratorTable. Thu Nov 6 22:37:04 1997 Morten Welinder <welinder@rentec.com> * [files/drive.c] (GetDiskFreeSpace32A): Cap at 2GB. * [include/windows.h] Prototype DrawIconEx and CreateDIBSection32. Define OBM_RADIOCHECK. Add DI_* macros. * [objects/dib.c] [if1632/gdi.spec] CreateDIBSection is a WINAPI. Renamed to CreateDIBSection32. Implement CreateDIBSection16. * [if1632/user.spec] [if1632/user32.spec] Add DrawIconEx. * [objects/cursoricon.c] (CopyIcon32): Fix bogus implementation. * [objects/bitmap.c] (CopyBitmap32): New function. (CopyImage32): Do bitmaps. * [graphics/x11drv/text.c] (X11DRV_ExtTextOut): Change ascent and descent default to avoid zero-thinkness overstrike line. * [include/debugstr.h] [misc/debugstr.c] New files. * [msdos/dpmi.c] Don't prototype do_mscdex. In INT_Int31Handler, handle real-mode int 0x21, ah=0x52. * [msdos/int2f.c] Add dummys for 0x1681 and 0x1682. * [misc/registry.c] Fix memory leaks in RegDeleteKey32W. * [objects/text.c] In TEXT_NextLine, fix another off-by-one bug. * [include/bitmaps/obm_radiocheck] New file. (It a small circle used to radio-button menu items when selected.) * [objects/oembitmap.c] Add obm_radiocheck. * [include/windows.h] [if1632/user32.spec] [controls/menu.c] [if1632/user.spec] Define CheckMenuRadioItem{16,32}. Define GetMenuItemRect{16,32}. Wed Nov 5 11:30:14 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [misc/main.c] Auto adjust versions depending on binary. Tue Nov 4 15:21:00 1997 Kristian Nielsen <kristian.nielsen@risoe.dk> * [controls/listbox.c] Paint full background in listbox items with tab stops enabled. * [if1632/thunk.c] Copy some more message parameter structures (DRAWITEMSTRUCT16, COMPAREITEMSTRUCT16) to the stack segment to fix broken programs that need this. * [windows/dce.c] Only clip sibling windows when the parent has the WS_CLIPSIBLINGS style set. * [windows/focus.c] Make order of events in FOCUS_SwitchFocus() reflect API docs. * [windows/defdlg.c] Fix problem with loss of focus in some dialogs. * [win32/code_page.c] Fix return value for MultiByteToWideChar(). * [BUGS] BCW now works. |
||
---|---|---|
.. | ||
Makefile.in | ||
README.resources | ||
winestub.c |
README.resources
This is a short discussion of resources in WineLib. Introduction Resources are used to store dialogs, menus, bitmaps, icons, version information, strings, fonts, and accelerators. In a Win3.1 programming environment, there are three file formats for resources: - the RC script, which is human-readable and can be processed by a resource compiler - the .RES file, which is the output of the resource compiler - the .EXE and .DLL files, which store resources as a part of the NE file format For WineLib, only a part of this is supported. In particular, there is no .RES file, the executable is not a NE file (as it is a native Unix executable), and some resource types are not implemented: icons, version information, strings, and fonts. Building a WineLib application The build process assumes that the C source files and the resource script is available. At the moment, a single resource script is recommended. This script is processed by winerc: 1) the preprocessor is used to resolve symbolic style name (LBS_STANDARD, ...) into numbers. This involves processing windows.h 2) the unused parts of windows.h (type definitions) are removed. This would not be necessary if Wine's windows.h would use the RC_INVOKED macro. 3) winerc is invoked to create a binary representation of the resources. This representation is stored as C source code (arrays). 4) gcc is used to compile the generated C code. Now, each resource is available as a C array to the application. As the executable is not in the NE format, it is not possible to retrieve resource locations in the executable via name. Instead, the resources have to be referenced with their generated C array names. The linker then resolves these names in the compiled resource file. 5) The program sources are compiled and linked with the output of step 4. A sample build process is in toolkit/Makefile:hello3. Required changes to the program sources Because loading the resources from an instance handle is not possible, the *Indirect functions have to be used to load a resource. The C arrays can be directly passed to the *Indirect functions. So, instead of writing hMenu=LoadMenu(hInstance,"MAIN"); write hMenu=LoadMenuIndirect(hello3_MENU_MAIN.bytes); Fortunately, the Windows API has the following functions available: DialogBoxIndirect CreateDialogIndirect DialogBoxIndirectParam CreateDialogIndirectParam LoadMenuIndirect SetDIBitsToDevice Sample code is available in hello3.c. hello3res.c contains the corresponding resources. Keeping a common source Clearly, changing the sources is not very desirable, and suggestions how to reduce the amount of work are welcome. In the meantime, two approaches allow at least to remain a common source between the Win3.1 code and the WineLib code: 1) conditional compiles: When compiling a WineLib application, WINELIB is defined. This can be used to select Wine-specific code. 2) usage of winerc for Windows: The *Indirect functions are available on plain Win3.1, and the resource format is fully compatible. Thus, recompiling sources modified for WineLib on Win3.1 is possible and known to work. Open problems 1) Icons and cursors: For these resources, there is no *Indirect function documented. In addition, both are implemented by a set of two resources. This is the reason why they are not supported by winerc. 2) Accelerators: Although winerc supports accelerators, there is no LoadAcceleratorIndirect function. A work-around would be to define one. 3) Fonts: Font resources are not supported by Wine at all. 4) String tables: Although string tables are not supported by winerc, there is no reason not to add such support. Again, some indirect loading would be necessary. 5) API requires loading by name: At some places, the name of a resource is passed instead of a handle. The WNDCLASS structure contains the name of a menu resource, and the icon in a dialog box is referenced by its name. (Are there some more places?) Clearly, loading the resource by name would be highly desirable. The resource compiler currently creates a structure containing all resources defined in an RC file. However, it is not clear how WINELIB could find the location of this structure, especially, when there is more than one RC file.