Release 940510
May 9, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/scroll.c]
Make thumbtrack button disappear if scroll box ratio < 3:1.
Make arrow buttons rectangular if scroll box ratio < 2:1.
Add code for SBS_TOPALIGN, SBS_BOTTOMALIGN,
SBS_LEFTALIGN & SBS_RIGHTALIGN.
Bug fix in NC_CreateScrollBars(), no more bigbutt in calendar.exe... :-)
* [loader/library.c] [loader/task.c] [misc/exec.c]
Continue playing around trying to get a second task running.
* [windows/mdi.c]
Change OBM_CLOSE for OBM_OLD_CLOSE, a smaller dot button when maximized.
* [everywhere]
Adding previous works of the Apr 25, 94.
Tue May 10 18:09:14 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [if1632/mmsystem.spec] [misc/mmsystem.c] [include/mmsystem.h]
Added Martin's mmsystem.dll stubs.
* [misc/sound.c]
Added remaining stubs for sound.dll.
* [if1632/shell.spec] [misc/shell.c]
Fixed prototypes (I found them in BC 4) and added ShellAbout()
and AboutDlgProc().
diff --git a/controls/menu.c b/controls/menu.c
index 00cc095..9ef90f41 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -408,8 +408,6 @@
LPPOPUPMENU lppop2;
if (lppop == NULL) return;
lpitem = MenuFindItem(lppop, x, y, &wRet);
- printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n",
- hWnd, x, y, wRet, lpitem);
#ifdef DEBUG_MENU
printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n",
hWnd, x, y, wRet, lpitem);
@@ -449,6 +447,10 @@
0, lppop->ownerWnd, (LPRECT)NULL);
}
GlobalUnlock(hSubMenu);
+ return TRUE;
+ }
+ if (lppop->BarFlag && !MenuHasFocus) {
+ MenuFocusLoop(hWnd, lppop);
}
return TRUE;
}
@@ -506,7 +508,8 @@
LPMENUITEM lpitem, lpitem2;
LPPOPUPMENU lppop2;
WORD wRet;
- if ((wParam & MK_LBUTTON) != 0) {
+/* if ((wParam & MK_LBUTTON) != 0) { */
+ if (GetKeyState(VK_LBUTTON) != 0) {
lpitem = MenuFindItem(lppop, x, y, &wRet);
#ifdef DEBUG_MENU
printf("MenuMouseMove // x=%d y=%d // wRet=%d lpitem=%08X !\n",
@@ -1319,12 +1322,13 @@
GlobalUnlock(hMenu);
return FALSE;
}
+ lpitem2->hItem = hNewItem;
lpitem2->item_flags = wFlags;
lpitem2->item_id = wItemID;
if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) {
-/* lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
- lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+ lpitem2->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+ lpitem2->item_text = GlobalLock(lpitem2->hText);
if (lpitem2->item_text != NULL)
strcpy(lpitem2->item_text, lpNewItem);
else {
@@ -1347,8 +1351,6 @@
if (lpitem2->next != NULL) lpitem2->next->prev = lpitem2;
lpitem->next = lpitem2;
}
- lpitem2->child = NULL;
- lpitem2->parent = NULL;
menu->nItems++;
GlobalUnlock(hMenu);
return TRUE;
@@ -1386,6 +1388,7 @@
return FALSE;
}
lpitem2 = (LPMENUITEM)GlobalLock(hNewItem);
+ lpitem2->hItem = hNewItem;
if (lpitem2 == NULL) {
GlobalFree(hNewItem);
GlobalUnlock(hMenu);
@@ -1395,8 +1398,8 @@
lpitem2->item_id = wItemID;
if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) {
-/* lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
- lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+ lpitem2->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+ lpitem2->item_text = GlobalLock(lpitem2->hText);
if (lpitem2->item_text != NULL)
strcpy(lpitem2->item_text, lpNewItem);
else {
@@ -1414,8 +1417,6 @@
lpitem->next = lpitem2;
lpitem2->prev = lpitem;
lpitem2->next = NULL;
- lpitem2->child = NULL;
- lpitem2->parent = NULL;
lpitem2->hCheckBit = (HBITMAP)NULL;
lpitem2->hUnCheckBit = (HBITMAP)NULL;
menu->nItems++;
@@ -1447,9 +1448,10 @@
if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) {
- GlobalFree((HANDLE)lpitem->item_text);
+ GlobalUnlock(lpitem->hText);
+ GlobalFree(lpitem->hText);
}
- GlobalFree(lpitem);
+ GlobalFree(lpitem->hItem);
GlobalUnlock(hMenu);
return TRUE;
}
@@ -1485,11 +1487,12 @@
if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) {
- GlobalFree((HANDLE)lpitem->item_text);
+ GlobalUnlock(lpitem->hText);
+ GlobalFree(lpitem->hText);
}
if (lpitem->prev) lpitem->prev->next = lpitem->next;
if (lpitem->next) lpitem->next->prev = lpitem->prev;
- GlobalFree(lpitem);
+ GlobalFree(lpitem->hItem);
GlobalUnlock(hMenu);
return TRUE;
}
@@ -1522,9 +1525,10 @@
if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) {
- GlobalFree((HANDLE)lpitem->item_text);
-/* lpitem->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
- lpitem->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
+ GlobalUnlock(lpitem->hText);
+ GlobalFree(lpitem->hText);
+ lpitem->hText = GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1);
+ lpitem->item_text = GlobalLock(lpitem->hText);
printf("ModifyMenu %08X %08X '%s') !\n",
lpitem->item_text, lpNewItem, lpNewItem);
if (lpitem->item_text != NULL)
@@ -1689,13 +1693,26 @@
HideAllSubPopupMenu(lpmenu);
break;
}
+ ScreenToClient(hWnd, &msg.pt);
+ msg.pt.y += lpmenu->rect.bottom;
switch(msg.message) {
+ case WM_LBUTTONDOWN:
+ case WM_NCLBUTTONDOWN:
+ SetCapture(hWnd);
+ MenuButtonDown(hWnd, lpmenu, msg.pt.x, msg.pt.y);
+ break;
+ case WM_LBUTTONUP:
+ case WM_NCLBUTTONUP:
+ MenuButtonUp(hWnd, lpmenu, msg.pt.x, msg.pt.y);
+ ReleaseCapture();
+ break;
+ case WM_MOUSEMOVE:
+ case WM_NCMOUSEMOVE:
+ MenuMouseMove(hWnd, lpmenu, msg.wParam, msg.pt.x, msg.pt.y);
+ break;
case WM_KEYDOWN:
case WM_KEYUP:
case WM_CHAR:
- case WM_LBUTTONDOWN:
- case WM_LBUTTONUP:
- case WM_MOUSEMOVE:
PopupMenuWndProc(hWnd, msg.message, msg.wParam, msg.lParam);
default:
DispatchMessage(&msg);
@@ -1967,12 +1984,15 @@
return FALSE;
}
lpmenu->ownerWnd = hWnd;
+ printf("SetMenu(%04X, %04X) // %04X\n", hWnd, hMenu, lpmenu->ownerWnd);
ResetHiliteFlags(lpmenu);
+ if (GetCapture() == hWnd) ReleaseCapture();
GlobalUnlock(hMenu);
return TRUE;
}
+
/**********************************************************************
* GetSubMenu [USER.159]
*/