Release 950706
Wed Jul 5 19:06:35 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [controls/scroll.c]
Fixed drawing bug that caused part of a non-client scroll bar
to be painted even when the scroll-bar was hidden.
* [debugger/break.c] [debugger/dbg.y]
Rewrote breakpoint handling to work in 16-bit mode.
Implemented single-stepping ('step' and 'next' instructions).
* [debugger/debug.l]
Format specifier is now a separate token.
Entering an empty line at the debugger prompt causes the previous
command to be repeated, like under gdb.
* [debugger/debug.l] [debugger/registers.c]
Differentiate 16-bit and 32-bit registers without taking current
mode into account ($eax is always 32-bit, $ax always 16-bit).
* [debugger/stack.c]
Fixed stack information routines to differentiate between 16-bit
and 32-bit stacks.
* [loader/task.c]
Option -debug now sets a breakpoint at the first instruction of
every loaded task.
* [miscemu/instr.c]
Added handling of lock, repe and repne prefixes.
* [objects/dib.c]
Changed StretchDIBits() to do the correct thing, even if it's still
not really optimal.
* [windows/graphics.c]
Fixes in RoundRect(), thanks to Babak Masalehdan.
* [windows/message.c]
Tried to fix mouse event handling with respect to disabled
windows.
* [windows/painting.c]
Clear WIN_NEEDS_NCPAINT flag before sending WM_NCPAINT to avoid
infinite loops.
* [windows/win.c]
Fixed IsWindowVisible() to return FALSE when one of the parent
windows is hidden.
Sat Jul 1 22:08:21 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][misc/compobj.c]
CoGetMalloc: New function
Added relay entries for COMPOBJ ordinals above 100
CoInitialize: Changed parameter to DWORD
* [if1632/ole2.spec]
Exported implementation of OleBuildVersion
* [if1632/ole2disp.spec][misc/ole2disp.c][misc/Imakefile]
ole2disp.c: New file
SysAllocString, SysReallocString, SysAllocStringLen,
SysReAllocStringLen, SysFreeString, SysStringLen: new functions
* [if1632/ole2nls.spec][include/winnls.h][misc/ole2nls.c]
CompareStringA: New function
Thu Jun 29 19:42:02 1995 Marcus Meissner <msmeissn@faui01.informatik.uni-erlangen.de>
* [objects/font.c] [if1632/gdi.spec]
New stubs for CreateScalableFontResource, GetGlyphOutline.
Thu Jun 29 13:47:08 GMT 1995 Göran Thyni (goran@norrsken.bildbasen.se)
* [misc/commdlg.c]
Extensive changes and bug fixes to FileDialog handling,
behaves more like native Windows.
Wed Jun 28 13:04:44 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c]
Some minor optimizations.
* [memory/local.c]
LOCAL_FindFreeBlock(): Never use the last one.
* [memory/global.c]
GlobalReAlloc(): GMEM_MODIFY must not be ignored when size==0.
* [misc/file.c]
read() returns an error when length==0. This is not what Windows
programs expect, so pay attention to this in _lread(). Changed this
in _lwrite(), _hread(), _hwrite(), too.
* [loader/resource.c]
LoadIcon(): Ignore bih->biSizeImage, some icons have wrong values in
there.
* [if1632/shell.spec] [misc/shell.c]
Wrong spec file entries caused havoc: HKEY has 32 bit, not 16.
Accept some more combinations of parameters in the Reg..() functions.
* [if1632/toolhelp.spec]
Make InterruptRegister() and InterruptUnregister() return false.
* [windows/hook.c]
CallNextHookEx() used to crash when called with a null hhook. Fixed.
Wed Jun 28 10:14:34 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [include/neexe.h][loader/ne_image.c]
NE_LoadSegment: Detect iterated segments
* [misc/ole2nls.c]
LOCALE_SLONGDATE: fixed typo
* [miscemu/int5c.c]
Reordered include files to avoid conflicts with Linux libc.5.1
* [rc/winerc.c]
Added -b option to process binary resource files into C arrays
* [include/callback.h]
CallWndProc: Added dummy ds parameter for libwine
* [include/gdi.h][include/user.h]
USER_HEAP_ALLOC, GDI_HEAP_ALLOC: dropped flags parameter
* [include/ldt.h][include/stackframe.h]
defined segment conversion macros for libwine
* [misc/atom.c]
Defined USER_HeapSel for libwine
* [misc/main.c]
Disable -dll option for libwine
* [misc/user.c]
removed GetFreeSystemResources, SystemHeapInfo from libwine for now
* [toolkit/heap.c]
fixed LocalLock prototype
* [toolkit/sup.c]
sync'ed load_mz_header, load_ne_header with structures
* [toolkit/winmain.c]
Disabled resource DLLs for libwine for now
Mon Jun 26 19:30:24 1995 Hans de Graaff (graaff@twi72.twi.tudelft.nl)
* [misc/main.c]
Fixed -enhanced option to report a 386 CPU instead of a 286.
Fri Jun 23 23:18:25 1995 Marcus Meissner <msmeissn@faui01.informatik.uni-erlangen.de>
* [misc/dos_fs.c]
Remove maximum open dosdirent limit (fixing the winfile.exe
problem) by using telldir()/seekdir().
Fri Jun 23 13:42:25 1995 Hans de Graaff (graaff@twi72.twi.tudelft.nl)
* [misc/profile.c]
Fixed problem parsing empty lines within sections in .ini files.
diff --git a/controls/combo.c b/controls/combo.c
index abf7abb..1967926 100644
--- a/controls/combo.c
+++ b/controls/combo.c
@@ -29,100 +29,6 @@
* I hope no programs rely on the implementation of combos.
*/
-static LONG CBNCCreate( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBCreate( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetDlgCode( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBDestroy( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBPaint( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBKeyDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBChar( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetFont( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetRedraw( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLButtonDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBKillFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBResetContent( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBDir( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBAddString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetLBText( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBInsertString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBDeleteString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBFindString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetCount( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetCurSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetItemData( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetItemHeight( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBGetLBTextLen( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSelectString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetItemData( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetCurSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBSetItemHeight( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBShowDropDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-
-static LONG CBLCreate( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLGetDlgCode( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLKeyDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLChar( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLPaint( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLKillFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLActivate( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLLButtonDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLLButtonUp( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLMouseMove( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG CBLVScroll( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-
-typedef struct {
- WORD message;
- LONG (*handler)(HWND, WORD, WPARAM, LPARAM);
-} msg_tbl;
-
-static msg_tbl combo_tbl[] = {
- {WM_NCCREATE, CBNCCreate},
- {WM_CREATE, CBCreate},
- {WM_DESTROY, CBDestroy},
- {WM_GETDLGCODE, CBGetDlgCode},
- {WM_KEYDOWN, CBKeyDown},
- {WM_CHAR, CBChar},
- {WM_SETFONT, CBSetFont},
- {WM_SETREDRAW, CBSetRedraw},
- {WM_PAINT, CBPaint},
- {WM_LBUTTONDOWN, CBLButtonDown},
- {WM_SETFOCUS, CBSetFocus},
- {WM_KILLFOCUS, CBKillFocus},
- {CB_RESETCONTENT, CBResetContent},
- {CB_DIR, CBDir},
- {CB_ADDSTRING, CBAddString},
- {CB_INSERTSTRING, CBInsertString},
- {CB_DELETESTRING, CBDeleteString},
- {CB_FINDSTRING, CBFindString},
- {CB_GETCOUNT, CBGetCount},
- {CB_GETCURSEL, CBGetCurSel},
- {CB_GETITEMDATA, CBGetItemData},
- {CB_GETITEMHEIGHT, CBGetItemHeight},
- {CB_GETLBTEXT, CBGetLBText},
- {CB_GETLBTEXTLEN, CBGetLBTextLen},
- {CB_SELECTSTRING, CBSelectString},
- {CB_SETITEMDATA, CBSetItemData},
- {CB_SETCURSEL, CBSetCurSel},
- {CB_SETITEMHEIGHT, CBSetItemHeight},
- {CB_SHOWDROPDOWN, CBShowDropDown}
-
-};
-
-static msg_tbl clbox_tbl[] = {
- {WM_CREATE, CBLCreate},
- {WM_GETDLGCODE, CBLGetDlgCode},
- {WM_KEYDOWN, CBLKeyDown},
- {WM_CHAR, CBLChar},
- {WM_PAINT, CBLPaint},
- {WM_KILLFOCUS, CBLKillFocus},
- {WM_ACTIVATE, CBLActivate},
- {WM_LBUTTONDOWN, CBLLButtonDown},
- {WM_LBUTTONUP, CBLLButtonUp},
- {WM_MOUSEMOVE, CBLMouseMove},
- {WM_VSCROLL, CBLVScroll}
-};
-
static HBITMAP hComboBit = 0;
static WORD CBitHeight, CBitWidth;
@@ -174,7 +80,7 @@
/***********************************************************************
* CBNCCreate
*/
-static LONG CBNCCreate(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBNCCreate(HWND hwnd, WORD wParam, LONG lParam)
{
CREATESTRUCT *createStruct;
@@ -185,14 +91,14 @@
SetWindowLong(hwnd, GWL_STYLE, createStruct->style);
dprintf_combo(stddeb,"ComboBox WM_NCCREATE!\n");
- return DefWindowProc(hwnd, message, wParam, lParam);
+ return DefWindowProc(hwnd, WM_NCCREATE, wParam, lParam);
}
/***********************************************************************
* CBCreate
*/
-static LONG CBCreate(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBCreate(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
LPHEADCOMBO lphc;
@@ -268,7 +174,7 @@
/***********************************************************************
* CBDestroy
*/
-static LONG CBDestroy(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBDestroy(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
@@ -281,7 +187,7 @@
/***********************************************************************
* CBPaint
*/
-static LONG CBPaint(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBPaint(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
@@ -324,7 +230,7 @@
height = lpls->mis.itemHeight;
rect.bottom = rect.top + height;
- if (OWNER_DRAWN(lphl)) {
+ if (lphl->OwnerDrawn) {
ListBoxDrawItem (hwnd, lphl, hdc, lpls, &rect, ODA_DRAWENTIRE, 0);
} else {
ListBoxDrawItem (hwnd, lphl, hdc, lpls, &rect, ODA_DRAWENTIRE, 0);
@@ -340,7 +246,7 @@
/***********************************************************************
* CBGetDlgCode
*/
-static LONG CBGetDlgCode(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetDlgCode(HWND hwnd, WORD wParam, LONG lParam)
{
return DLGC_WANTARROWS | DLGC_WANTCHARS;
}
@@ -348,7 +254,7 @@
/***********************************************************************
* CBLButtonDown
*/
-static LONG CBLButtonDown(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBLButtonDown(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
SendMessage(hwnd,CB_SHOWDROPDOWN,!lphc->DropDownVisible,0);
@@ -358,7 +264,7 @@
/***********************************************************************
* CBKeyDown
*/
-static LONG CBKeyDown(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBKeyDown(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
WORD newFocused = lphl->ItemFocused;
@@ -397,7 +303,7 @@
/***********************************************************************
* CBChar
*/
-static LONG CBChar(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBChar(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
WORD newFocused;
@@ -422,7 +328,7 @@
/***********************************************************************
* CBKillFocus
*/
-static LONG CBKillFocus(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBKillFocus(HWND hwnd, WORD wParam, LONG lParam)
{
return 0;
}
@@ -430,7 +336,7 @@
/***********************************************************************
* CBSetFocus
*/
-static LONG CBSetFocus(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetFocus(HWND hwnd, WORD wParam, LONG lParam)
{
return 0;
}
@@ -438,7 +344,7 @@
/***********************************************************************
* CBResetContent
*/
-static LONG CBResetContent(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBResetContent(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
@@ -451,7 +357,7 @@
/***********************************************************************
* CBDir
*/
-static LONG CBDir(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBDir(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ComboGetListHeader(hwnd);
@@ -465,13 +371,13 @@
/***********************************************************************
* CBInsertString
*/
-static LONG CBInsertString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBInsertString(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
- if (HasStrings(lphl))
+ if (lphl->HasStrings)
wRet = ListBoxInsertString(lphl, wParam, (LPSTR)PTR_SEG_TO_LIN(lParam));
else
wRet = ListBoxInsertString(lphl, wParam, (LPSTR)lParam);
@@ -483,13 +389,13 @@
/***********************************************************************
* CBAddString
*/
-static LONG CBAddString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBAddString(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
- if (HasStrings(lphl))
+ if (lphl->HasStrings)
wRet = ListBoxAddString(lphl, (LPSTR)PTR_SEG_TO_LIN(lParam));
else
wRet = ListBoxAddString(lphl, (LPSTR)lParam);
@@ -501,7 +407,7 @@
/***********************************************************************
* CBDeleteString
*/
-static LONG CBDeleteString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBDeleteString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
@@ -514,7 +420,7 @@
/***********************************************************************
* CBSelectString
*/
-static LONG CBSelectString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSelectString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
WORD wRet;
@@ -529,7 +435,7 @@
/***********************************************************************
* CBFindString
*/
-static LONG CBFindString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBFindString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return ListBoxFindString(lphl, wParam, lParam);
@@ -538,7 +444,7 @@
/***********************************************************************
* CBGetCount
*/
-static LONG CBGetCount(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetCount(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return lphl->ItemsCount;
@@ -547,7 +453,7 @@
/***********************************************************************
* CBSetCurSel
*/
-static LONG CBSetCurSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetCurSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
WORD wRet;
@@ -563,7 +469,7 @@
/***********************************************************************
* CBGetCurSel
*/
-static LONG CBGetCurSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetCurSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return lphl->ItemFocused;
@@ -572,7 +478,7 @@
/***********************************************************************
* CBGetItemHeight
*/
-static LONG CBGetItemHeight(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetItemHeight(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPLISTSTRUCT lpls = ListBoxGetItem (lphl, wParam);
@@ -584,7 +490,7 @@
/***********************************************************************
* CBSetItemHeight
*/
-static LONG CBSetItemHeight(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetItemHeight(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return ListBoxSetItemHeight(lphl, wParam, lParam);
@@ -593,7 +499,7 @@
/***********************************************************************
* CBSetRedraw
*/
-static LONG CBSetRedraw(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetRedraw(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
lphl->bRedrawFlag = wParam;
@@ -603,7 +509,7 @@
/***********************************************************************
* CBSetFont
*/
-static LONG CBSetFont(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetFont(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
@@ -618,19 +524,19 @@
/***********************************************************************
* CBGetLBTextLen
*/
-static LONG CBGetLBTextLen(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetLBTextLen(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
LPLISTSTRUCT lpls = ListBoxGetItem(lphl,wParam);
- if (lpls == NULL || !HasStrings(lphl)) return LB_ERR;
+ if (lpls == NULL || !lphl->HasStrings) return LB_ERR;
return strlen(lpls->itemText);
}
/***********************************************************************
* CBGetLBText
*/
-static LONG CBGetLBText(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetLBText(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return ListBoxGetText(lphl, wParam, (LPSTR)PTR_SEG_TO_LIN(lParam));
@@ -639,7 +545,7 @@
/***********************************************************************
* CBGetItemData
*/
-static LONG CBGetItemData(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBGetItemData(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return ListBoxGetItemData(lphl, wParam);
@@ -648,7 +554,7 @@
/***********************************************************************
* CBSetItemData
*/
-static LONG CBSetItemData(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBSetItemData(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ComboGetListHeader(hwnd);
return ListBoxSetItemData(lphl, wParam, lParam);
@@ -657,7 +563,7 @@
/***********************************************************************
* CBShowDropDown
*/
-static LONG CBShowDropDown(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG CBShowDropDown(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADCOMBO lphc = ComboGetStorageHeader(hwnd);
RECT rect;
@@ -681,16 +587,38 @@
*/
LONG ComboBoxWndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
{
- int idx = 0;
- int table_size = sizeof (combo_tbl) / sizeof (msg_tbl);
-
- while (idx < table_size) {
- if (message == combo_tbl[idx].message) {
- return (*(combo_tbl[idx].handler))(hwnd, message, wParam, lParam);
+ switch(message) {
+ case WM_NCCREATE: return CBNCCreate(hwnd, wParam, lParam);
+ case WM_CREATE: return CBCreate(hwnd, wParam, lParam);
+ case WM_DESTROY: return CBDestroy(hwnd, wParam, lParam);
+ case WM_GETDLGCODE: return CBGetDlgCode(hwnd, wParam, lParam);
+ case WM_KEYDOWN: return CBKeyDown(hwnd, wParam, lParam);
+ case WM_CHAR: return CBChar(hwnd, wParam, lParam);
+ case WM_SETFONT: return CBSetFont(hwnd, wParam, lParam);
+ case WM_SETREDRAW: return CBSetRedraw(hwnd, wParam, lParam);
+ case WM_PAINT: return CBPaint(hwnd, wParam, lParam);
+ case WM_LBUTTONDOWN: return CBLButtonDown(hwnd, wParam, lParam);
+ case WM_SETFOCUS: return CBSetFocus(hwnd, wParam, lParam);
+ case WM_KILLFOCUS: return CBKillFocus(hwnd, wParam, lParam);
+ case CB_RESETCONTENT: return CBResetContent(hwnd, wParam, lParam);
+ case CB_DIR: return CBDir(hwnd, wParam, lParam);
+ case CB_ADDSTRING: return CBAddString(hwnd, wParam, lParam);
+ case CB_INSERTSTRING: return CBInsertString(hwnd, wParam, lParam);
+ case CB_DELETESTRING: return CBDeleteString(hwnd, wParam, lParam);
+ case CB_FINDSTRING: return CBFindString(hwnd, wParam, lParam);
+ case CB_GETCOUNT: return CBGetCount(hwnd, wParam, lParam);
+ case CB_GETCURSEL: return CBGetCurSel(hwnd, wParam, lParam);
+ case CB_GETITEMDATA: return CBGetItemData(hwnd, wParam, lParam);
+ case CB_GETITEMHEIGHT: return CBGetItemHeight(hwnd, wParam, lParam);
+ case CB_GETLBTEXT: return CBGetLBText(hwnd, wParam, lParam);
+ case CB_GETLBTEXTLEN: return CBGetLBTextLen(hwnd, wParam, lParam);
+ case CB_SELECTSTRING: return CBSelectString(hwnd, wParam, lParam);
+ case CB_SETITEMDATA: return CBSetItemData(hwnd, wParam, lParam);
+ case CB_SETCURSEL: return CBSetCurSel(hwnd, wParam, lParam);
+ case CB_SETITEMHEIGHT: return CBSetItemHeight(hwnd, wParam, lParam);
+ case CB_SHOWDROPDOWN: return CBShowDropDown(hwnd, wParam, lParam);
}
- idx++;
- }
- return DefWindowProc (hwnd, message, wParam, lParam);
+ return DefWindowProc(hwnd, message, wParam, lParam);
}
/*--------------------------------------------------------------------*/
@@ -709,7 +637,7 @@
/***********************************************************************
* CBLCreate
*/
-static LONG CBLCreate( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLCreate( HWND hwnd, WORD wParam, LONG lParam )
{
CREATESTRUCT *createStruct = (CREATESTRUCT *)PTR_SEG_TO_LIN(lParam);
SetWindowWord(hwnd,0,LOWORD(createStruct->lpCreateParams));
@@ -719,7 +647,7 @@
/***********************************************************************
* CBLGetDlgCode
*/
-static LONG CBLGetDlgCode( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLGetDlgCode( HWND hwnd, WORD wParam, LONG lParam )
{
return DLGC_WANTARROWS | DLGC_WANTCHARS;
}
@@ -727,7 +655,7 @@
/***********************************************************************
* CBLKeyDown
*/
-static LONG CBLKeyDown( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLKeyDown( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
WORD newFocused = lphl->ItemFocused;
@@ -775,7 +703,7 @@
/***********************************************************************
* CBLChar
*/
-static LONG CBLChar( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLChar( HWND hwnd, WORD wParam, LONG lParam )
{
return 0;
}
@@ -783,7 +711,7 @@
/***********************************************************************
* CBLPaint
*/
-static LONG CBLPaint( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLPaint( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
LPLISTSTRUCT lpls;
@@ -828,7 +756,7 @@
lpls->itemRect.right = rect.right;
dprintf_listbox(stddeb,"drawing item: %d %d %d %d %d\n",rect.left,top,rect.right,top+height,lpls->itemState);
- if (OWNER_DRAWN(lphl)) {
+ if (lphl->OwnerDrawn) {
ListBoxDrawItem (combohwnd, lphl, hdc, lpls, &lpls->itemRect, ODA_DRAWENTIRE, 0);
if (lpls->itemState)
ListBoxDrawItem (combohwnd, lphl, hdc, lpls, &lpls->itemRect, ODA_SELECT, ODS_SELECTED);
@@ -854,7 +782,7 @@
/***********************************************************************
* CBLKillFocus
*/
-static LONG CBLKillFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLKillFocus( HWND hwnd, WORD wParam, LONG lParam )
{
/* SendMessage(CLBoxGetCombo(hwnd),CB_SHOWDROPDOWN,0,0);*/
return 0;
@@ -863,7 +791,7 @@
/***********************************************************************
* CBLActivate
*/
-static LONG CBLActivate( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLActivate( HWND hwnd, WORD wParam, LONG lParam )
{
if (wParam == WA_INACTIVE)
SendMessage(CLBoxGetCombo(hwnd),CB_SHOWDROPDOWN,0,0);
@@ -873,7 +801,7 @@
/***********************************************************************
* CBLLButtonDown
*/
-static LONG CBLLButtonDown( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLLButtonDown( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
int y;
@@ -898,7 +826,7 @@
/***********************************************************************
* CBLLButtonUp
*/
-static LONG CBLLButtonUp( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLLButtonUp( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
@@ -916,7 +844,7 @@
/***********************************************************************
* CBLMouseMove
*/
-static LONG CBLMouseMove( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLMouseMove( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
int y;
@@ -959,7 +887,7 @@
/***********************************************************************
* CBLVScroll
*/
-static LONG CBLVScroll( HWND hwnd, WORD message, WORD wParam, LONG lParam )
+static LONG CBLVScroll( HWND hwnd, WORD wParam, LONG lParam )
{
LPHEADLIST lphl = CLBoxGetListHeader(hwnd);
int y;
@@ -1009,16 +937,20 @@
*/
LONG ComboLBoxWndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
{
- int idx = 0;
- int table_size = sizeof (clbox_tbl) / sizeof (msg_tbl);
-
- while (idx < table_size) {
- if (message == clbox_tbl[idx].message) {
- return (*(clbox_tbl[idx].handler))(hwnd, message, wParam, lParam);
+ switch(message) {
+ case WM_CREATE: return CBLCreate(hwnd, wParam, lParam);
+ case WM_GETDLGCODE: return CBLGetDlgCode(hwnd, wParam, lParam);
+ case WM_KEYDOWN: return CBLKeyDown(hwnd, wParam, lParam);
+ case WM_CHAR: return CBLChar(hwnd, wParam, lParam);
+ case WM_PAINT: return CBLPaint(hwnd, wParam, lParam);
+ case WM_KILLFOCUS: return CBLKillFocus(hwnd, wParam, lParam);
+ case WM_ACTIVATE: return CBLActivate(hwnd, wParam, lParam);
+ case WM_LBUTTONDOWN: return CBLLButtonDown(hwnd, wParam, lParam);
+ case WM_LBUTTONUP: return CBLLButtonUp(hwnd, wParam, lParam);
+ case WM_MOUSEMOVE: return CBLMouseMove(hwnd, wParam, lParam);
+ case WM_VSCROLL: return CBLVScroll(hwnd, wParam, lParam);
}
- idx++;
- }
- return DefWindowProc (hwnd, message, wParam, lParam);
+ return DefWindowProc(hwnd, message, wParam, lParam);
}
/************************************************************************
diff --git a/controls/listbox.c b/controls/listbox.c
index a2518b6..d1fc9ac 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -40,120 +40,6 @@
#define LIST_HEAP_SIZE 0x10000
-/* Design notes go here */
-
-static LONG LBCreate( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetDlgCode( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBDestroy( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBVScroll( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBHScroll( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBLButtonDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBLButtonUp( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBRButtonUp( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBMouseMove( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBKeyDown( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBChar( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetFont( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetRedraw( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBPaint( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBKillFocus( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBResetContent( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBDir( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBAddString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetText( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBInsertString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBDeleteString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBFindString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetCaretIndex( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetCount( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetCurSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetHorizontalExtent(HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetItemData( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetItemHeight( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetItemRect( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetSelCount( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetSelItems( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetTextLen( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBGetTopIndex( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSelectString( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSelItemRange( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetCaretIndex( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetColumnWidth( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetHorizontalExtent(HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetItemData( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetTabStops( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetCurSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetSel( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetTopIndex( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-static LONG LBSetItemHeight( HWND hwnd, WORD message, WORD wParam, LONG lParam );
-
-typedef struct {
- WORD message;
- LONG (*handler)(HWND, WORD, WPARAM, LPARAM);
-} msg_tbl;
-
-static msg_tbl methods[] = {
- {WM_CREATE, LBCreate},
- {WM_DESTROY, LBDestroy},
- {WM_GETDLGCODE, LBGetDlgCode},
- {WM_VSCROLL, LBVScroll},
- {WM_HSCROLL, LBHScroll},
- {WM_LBUTTONDOWN, LBLButtonDown},
- {WM_LBUTTONUP, LBLButtonUp},
- {WM_RBUTTONUP, LBRButtonUp},
- {WM_LBUTTONDBLCLK, LBRButtonUp},
- {WM_MOUSEMOVE, LBMouseMove},
- {WM_KEYDOWN, LBKeyDown},
- {WM_CHAR, LBChar},
- {WM_SETFONT, LBSetFont},
- {WM_SETREDRAW, LBSetRedraw},
- {WM_PAINT, LBPaint},
- {WM_SETFOCUS, LBSetFocus},
- {WM_KILLFOCUS, LBKillFocus},
- {LB_RESETCONTENT, LBResetContent},
- {LB_DIR, LBDir},
- {LB_ADDSTRING, LBAddString},
- {LB_INSERTSTRING, LBInsertString},
- {LB_DELETESTRING, LBDeleteString},
- {LB_FINDSTRING, LBFindString},
- {LB_GETCARETINDEX, LBGetCaretIndex},
- {LB_GETCOUNT, LBGetCount},
- {LB_GETCURSEL, LBGetCurSel},
- {LB_GETHORIZONTALEXTENT, LBGetHorizontalExtent},
- {LB_GETITEMDATA, LBGetItemData},
- {LB_GETITEMHEIGHT, LBGetItemHeight},
- {LB_GETITEMRECT, LBGetItemRect},
- {LB_GETSEL, LBGetSel},
- {LB_GETSELCOUNT, LBGetSelCount},
- {LB_GETSELITEMS, LBGetSelItems},
- {LB_GETTEXT, LBGetText},
- {LB_GETTEXTLEN, LBGetTextLen},
- {LB_GETTOPINDEX, LBGetTopIndex},
- {LB_SELECTSTRING, LBSelectString},
- {LB_SELITEMRANGE, LBSelItemRange},
- {LB_SETCARETINDEX, LBSetCaretIndex},
- {LB_SETCOLUMNWIDTH, LBSetColumnWidth},
- {LB_SETHORIZONTALEXTENT, LBSetHorizontalExtent},
- {LB_SETITEMDATA, LBSetItemData},
- {LB_SETTABSTOPS, LBSetTabStops},
- {LB_SETCURSEL, LBSetCurSel},
- {LB_SETSEL, LBSetSel},
- {LB_SETTOPINDEX, LBSetTopIndex},
- {LB_SETITEMHEIGHT, LBSetItemHeight}
-};
-
-BOOL OWNER_DRAWN(LPHEADLIST lphl)
-{
- return lphl->dwStyle & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE);
-}
-
-BOOL HasStrings(LPHEADLIST lphl)
-{
- return (lphl->dwStyle & LBS_HASSTRINGS) || !OWNER_DRAWN(lphl);
-}
-
static void ListBoxInitialize(LPHEADLIST lphl)
{
lphl->lpFirst = NULL;
@@ -187,8 +73,10 @@
lphl->hParent = parent;
lphl->StdItemHeight = 15; /* FIXME: should get the font height */
lphl->dwStyle = styles;
+ lphl->OwnerDrawn = styles & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE);
+ lphl->HasStrings = (styles & LBS_HASSTRINGS) || !lphl->OwnerDrawn;
- if (OWNER_DRAWN(lphl)) {
+ if (lphl->OwnerDrawn) {
LISTSTRUCT dummyls;
lphl->hDrawItemStruct = USER_HEAP_ALLOC(sizeof(DRAWITEMSTRUCT));
@@ -302,7 +190,7 @@
void ListBoxDrawItem (HWND hwnd, LPHEADLIST lphl, HDC hdc, LPLISTSTRUCT lpls,
RECT *rect, WORD itemAction, WORD itemState)
{
- if (OWNER_DRAWN(lphl)) {
+ if (lphl->OwnerDrawn) {
DRAWITEMSTRUCT *dis = USER_HEAP_LIN_ADDR(lphl->hDrawItemStruct);
dis->CtlID = lpls->mis.CtlID;
@@ -446,7 +334,8 @@
lphl->ItemsCount++;
hStr = 0;
- if (HasStrings(lphl)) {
+ if (lphl->HasStrings) {
+ dprintf_listbox(stddeb," string: %s\n", newstr);
hStr = LIST_HEAP_ALLOC(lphl, LMEM_MOVEABLE, strlen(newstr) + 1);
str = (LPSTR)LIST_HEAP_ADDR(lphl, hStr);
if (str == NULL) return LB_ERRSPACE;
@@ -480,7 +369,7 @@
{
UINT pos = (UINT) -1;
- if (HasStrings(lphl) && (lphl->dwStyle & LBS_SORT)) {
+ if (lphl->HasStrings && (lphl->dwStyle & LBS_SORT)) {
LPLISTSTRUCT lpls = lphl->lpFirst;
for (pos = 0; lpls != NULL; lpls = lpls->lpNext, pos++)
if (strcmp(lpls->itemText, newstr) >= 0)
@@ -502,7 +391,7 @@
lpls = ListBoxGetItem (lphl, uIndex);
if (lpls == NULL) return LB_ERR;
- if (!HasStrings(lphl)) {
+ if (!lphl->HasStrings) {
*((long *)OutStr) = lpls->mis.itemData;
return 4;
}
@@ -578,12 +467,12 @@
if (First > lphl->ItemsCount) return LB_ERR;
- if (HasStrings(lphl)) lpMatchStr = PTR_SEG_TO_LIN(MatchStr);
+ if (lphl->HasStrings) lpMatchStr = PTR_SEG_TO_LIN(MatchStr);
lpls = ListBoxGetItem(lphl, First);
Count = 0;
while(lpls != NULL) {
- if (HasStrings(lphl)) {
+ if (lphl->HasStrings) {
if (strstr(lpls->itemText, lpMatchStr) == lpls->itemText) return Count;
} else if (lphl->dwStyle & LBS_SORT) {
/* XXX Do a compare item */
@@ -600,7 +489,7 @@
lpls = lphl->lpFirst;
while (Count < First) {
- if (HasStrings(lphl)) {
+ if (lphl->HasStrings) {
if (strstr(lpls->itemText, lpMatchStr) == lpls->itemText) return Count;
} else if (lphl->dwStyle & LBS_SORT) {
/* XXX Do a compare item */
@@ -794,7 +683,7 @@
UINT count,first;
if ((char)wChar < ' ') return LB_ERR;
- if (!HasStrings(lphl)) return LB_ERR;
+ if (!lphl->HasStrings) return LB_ERR;
lpls = lphl->lpFirst;
@@ -815,7 +704,7 @@
/***********************************************************************
* LBCreate
*/
-static LONG LBCreate(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBCreate(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
RECT rect;
@@ -836,7 +725,7 @@
/***********************************************************************
* LBDestroy
*/
-static LONG LBDestroy(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBDestroy(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -850,7 +739,7 @@
/***********************************************************************
* LBVScroll
*/
-static LONG LBVScroll(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBVScroll(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
int y;
@@ -899,7 +788,7 @@
/***********************************************************************
* LBHScroll
*/
-static LONG LBHScroll(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBHScroll(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
int y;
@@ -956,7 +845,7 @@
/***********************************************************************
* LBLButtonDown
*/
-static LONG LBLButtonDown(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBLButtonDown(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD wRet;
@@ -992,7 +881,7 @@
/***********************************************************************
* LBLButtonUp
*/
-static LONG LBLButtonUp(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBLButtonUp(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1007,7 +896,7 @@
/***********************************************************************
* LBRButtonUp
*/
-static LONG LBRButtonUp(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBRButtonUp(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1020,7 +909,7 @@
/***********************************************************************
* LBMouseMove
*/
-static LONG LBMouseMove(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBMouseMove(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
int y;
@@ -1071,7 +960,7 @@
/***********************************************************************
* LBKeyDown
*/
-static LONG LBKeyDown(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBKeyDown(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD newFocused = lphl->ItemFocused;
@@ -1143,7 +1032,7 @@
/***********************************************************************
* LBChar
*/
-static LONG LBChar(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBChar(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD newFocused;
@@ -1169,7 +1058,7 @@
/***********************************************************************
* LBSetRedraw
*/
-static LONG LBSetRedraw(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetRedraw(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1182,7 +1071,7 @@
/***********************************************************************
* LBSetFont
*/
-static LONG LBSetFont(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetFont(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1197,7 +1086,7 @@
/***********************************************************************
* LBPaint
*/
-static LONG LBPaint(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBPaint(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls;
@@ -1260,7 +1149,7 @@
lpls->itemRect.right = rect.right;
dprintf_listbox(stddeb,"drawing item: %d %d %d %d %d\n",rect.left,top,rect.right,top+height,lpls->itemState);
- if (OWNER_DRAWN(lphl)) {
+ if (lphl->OwnerDrawn) {
ListBoxDrawItem (hwnd, lphl, hdc, lpls, &lpls->itemRect, ODA_DRAWENTIRE, 0);
if (lpls->itemState)
ListBoxDrawItem (hwnd, lphl, hdc, lpls, &lpls->itemRect, ODA_SELECT, ODS_SELECTED);
@@ -1286,7 +1175,7 @@
/***********************************************************************
* LBSetFocus
*/
-static LONG LBSetFocus(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetFocus(HWND hwnd, WORD wParam, LONG lParam)
{
dprintf_listbox(stddeb,"ListBox WM_SETFOCUS !\n");
@@ -1296,7 +1185,7 @@
/***********************************************************************
* LBKillFocus
*/
-static LONG LBKillFocus(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBKillFocus(HWND hwnd, WORD wParam, LONG lParam)
{
dprintf_listbox(stddeb,"ListBox WM_KILLFOCUS !\n");
@@ -1308,7 +1197,7 @@
/***********************************************************************
* LBResetContent
*/
-static LONG LBResetContent(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBResetContent(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1321,7 +1210,7 @@
/***********************************************************************
* LBDir
*/
-static LONG LBDir(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBDir(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1335,12 +1224,12 @@
/***********************************************************************
* LBAddString
*/
-static LONG LBAddString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBAddString(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
- if (HasStrings(lphl))
+ if (lphl->HasStrings)
wRet = ListBoxAddString(lphl, (LPSTR)PTR_SEG_TO_LIN(lParam));
else
wRet = ListBoxAddString(lphl, (LPSTR)lParam);
@@ -1352,7 +1241,7 @@
/***********************************************************************
* LBGetText
*/
-static LONG LBGetText(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetText(HWND hwnd, WORD wParam, LONG lParam)
{
LONG wRet;
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1366,12 +1255,12 @@
/***********************************************************************
* LBInsertString
*/
-static LONG LBInsertString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBInsertString(HWND hwnd, WORD wParam, LONG lParam)
{
WORD wRet;
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
- if (HasStrings(lphl))
+ if (lphl->HasStrings)
wRet = ListBoxInsertString(lphl, wParam, (LPSTR)PTR_SEG_TO_LIN(lParam));
else
wRet = ListBoxInsertString(lphl, wParam, (LPSTR)lParam);
@@ -1383,7 +1272,7 @@
/***********************************************************************
* LBDeleteString
*/
-static LONG LBDeleteString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBDeleteString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LONG lRet = ListBoxDeleteString(lphl,wParam);
@@ -1395,7 +1284,7 @@
/***********************************************************************
* LBFindString
*/
-static LONG LBFindString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBFindString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
return ListBoxFindString(lphl, wParam, lParam);
@@ -1404,7 +1293,7 @@
/***********************************************************************
* LBGetCaretIndex
*/
-static LONG LBGetCaretIndex(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetCaretIndex(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
return lphl->ItemFocused;
@@ -1413,7 +1302,7 @@
/***********************************************************************
* LBGetCount
*/
-static LONG LBGetCount(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetCount(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
@@ -1424,7 +1313,7 @@
/***********************************************************************
* LBGetCurSel
*/
-static LONG LBGetCurSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetCurSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
@@ -1437,7 +1326,7 @@
/***********************************************************************
* LBGetHorizontalExtent
*/
-static LONG LBGetHorizontalExtent(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetHorizontalExtent(HWND hwnd, WORD wParam, LONG lParam)
{
return 0;
}
@@ -1445,7 +1334,7 @@
/***********************************************************************
* LBGetItemHeight
*/
-static LONG LBGetItemHeight(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetItemHeight(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls = ListBoxGetItem (lphl, wParam);
@@ -1457,7 +1346,7 @@
/***********************************************************************
* LBGetItemRect
*/
-static LONG LBGetItemRect(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetItemRect(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
return ListBoxGetItemRect(lphl, wParam, PTR_SEG_TO_LIN(lParam));
@@ -1466,7 +1355,7 @@
/***********************************************************************
* LBGetSel
*/
-static LONG LBGetSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
return ListBoxGetSel(lphl, wParam);
@@ -1475,7 +1364,7 @@
/***********************************************************************
* LBGetSelCount
*/
-static LONG LBGetSelCount(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetSelCount(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls;
@@ -1497,7 +1386,7 @@
/***********************************************************************
* LBGetSelItems
*/
-static LONG LBGetSelItems(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetSelItems(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls;
@@ -1525,19 +1414,19 @@
/***********************************************************************
* LBGetTextLen
*/
-static LONG LBGetTextLen(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetTextLen(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls = ListBoxGetItem(lphl,wParam);
- if (lpls == NULL || !HasStrings(lphl)) return LB_ERR;
+ if (lpls == NULL || !lphl->HasStrings) return LB_ERR;
return strlen(lpls->itemText);
}
/***********************************************************************
* LBGetDlgCode
*/
-static LONG LBGetDlgCode(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetDlgCode(HWND hwnd, WORD wParam, LONG lParam)
{
return DLGC_WANTARROWS | DLGC_WANTCHARS;
}
@@ -1545,7 +1434,7 @@
/***********************************************************************
* LBGetTopIndex
*/
-static LONG LBGetTopIndex(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetTopIndex(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1556,7 +1445,7 @@
/***********************************************************************
* LBSelectString
*/
-static LONG LBSelectString(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSelectString(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD wRet;
@@ -1571,7 +1460,7 @@
/***********************************************************************
* LBSelItemRange
*/
-static LONG LBSelItemRange(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSelItemRange(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
LPLISTSTRUCT lpls;
@@ -1604,7 +1493,7 @@
/***********************************************************************
* LBSetCaretIndex
*/
-static LONG LBSetCaretIndex(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetCaretIndex(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1622,7 +1511,7 @@
/***********************************************************************
* LBSetColumnWidth
*/
-static LONG LBSetColumnWidth(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetColumnWidth(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
lphl->ColumnsWidth = wParam;
@@ -1633,7 +1522,7 @@
/***********************************************************************
* LBSetHorizontalExtent
*/
-static LONG LBSetHorizontalExtent(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetHorizontalExtent(HWND hwnd, WORD wParam, LONG lParam)
{
return 0;
}
@@ -1641,7 +1530,7 @@
/***********************************************************************
* LBGetItemData
*/
-static LONG LBGetItemData(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBGetItemData(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
dprintf_listbox(stddeb, "LB_GETITEMDATA wParam=%x\n", wParam);
@@ -1651,7 +1540,7 @@
/***********************************************************************
* LBSetItemData
*/
-static LONG LBSetItemData(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetItemData(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
dprintf_listbox(stddeb, "LB_SETITEMDATA wParam=%x lParam=%lx\n", wParam, lParam);
@@ -1661,7 +1550,7 @@
/***********************************************************************
* LBSetTabStops
*/
-static LONG LBSetTabStops(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetTabStops(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl;
@@ -1685,7 +1574,7 @@
/***********************************************************************
* LBSetCurSel
*/
-static LONG LBSetCurSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetCurSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD wRet;
@@ -1704,7 +1593,7 @@
/***********************************************************************
* LBSetSel
*/
-static LONG LBSetSel(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetSel(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD wRet;
@@ -1720,7 +1609,7 @@
/***********************************************************************
* LBSetTopIndex
*/
-static LONG LBSetTopIndex(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetTopIndex(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
@@ -1737,7 +1626,7 @@
/***********************************************************************
* LBSetItemHeight
*/
-static LONG LBSetItemHeight(HWND hwnd, WORD message, WORD wParam, LONG lParam)
+static LONG LBSetItemHeight(HWND hwnd, WORD wParam, LONG lParam)
{
LPHEADLIST lphl = ListBoxGetStorageHeader(hwnd);
WORD wRet;
@@ -1753,16 +1642,57 @@
*/
LONG ListBoxWndProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
{
- int idx = 0;
- int table_size = sizeof (methods) / sizeof (msg_tbl);
-
- while (idx < table_size) {
- if (message == methods[idx].message) {
- return (*(methods[idx].handler))(hwnd, message, wParam, lParam);
+ switch (message) {
+ case WM_CREATE: return LBCreate(hwnd, wParam, lParam);
+ case WM_DESTROY: return LBDestroy(hwnd, wParam, lParam);
+ case WM_GETDLGCODE: return LBGetDlgCode(hwnd, wParam, lParam);
+ case WM_VSCROLL: return LBVScroll(hwnd, wParam, lParam);
+ case WM_HSCROLL: return LBHScroll(hwnd, wParam, lParam);
+ case WM_LBUTTONDOWN: return LBLButtonDown(hwnd, wParam, lParam);
+ case WM_LBUTTONUP: return LBLButtonUp(hwnd, wParam, lParam);
+ case WM_RBUTTONUP: return LBRButtonUp(hwnd, wParam, lParam);
+ case WM_LBUTTONDBLCLK: return LBRButtonUp(hwnd, wParam, lParam);
+ case WM_MOUSEMOVE: return LBMouseMove(hwnd, wParam, lParam);
+ case WM_KEYDOWN: return LBKeyDown(hwnd, wParam, lParam);
+ case WM_CHAR: return LBChar(hwnd, wParam, lParam);
+ case WM_SETFONT: return LBSetFont(hwnd, wParam, lParam);
+ case WM_SETREDRAW: return LBSetRedraw(hwnd, wParam, lParam);
+ case WM_PAINT: return LBPaint(hwnd, wParam, lParam);
+ case WM_SETFOCUS: return LBSetFocus(hwnd, wParam, lParam);
+ case WM_KILLFOCUS: return LBKillFocus(hwnd, wParam, lParam);
+ case LB_RESETCONTENT: return LBResetContent(hwnd, wParam, lParam);
+ case LB_DIR: return LBDir(hwnd, wParam, lParam);
+ case LB_ADDSTRING: return LBAddString(hwnd, wParam, lParam);
+ case LB_INSERTSTRING: return LBInsertString(hwnd, wParam, lParam);
+ case LB_DELETESTRING: return LBDeleteString(hwnd, wParam, lParam);
+ case LB_FINDSTRING: return LBFindString(hwnd, wParam, lParam);
+ case LB_GETCARETINDEX: return LBGetCaretIndex(hwnd, wParam, lParam);
+ case LB_GETCOUNT: return LBGetCount(hwnd, wParam, lParam);
+ case LB_GETCURSEL: return LBGetCurSel(hwnd, wParam, lParam);
+ case LB_GETHORIZONTALEXTENT: return LBGetHorizontalExtent(hwnd, wParam, lParam);
+ case LB_GETITEMDATA: return LBGetItemData(hwnd, wParam, lParam);
+ case LB_GETITEMHEIGHT: return LBGetItemHeight(hwnd, wParam, lParam);
+ case LB_GETITEMRECT: return LBGetItemRect(hwnd, wParam, lParam);
+ case LB_GETSEL: return LBGetSel(hwnd, wParam, lParam);
+ case LB_GETSELCOUNT: return LBGetSelCount(hwnd, wParam, lParam);
+ case LB_GETSELITEMS: return LBGetSelItems(hwnd, wParam, lParam);
+ case LB_GETTEXT: return LBGetText(hwnd, wParam, lParam);
+ case LB_GETTEXTLEN: return LBGetTextLen(hwnd, wParam, lParam);
+ case LB_GETTOPINDEX: return LBGetTopIndex(hwnd, wParam, lParam);
+ case LB_SELECTSTRING: return LBSelectString(hwnd, wParam, lParam);
+ case LB_SELITEMRANGE: return LBSelItemRange(hwnd, wParam, lParam);
+ case LB_SETCARETINDEX: return LBSetCaretIndex(hwnd, wParam, lParam);
+ case LB_SETCOLUMNWIDTH: return LBSetColumnWidth(hwnd, wParam, lParam);
+ case LB_SETHORIZONTALEXTENT: return LBSetHorizontalExtent(hwnd, wParam, lParam);
+ case LB_SETITEMDATA: return LBSetItemData(hwnd, wParam, lParam);
+ case LB_SETTABSTOPS: return LBSetTabStops(hwnd, wParam, lParam);
+ case LB_SETCURSEL: return LBSetCurSel(hwnd, wParam, lParam);
+ case LB_SETSEL: return LBSetSel(hwnd, wParam, lParam);
+ case LB_SETTOPINDEX: return LBSetTopIndex(hwnd, wParam, lParam);
+ case LB_SETITEMHEIGHT: return LBSetItemHeight(hwnd, wParam, lParam);
}
- idx++;
- }
- return DefWindowProc (hwnd, message, wParam, lParam);
+
+ return DefWindowProc(hwnd, message, wParam, lParam);
}
/************************************************************************
diff --git a/controls/scroll.c b/controls/scroll.c
index 1f30bee..11b8e20 100644
--- a/controls/scroll.c
+++ b/controls/scroll.c
@@ -340,9 +340,6 @@
BOOL bottom_selected )
{
RECT r;
- WND *wndPtr = WIN_FindWndPtr( hwnd );
- if (((nBar == SB_VERT) && !(wndPtr->dwStyle & WS_VSCROLL))
- || ((nBar == SB_HORZ) && (!wndPtr->dwStyle & WS_HSCROLL))) return;
/* Select the correct brush and pen */
@@ -440,9 +437,13 @@
WORD arrowSize, thumbPos;
RECT rect;
BOOL vertical;
-
+ WND *wndPtr = WIN_FindWndPtr( hwnd );
SCROLLINFO *infoPtr = SCROLL_GetScrollInfo( hwnd, nBar );
- if (!infoPtr) return;
+
+ if (!wndPtr || !infoPtr ||
+ ((nBar == SB_VERT) && !(wndPtr->dwStyle & WS_VSCROLL)) ||
+ ((nBar == SB_HORZ) && !(wndPtr->dwStyle & WS_HSCROLL))) return;
+
vertical = SCROLL_GetScrollBarRect( hwnd, nBar, &rect,
&arrowSize, &thumbPos );
/* Draw the arrows */
@@ -467,9 +468,13 @@
RECT rect;
BOOL vertical;
HDC hdc;
-
+ WND *wndPtr = WIN_FindWndPtr( hwnd );
SCROLLINFO *infoPtr = SCROLL_GetScrollInfo( hwnd, nBar );
- if (!infoPtr) return;
+
+ if (!wndPtr || !infoPtr ||
+ ((nBar == SB_VERT) && !(wndPtr->dwStyle & WS_VSCROLL)) ||
+ ((nBar == SB_HORZ) && !(wndPtr->dwStyle & WS_HSCROLL))) return;
+
vertical = SCROLL_GetScrollBarRect( hwnd, nBar, &rect,
&arrowSize, &thumbPos );
hdc = (nBar == SB_CTL) ? GetDC(hwnd) : GetWindowDC(hwnd);