A list of Open32 bugs (under construction): - Key mapping problem. Cursor key messages (WM_KEYUP/DOWN) contain the wrong OEM scancode (should be the same as the numeric keypad arrow keys) Make that: extended key mappings are totally messed up - No support for CBS_OWNERDRAWFIXED or CBS_OWNERDRAWVARIABLE styles (COMBOBOX) - Crash if CBS_OWNERDRAWFIXED && !CBS_HASSTRINGS and sending CB_ADDSTRING with attached item data (i.e. PERFMON sends 0,1,2,3,4 and PM treats this item data as pointers) - Crash in PMWINX if the app isn't PM - Open32 isn't sending WM_NCCREATE msgs - HK_CBT hook not supported - HK_GETMESSAGE hook crashes in PMWINX - UpdateWindow sends a WM_ERASEBKGRND when it shouldn't - Open32 doesn't send a WM_ERASEBKGND when a window is activated - HeapCreate with dwMaximumSize == 0 seems to reserve only 64 kb memory instead of 'unlimited'. Makes Win32 heaps impossible to use. - CreateDialogParamA can have a dlgproc set to NULL -> PMWINX crash - GetObject doesn't return the pointer to the bitmap data (always 0) - GetFileType returns FILE_TYPE_UNKNOWN for file handles - WriteFile with nrbytes = 0 should SetEndOfFile Open32 does not. (Notepad95) - GetDeviceCaps -> NT returns -1 when using 16 bits colors, NOT 65536! - File handles returned by _lopen & _lcreate are 32 bits; Windows returns handles with only the least significant 16 bits filled. - Wrong calling convention for Win32 apis (_System instead of _stdcall or for some apis _cdecl) - Wrong calling convention for callback handlers (_System instead of _stdcall) - Wrong calling convention for hook handlers (_System instead of _stdcall) - RegOpenKeyEx doesn't set the HKEY pointer (5th argument) to zero when an error occurs. Some applications depend on this to do error checking. - RegSetValueA crashes in pmwinx.dll if the size parameter is 0 and the string is very large. - CreateDIBSection does not flip bitmaps is vertical or horizonal size is negative. - Default window message handlers (i.e. DefWindowProcA) don't properly support some messages (i.e. WM_CTLCOLOR*) - GetSystemMetrics far from complete - SystemParametersInfoA incomplete - GetWindowLong returns 0xffff for GWL_ID. This should be 0xffffffff. - Open32 doesn't send any WM_PARENTNOTIFY messages - Open32 doesn't send WM_SETCURSOR or WM_MOUSEACTIVATE to parent windows - CS_SAVEBITS: window movements are slow, many repaints - SetROP2 with R2_XORPEN doesn't work. Example: hOldPen = SelectObject (hdc, GetStockObject (BLACK_PEN)); oldRop = SetROP2 (hdc, R2_XORPEN); MoveToEx (hdc, x, rect.top, NULL); LineTo (hdc, x, rect.bottom); SetROP2 (hdc, oldRop); SelectObject (hdc, hOldPen); - FillRect uses the wrong color sometimes; see menu code (MENU_DrawMenuItem) - Wrong return values for GetDIBits & SetDIBitsToDevice (nr of scan lines copied; not true/false) - SetDIBitsToDevice can't handle compressed bitmaps (presumably all other bitmap apis as well) - Workaround added for bugs in Open32's SetDIBits; messes up colors for 1 bpp bitmaps (reversing scanlines and calling SetBitmapBits works, but only if the all scanlines are updated!) Limitations: - No support for COMCTL32 controls. - Many Win32 apis not included. - Many apis have extensions in Win9x & NT 4 that are not supported. - No support for Win9x & NT 4 extended dialog styles. - Profile apis don't use ini files. General problem: - Can't extend Open32 easily without knowledge of internals