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

Last change on this file since 1031 was 1031, checked in by sandervl, 26 years ago

Menu changes

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