source: trunk/src/user32/winmenu.cpp@ 1436

Last change on this file since 1436 was 1436, checked in by phaller, 26 years ago

Fix: mark problematic locations

File size: 30.2 KB
Line 
1/* $Id: winmenu.cpp,v 1.9 1999-10-25 12:49:20 phaller Exp $ */
2
3/*
4 * Win32 menu API functions for OS/2
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Patrick Haller
8 *
9 * Parts ported from Wine: (ChangeMenuA/W)
10 * Copyright 1993 Martin Ayotte
11 * Copyright 1994 Alexandre Julliard
12 * Copyright 1997 Morten Welinder
13 *
14 *
15 * Project Odin Software License can be found in LICENSE.TXT
16 *
17 */
18#include <os2win.h>
19#include <odin.h>
20#include <odinwrap.h>
21#include <stdlib.h>
22#include <string.h>
23#include <win32wbase.h>
24#include "oslibmenu.h"
25#include <winresmenu.h>
26
27
28ODINDEBUGCHANNEL(USER32)
29
30//******************************************************************************
31//******************************************************************************
32ODINFUNCTION2(HMENU, LoadMenuA,
33 HINSTANCE, hinst,
34 LPCSTR, lpszMenu)
35{
36 Win32MenuRes *winres;
37 HMENU hMenu;
38
39 winres = (Win32MenuRes *)FindResourceA(hinst, lpszMenu, RT_MENUA);
40 if(winres) {
41 //@@@PH 1999/10/25 crash in EFCW, stack corruption
42 hMenu = O32_LoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockOS2Resource());
43 delete winres;
44 return hMenu;
45 }
46 return 0;
47}
48//******************************************************************************
49//******************************************************************************
50ODINFUNCTION2(HMENU, LoadMenuW,
51 HINSTANCE, hinst,
52 LPCWSTR, lpszMenu)
53{
54 Win32MenuRes *winres;
55 HMENU hMenu;
56
57 winres = (Win32MenuRes *)FindResourceW(hinst, lpszMenu, RT_MENUW);
58 if(winres) {
59 //@@@PH 1999/10/25 crash in EFCW, stack corruption
60 hMenu = O32_LoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockOS2Resource());
61 delete winres;
62 return hMenu;
63 }
64 return 0;
65}
66//******************************************************************************
67//NOTE: menutemplate strings are always in Unicode format
68//******************************************************************************
69ODINFUNCTION1(HMENU, LoadMenuIndirectA,
70 const MENUITEMTEMPLATEHEADER *, menuTemplate)
71{
72 Win32MenuRes *winres;
73 HMENU hMenu;
74
75 winres = new Win32MenuRes((LPVOID)menuTemplate);
76 if(winres == NULL)
77 return 0;
78
79 hMenu = O32_LoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockOS2Resource());
80 delete winres;
81 return (HMENU)winres;
82}
83//******************************************************************************
84//******************************************************************************
85ODINFUNCTION1(HMENU, LoadMenuIndirectW,
86 const MENUITEMTEMPLATEHEADER *, menuTemplate)
87{
88 Win32MenuRes *winres;
89 HMENU hMenu;
90
91 winres = new Win32MenuRes((LPVOID)menuTemplate);
92 if(winres == NULL)
93 return 0;
94
95 hMenu = O32_LoadMenuIndirect((MENUITEMTEMPLATEHEADER *)winres->lockOS2Resource());
96 delete winres;
97 return (HMENU)winres;
98}
99//******************************************************************************
100//******************************************************************************
101ODINFUNCTION1(BOOL, DestroyMenu,
102 HMENU, hMenu)
103{
104 return O32_DestroyMenu(hMenu);
105}
106//******************************************************************************
107//******************************************************************************
108ODINFUNCTION1(HMENU, GetMenu,
109 HWND, hwnd)
110{
111 Win32BaseWindow *window;
112
113 window = Win32BaseWindow::GetWindowFromHandle(hwnd);
114 if(!window)
115 {
116 dprintf(("GetMenu, window %x not found", hwnd));
117 return 0;
118 }
119
120 return window->GetMenu();
121}
122//******************************************************************************
123//******************************************************************************
124ODINFUNCTION2(BOOL, SetMenu,
125 HWND, hwnd,
126 HMENU, hMenu)
127{
128 Win32BaseWindow *window;
129
130 window = Win32BaseWindow::GetWindowFromHandle(hwnd);
131 if(!window)
132 {
133 dprintf(("SetMenu, window %x not found", hwnd));
134 return 0;
135 }
136
137 window->SetMenu(hMenu);
138 return TRUE;
139}
140//******************************************************************************
141//******************************************************************************
142ODINFUNCTION0(DWORD, GetMenuCheckMarkDimensions)
143{
144 return O32_GetMenuCheckMarkDimensions();
145}
146//******************************************************************************
147//******************************************************************************
148ODINFUNCTION1(int, GetMenuItemCount,
149 HMENU, hMenu)
150{
151 if(hMenu == 0)
152 {
153 SetLastError(ERROR_INVALID_PARAMETER);
154 return 0;
155 }
156 return OSLibGetMenuItemCount(hMenu);
157}
158//******************************************************************************
159//******************************************************************************
160ODINFUNCTION2(UINT, GetMenuItemID,
161 HMENU, hMenu,
162 int, nPos)
163{
164 if(hMenu == 0)
165 {
166 SetLastError(ERROR_INVALID_PARAMETER);
167 return 0;
168 }
169 return O32_GetMenuItemID(hMenu, nPos);
170}
171//******************************************************************************
172//******************************************************************************
173ODINFUNCTION3(UINT, GetMenuState,
174 HMENU, hMenu,
175 UINT, arg2,
176 UINT, arg3)
177{
178 if(hMenu == 0)
179 {
180 SetLastError(ERROR_INVALID_PARAMETER);
181 return 0;
182 }
183
184 return O32_GetMenuState(hMenu, arg2, arg3);
185}
186//******************************************************************************
187//******************************************************************************
188ODINFUNCTION5(int, GetMenuStringA,
189 HMENU, hMenu,
190 UINT, arg2,
191 LPSTR, arg3,
192 int, arg4,
193 UINT, arg5)
194{
195 if(hMenu == 0)
196 {
197 SetLastError(ERROR_INVALID_PARAMETER);
198 return 0;
199 }
200
201 return O32_GetMenuString(hMenu, arg2, arg3, arg4, arg5);
202}
203//******************************************************************************
204//******************************************************************************
205ODINFUNCTION5(int, GetMenuStringW,
206 HMENU, hMenu,
207 UINT, idItem,
208 LPWSTR,lpsz,
209 int, cchMax,
210 UINT, fuFlags)
211{
212 char *astring = (char *)malloc(cchMax);
213 int rc;
214
215 if(hMenu == 0)
216 {
217 SetLastError(ERROR_INVALID_PARAMETER);
218 return 0;
219 }
220
221 rc = O32_GetMenuString(hMenu, idItem, astring, cchMax, fuFlags);
222 free(astring);
223 if(rc)
224 {
225 dprintf(("USER32: OS2GetMenuStringW %s\n", astring));
226 AsciiToUnicode(astring, lpsz);
227 }
228 else
229 lpsz[0] = 0;
230
231 return(rc);
232}
233//******************************************************************************
234//******************************************************************************
235ODINFUNCTION5(BOOL, SetMenuItemBitmaps,
236 HMENU, hMenu,
237 UINT, arg2,
238 UINT, arg3,
239 HBITMAP, arg4,
240 HBITMAP, arg5)
241{
242 dprintf(("USER32: SetMenuItemBitmaps\n"));
243 if(hMenu == 0)
244 {
245 SetLastError(ERROR_INVALID_PARAMETER);
246 return 0;
247 }
248 return O32_SetMenuItemBitmaps(hMenu, arg2, arg3, arg4, arg5);
249}
250//******************************************************************************
251//******************************************************************************
252ODINFUNCTION2(HMENU, GetSubMenu,
253 HWND, hMenu,
254 int, arg2)
255{
256 if(hMenu == 0)
257 {
258 SetLastError(ERROR_INVALID_PARAMETER);
259 return 0;
260 }
261
262 return O32_GetSubMenu(hMenu, arg2);
263}
264//******************************************************************************
265//******************************************************************************
266ODINFUNCTION2(HMENU, GetSystemMenu,
267 HWND, hSystemWindow,
268 BOOL, bRevert)
269{
270 Win32BaseWindow *window;
271
272 window = Win32BaseWindow::GetWindowFromHandle(hSystemWindow);
273 if(!window)
274 {
275 dprintf(("GetSystemMenu, window %x not found", hSystemWindow));
276 return 0;
277 }
278
279 return O32_GetSystemMenu(window->getOS2FrameWindowHandle(), bRevert);
280}
281//******************************************************************************
282//******************************************************************************
283ODINFUNCTION1(BOOL, IsMenu,
284 HMENU, hMenu)
285{
286 dprintf(("USER32: IsMenu\n"));
287 return O32_IsMenu(hMenu);
288}
289//******************************************************************************
290//******************************************************************************
291ODINFUNCTION7(BOOL, TrackPopupMenu,
292 HMENU, hMenu,
293 UINT, arg2,
294 int, arg3,
295 int, arg4,
296 int, arg5,
297 HWND, arg6,
298 const RECT *, arg7)
299{
300 Win32BaseWindow *window;
301
302 window = Win32BaseWindow::GetWindowFromHandle(arg6);
303 if(!window)
304 {
305 dprintf(("TrackPopupMenu, window %x not found", arg6));
306 return 0;
307 }
308 dprintf(("USER32: TrackPopupMenu\n"));
309 if(hMenu == 0)
310 {
311 SetLastError(ERROR_INVALID_PARAMETER);
312 return 0;
313 }
314 return O32_TrackPopupMenu(hMenu, arg2, arg3, arg4, arg5, window->getOS2WindowHandle(),
315 arg7);
316}
317//******************************************************************************
318//******************************************************************************
319ODINFUNCTION6(BOOL, TrackPopupMenuEx,
320 HMENU, hMenu,
321 UINT, flags,
322 int, X,
323 int, Y,
324 HWND, hwnd,
325 LPTPMPARAMS, lpPM)
326{
327 RECT *rect = NULL;
328 Win32BaseWindow *window;
329
330 window = Win32BaseWindow::GetWindowFromHandle(hwnd);
331 if(!window)
332 {
333 dprintf(("TrackPopupMenu, window %x not found", hwnd));
334 return 0;
335 }
336
337 dprintf(("USER32: TrackPopupMenuEx, not completely implemented\n"));
338 if(lpPM->cbSize != 0)
339 rect = &lpPM->rcExclude;
340
341 if(hMenu == 0)
342 {
343 SetLastError(ERROR_INVALID_PARAMETER);
344 return 0;
345 }
346 return O32_TrackPopupMenu(hMenu, flags, X, Y, 0, window->getOS2WindowHandle(), rect);
347}
348//******************************************************************************
349//******************************************************************************
350ODINFUNCTION4(BOOL, AppendMenuA,
351 HMENU, hMenu,
352 UINT, uFlags,
353 UINT, ulDNewItem,
354 LPCSTR, lpNewItem)
355{
356 BOOL rc;
357
358 dprintf(("USER32: OS2AppendMenuA uFlags = %X\n", uFlags));
359
360 if(uFlags & MF_STRING || uFlags == 0)
361 dprintf(("USER32: OS2AppendMenuA %s\n", lpNewItem));
362
363 if(hMenu == 0)
364 {
365 SetLastError(ERROR_INVALID_PARAMETER);
366 return 0;
367 }
368 rc = O32_AppendMenu(hMenu, uFlags, ulDNewItem, lpNewItem);
369 dprintf(("USER32: AppendMenuA returned %d\n", rc));
370 return rc;
371}
372//******************************************************************************
373//******************************************************************************
374ODINFUNCTION4(BOOL, AppendMenuW,
375 HMENU, hMenu,
376 UINT, arg2,
377 UINT, arg3,
378 LPCWSTR, arg4)
379{
380 BOOL rc;
381 char *astring = NULL;
382
383 dprintf(("USER32: OS2AppendMenuW\n"));
384
385 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0)
386 astring = UnicodeToAsciiString((LPWSTR)arg4);
387 else
388 astring = (char *) arg4;
389
390 if(hMenu == 0)
391 {
392 SetLastError(ERROR_INVALID_PARAMETER);
393 return 0;
394 }
395 rc = O32_AppendMenu(hMenu, arg2, arg3, astring);
396 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0)
397 FreeAsciiString(astring);
398 return(rc);
399}
400//******************************************************************************
401//******************************************************************************
402ODINFUNCTION3(DWORD, CheckMenuItem,
403 HMENU, hMenu,
404 UINT, arg2,
405 UINT, arg3)
406{
407 dprintf(("USER32: OS2CheckMenuItem\n"));
408 if(hMenu == 0)
409 {
410 SetLastError(ERROR_INVALID_PARAMETER);
411 return 0;
412 }
413 return O32_CheckMenuItem(hMenu, arg2, arg3);
414}
415//******************************************************************************
416//******************************************************************************
417ODINFUNCTION0(HMENU, CreateMenu)
418{
419 dprintf(("USER32: CreateMenu\n"));
420 return O32_CreateMenu();
421}
422//******************************************************************************
423//******************************************************************************
424ODINFUNCTION0(HMENU, CreatePopupMenu)
425{
426 dprintf(("USER32: CreateMenu\n"));
427 return O32_CreatePopupMenu();
428}
429//******************************************************************************
430//******************************************************************************
431ODINFUNCTION3(BOOL,EnableMenuItem,HMENU,hMenu,
432 UINT, uIDEnableItem,
433 UINT, uEnable)
434{
435 if(hMenu == 0)
436 {
437 SetLastError(ERROR_INVALID_PARAMETER);
438 return 0;
439 }
440
441 return O32_EnableMenuItem(hMenu,
442 uIDEnableItem,
443 uEnable);
444}
445//******************************************************************************
446//******************************************************************************
447ODINFUNCTION5(BOOL, ModifyMenuA,
448 HMENU, hMenu,
449 UINT, arg2,
450 UINT, arg3,
451 UINT, arg4,
452 LPCSTR, arg5)
453{
454 dprintf(("USER32: OS2ModifyMenuA\n"));
455 if(hMenu == 0)
456 {
457 SetLastError(ERROR_INVALID_PARAMETER);
458 return 0;
459 }
460 return O32_ModifyMenu(hMenu, arg2, arg3, arg4, arg5);
461}
462//******************************************************************************
463//******************************************************************************
464ODINFUNCTION5(BOOL, ModifyMenuW,
465 HMENU, hMenu,
466 UINT, arg2,
467 UINT, arg3,
468 UINT, arg4,
469 LPCWSTR, arg5)
470{
471 BOOL rc;
472 char *astring = NULL;
473
474 dprintf(("USER32: OS2ModifyMenuW %s\n", astring));
475
476 if(hMenu == 0)
477 {
478 SetLastError(ERROR_INVALID_PARAMETER);
479 return 0;
480 }
481
482 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
483 astring = UnicodeToAsciiString((LPWSTR)arg5);
484 else
485 astring = (char *) arg5;
486
487 rc = O32_ModifyMenu(hMenu, arg2, arg3, arg4, astring);
488 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
489 FreeAsciiString(astring);
490 return(rc);
491}
492//******************************************************************************
493//******************************************************************************
494ODINFUNCTION3(BOOL, RemoveMenu,
495 HMENU, hMenu,
496 UINT, arg2,
497 UINT, arg3)
498{
499 dprintf(("USER32: OS2RemoveMenu\n"));
500 if(hMenu == 0)
501 {
502 SetLastError(ERROR_INVALID_PARAMETER);
503 return 0;
504 }
505
506 return O32_RemoveMenu(hMenu, arg2, arg3);
507}
508//******************************************************************************
509//******************************************************************************
510ODINFUNCTION3(BOOL, DeleteMenu,
511 HMENU, hMenu,
512 UINT, arg2,
513 UINT, arg3)
514{
515 dprintf(("USER32: OS2DeleteMenu\n"));
516 if(hMenu == 0)
517 {
518 SetLastError(ERROR_INVALID_PARAMETER);
519 return 0;
520 }
521
522 return O32_DeleteMenu(hMenu, arg2, arg3);
523}
524//******************************************************************************
525//******************************************************************************
526ODINFUNCTION4(BOOL, HiliteMenuItem,
527 HWND, hMenu,
528 HMENU, arg2,
529 UINT, arg3,
530 UINT, arg4)
531{
532 dprintf(("USER32: OS2HiliteMenuItem\n"));
533 if(hMenu == 0)
534 {
535 SetLastError(ERROR_INVALID_PARAMETER);
536 return 0;
537 }
538
539 return O32_HiliteMenuItem(hMenu, arg2, arg3, arg4);
540}
541//******************************************************************************
542//******************************************************************************
543ODINFUNCTION5(BOOL, InsertMenuA,
544 HMENU, hMenu,
545 UINT, arg2,
546 UINT, arg3,
547 UINT, arg4,
548 LPCSTR, arg5)
549{
550 dprintf(("USER32: OS2InsertMenuA\n"));
551 if(hMenu == 0)
552 {
553 SetLastError(ERROR_INVALID_PARAMETER);
554 return 0;
555 }
556
557 return O32_InsertMenu(hMenu, arg2, arg3, arg4, arg5);
558}
559//******************************************************************************
560//******************************************************************************
561ODINFUNCTION5(BOOL, InsertMenuW,
562 HMENU, hMenu,
563 UINT, arg2,
564 UINT, arg3,
565 UINT, arg4,
566 LPCWSTR, arg5)
567{
568 BOOL rc;
569 char *astring = NULL;
570
571 dprintf(("USER32: OS2InsertMenuW %s\n", astring));
572
573 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
574 astring = UnicodeToAsciiString((LPWSTR)arg5);
575 else
576 astring = (char *) arg5;
577
578 rc = O32_InsertMenu(hMenu, arg2, arg3, arg4, astring);
579 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
580 FreeAsciiString(astring);
581 return(rc);
582}
583//******************************************************************************
584//******************************************************************************
585ODINFUNCTION2(BOOL, SetMenuContextHelpId,
586 HMENU, hMenu,
587 DWORD, dwContextHelpId)
588{
589 dprintf(("USER32: OS2SetMenuContextHelpId, not implemented\n"));
590 return(TRUE);
591}
592//******************************************************************************
593//******************************************************************************
594ODINFUNCTION1(DWORD, GetMenuContextHelpId,
595 HMENU, hMenu)
596{
597 dprintf(("USER32: OS2GetMenuContextHelpId, not implemented\n"));
598 return(0);
599}
600//******************************************************************************
601//******************************************************************************
602ODINFUNCTION5(BOOL, CheckMenuRadioItem,
603 HMENU, hMenu,
604 UINT, idFirst,
605 UINT, idLast,
606 UINT, idCheck,
607 UINT, uFlags)
608{
609 dprintf(("USER32: OS2CheckMenuRadioItem, not implemented\n"));
610 return(TRUE);
611}
612//******************************************************************************
613//******************************************************************************
614ODINFUNCTION5(BOOL, ChangeMenuA,
615 HMENU, hMenu,
616 UINT, pos,
617 LPCSTR, data,
618 UINT, id,
619 UINT, flags)
620{
621 dprintf(("USER32: ChangeMenuA flags %X\n", flags));
622
623 if (flags & MF_APPEND) return AppendMenuA(hMenu, flags & ~MF_APPEND,
624 id, data );
625 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);
626 if (flags & MF_CHANGE) return ModifyMenuA(hMenu, pos, flags & ~MF_CHANGE,
627 id, data );
628 if (flags & MF_REMOVE) return RemoveMenu(hMenu,
629 flags & MF_BYPOSITION ? pos : id,
630 flags & ~MF_REMOVE );
631 /* Default: MF_INSERT */
632 return InsertMenuA( hMenu, pos, flags, id, data );
633}
634//******************************************************************************
635//******************************************************************************
636ODINFUNCTION5(BOOL, ChangeMenuW,
637 HMENU, hMenu,
638 UINT, pos,
639 LPCWSTR, data,
640 UINT, id,
641 UINT, flags)
642{
643 dprintf(("USER32: ChangeMenuW flags %X\n", flags));
644
645 if (flags & MF_APPEND) return AppendMenuW(hMenu, flags & ~MF_APPEND,
646 id, data );
647 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);
648 if (flags & MF_CHANGE) return ModifyMenuW(hMenu, pos, flags & ~MF_CHANGE,
649 id, data );
650 if (flags & MF_REMOVE) return RemoveMenu(hMenu,
651 flags & MF_BYPOSITION ? pos : id,
652 flags & ~MF_REMOVE );
653 /* Default: MF_INSERT */
654 return InsertMenuW(hMenu, pos, flags, id, data);
655}
656//******************************************************************************
657//******************************************************************************
658ODINFUNCTION4(BOOL, SetMenuItemInfoA,
659 HMENU, hMenu,
660 UINT, par1,
661 BOOL, par2,
662 const MENUITEMINFOA *, lpMenuItemInfo)
663{
664 dprintf(("USER32: SetMenuItemInfoA, faked\n"));
665 return(TRUE);
666}
667/*****************************************************************************
668 * Function : SetMenuItemInfoW
669 * Purpose : The SetMenuItemInfo function changes information about a menu item.
670 * Parameters:
671 * Variables :
672 * Result : If the function succeeds, the return value is TRUE.
673 * If the function fails, the return value is FALSE. To get extended
674 * error information, use the GetLastError function.
675 * Remark :
676 * Status : UNTESTED STUB
677 *
678 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
679 *****************************************************************************/
680
681ODINFUNCTION4(BOOL, SetMenuItemInfoW,
682 HMENU, hMenu,
683 UINT, uItem,
684 BOOL, fByPosition,
685 const MENUITEMINFOW *, lpmmi)
686{
687 dprintf(("USER32:SetMenuItemInfoW (%08xh,%08xh,%08xh,%08x) not implemented.\n",
688 hMenu,
689 uItem,
690 fByPosition,
691 lpmmi));
692
693 return (SetMenuItemInfoA(hMenu,
694 uItem,
695 fByPosition,
696 (const MENUITEMINFOA *)lpmmi));
697}
698//******************************************************************************
699//******************************************************************************
700ODINFUNCTION3(BOOL, SetMenuDefaultItem,
701 HMENU, hMenu,
702 UINT, uItem,
703 UINT, fByPos)
704{
705 dprintf(("USER32: SetMenuDefaultItem, faked\n"));
706 return(TRUE);
707}
708//******************************************************************************
709//******************************************************************************
710ODINFUNCTION4(BOOL, GetMenuItemInfoA,
711 HMENU, hMenu,
712 UINT, uItem,
713 BOOL, aBool,
714 MENUITEMINFOA *, lpMenuItemInfo)
715{
716 dprintf(("USER32: GetMenuItemInfoA, faked\n"));
717 return(TRUE);
718}
719/*****************************************************************************
720 * Function : GetMenuDefaultItem
721 * Purpose : TheGetMenuDefaultItem function determines the default menu item
722 * on the specified menu.
723 * Parameters:
724 * Variables :
725 * Result : If the function succeeds, the return value is the identifier or
726 * position of the menu item.
727 * If the function fails, the return value is - 1.
728 * Remark :
729 * Status : UNTESTED STUB
730 *
731 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
732 *****************************************************************************/
733
734ODINFUNCTION3(UINT, GetMenuDefaultItem,
735 HMENU, hMenu,
736 UINT, fByPos,
737 UINT, gmdiFlags)
738{
739 dprintf(("USER32:GetMenuDefaultItem (%08xh,%u,%08x) not implemented.\n",
740 hMenu,
741 fByPos,
742 gmdiFlags));
743
744 return (-1);
745}
746
747
748/*****************************************************************************
749 * Function : GetMenuItemInfoW
750 * Purpose : The GetMenuItemInfo function retrieves information about a menu item.
751 * Parameters:
752 * Variables :
753 * Result : If the function succeeds, the return value is TRUE.
754 * If the function fails, the return value is FALSE. To get extended
755 * error information, use the GetLastError function.
756 * Remark :
757 * Status : UNTESTED STUB
758 *
759 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
760 *****************************************************************************/
761
762ODINFUNCTION4(BOOL, GetMenuItemInfoW,
763 HMENU, hMenu,
764 UINT, uItem,
765 BOOL, fByPosition,
766 MENUITEMINFOW *, lpmii)
767{
768 dprintf(("USER32:GetMenuItemInfoW (%08xh,%08xh,%u,%08x) not implemented.\n",
769 hMenu,
770 uItem,
771 fByPosition,
772 lpmii));
773
774 return(GetMenuItemInfoA(hMenu,
775 uItem,
776 fByPosition,
777 (MENUITEMINFOA *)lpmii));
778}
779
780
781/*****************************************************************************
782 * Function : GetMenuItemRect
783 * Purpose : The GetMenuItemRect function retrieves the bounding rectangle
784 * for the specified menu item.
785 * Parameters:
786 * Variables :
787 * Result : If the function succeeds, the return value is TRUE.
788 * If the function fails, the return value is FALSE. To get
789 * extended error information, use the GetLastError function.
790 * Remark :
791 * Status : UNTESTED STUB
792 *
793 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
794 *****************************************************************************/
795
796ODINFUNCTION4(BOOL, GetMenuItemRect,
797 HWND, hWnd,
798 HMENU, hMenu,
799 UINT, uItem,
800 LPRECT, lprcItem)
801{
802 dprintf(("USER32:GetMenuItemRect (%08xh,%08xh,%08xh,%08x) not implemented.\n",
803 hWnd,
804 hMenu,
805 uItem,
806 lprcItem));
807
808 return (FALSE);
809}
810/*****************************************************************************
811 * Function : InsertMenuItemA
812 * Purpose : The InsertMenuItem function inserts a new menu item at the specified
813 * position in a menu bar or pop-up menu.
814 * Parameters:
815 * Variables :
816 * Result : If the function succeeds, the return value is TRUE.
817 * If the function fails, the return value is FALSE. To get extended
818 * error information, use the GetLastError function.
819 * Remark :
820 * Status : UNTESTED STUB
821 *
822 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
823 *****************************************************************************/
824
825ODINFUNCTION4(BOOL, InsertMenuItemA,
826 HMENU, hMenu,
827 UINT, uItem,
828 BOOL, fByPosition,
829 const MENUITEMINFOA*, lpmii)
830{
831 dprintf(("USER32:InsertMenuItemA (%08xh,%08xh,%u,%08x) not implemented.\n",
832 hMenu,
833 uItem,
834 fByPosition,
835 lpmii));
836
837 return (FALSE);
838}
839
840
841/*****************************************************************************
842 * Function : InsertMenuItemW
843 * Purpose : The InsertMenuItem function inserts a new menu item at the specified
844 * position in a menu bar or pop-up menu.
845 * Parameters:
846 * Variables :
847 * Result : If the function succeeds, the return value is TRUE.
848 * If the function fails, the return value is FALSE. To get extended
849 * error information, use the GetLastError function.
850 * Remark :
851 * Status : UNTESTED STUB
852 *
853 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
854 *****************************************************************************/
855
856ODINFUNCTION4(BOOL, InsertMenuItemW,
857 HMENU, hMenu,
858 UINT, uItem,
859 BOOL, fByPosition,
860 const MENUITEMINFOW *, lpmii)
861{
862 dprintf(("USER32:InsertMenuItemW (%08xh,%08xh,%u,%08x) not implemented.\n",
863 hMenu,
864 uItem,
865 fByPosition,
866 lpmii));
867
868 return (FALSE);
869}
870/*****************************************************************************
871 * Function : MenuItemFromPoint
872 * Purpose : TheMenuItemFromPoint function determines which menu item, if
873 * any, is at the specified location.
874 * Parameters:
875 * Variables :
876 * Result : Returns the zero-based position of the menu item at the specified
877 * location or -1 if no menu item is at the specified location.
878 * Remark :
879 * Status : UNTESTED STUB
880 *
881 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
882 *****************************************************************************/
883
884ODINFUNCTION3(UINT, MenuItemFromPoint,
885 HWND, hWnd,
886 HMENU, hMenu,
887 POINT, ptScreen)
888{
889 dprintf(("USER32:MenuItemFromPoint (%08xh,%08xh,%u) not implemented.\n",
890 hWnd,
891 hMenu,
892 ptScreen));
893
894 return (-1);
895}
896
897
898/*****************************************************************************
899 * Function : GetMenuInfo
900 * Parameters:
901 * Variables :
902 * Result :
903 * Remark :
904 * Status : UNTESTED STUB win98/NT5.0
905 *
906 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
907 *****************************************************************************/
908
909ODINFUNCTION2(BOOL, GetMenuInfo,
910 HMENU, hMenu,
911 LPMENUINFO, lpmi)
912{
913 dprintf(("USER32: GetMenuInfo(%08xh,%08xh) not implemented.\n",
914 hMenu,
915 lpmi));
916
917 memset(lpmi,0,sizeof(MENUINFO));
918 return 0;
919}
920#if 0
921 POPUPMENU *menu;
922
923 TRACE("(0x%04x %p)\n", hMenu, lpmi);
924
925 if (lpmi && (menu = (POPUPMENU *) USER_HEAP_LIN_ADDR(hMenu)))
926 {
927
928 if (lpmi->fMask & MIM_BACKGROUND)
929 lpmi->hbrBack = menu->hbrBack;
930
931 if (lpmi->fMask & MIM_HELPID)
932 lpmi->dwContextHelpID = menu->dwContextHelpID;
933
934 if (lpmi->fMask & MIM_MAXHEIGHT)
935 lpmi->cyMax = menu->cyMax;
936
937 if (lpmi->fMask & MIM_MENUDATA)
938 lpmi->dwMenuData = menu->dwMenuData;
939
940 if (lpmi->fMask & MIM_STYLE)
941 lpmi->dwStyle = menu->dwStyle;
942
943 return TRUE;
944 }
945 return FALSE;
946}
947#endif
948
949
950/*****************************************************************************
951 * Function : SetMenuInfo
952 * Purpose :
953 * Parameters:
954 * Variables :
955 * Result :
956 * Remark :
957 * FIXME
958 * MIM_APPLYTOSUBMENUS
959 * actually use the items to draw the menu
960 * Status : UNTESTED STUB win98/NT5.0
961 *
962 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
963 *****************************************************************************/
964
965ODINFUNCTION2(BOOL, SetMenuInfo,
966 HMENU, hMenu,
967 LPCMENUINFO, lpmi)
968{
969 dprintf(("USER32: SetMenuInfo(%08xh,%08xh) not implemented.\n",
970 hMenu,
971 lpmi));
972
973 return 0;
974}
975#if 0
976 POPUPMENU *menu;
977
978 TRACE("(0x%04x %p)\n", hMenu, lpmi);
979
980
981
982 if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu=(POPUPMENU*)USER_HEAP_LIN_ADDR(hMenu)))
983 {
984
985 if (lpmi->fMask & MIM_BACKGROUND)
986 menu->hbrBack = lpmi->hbrBack;
987
988 if (lpmi->fMask & MIM_HELPID)
989 menu->dwContextHelpID = lpmi->dwContextHelpID;
990
991 if (lpmi->fMask & MIM_MAXHEIGHT)
992 menu->cyMax = lpmi->cyMax;
993
994 if (lpmi->fMask & MIM_MENUDATA)
995 menu->dwMenuData = lpmi->dwMenuData;
996
997 if (lpmi->fMask & MIM_STYLE)
998 menu->dwStyle = lpmi->dwStyle;
999
1000 return TRUE;
1001 }
1002 return FALSE;
1003}
1004#endif
1005
1006
Note: See TracBrowser for help on using the repository browser.