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

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

Lots of changes/fixes

File size: 30.1 KB
Line 
1/* $Id: winmenu.cpp,v 1.8 1999-10-22 18:11: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 Win32BaseWindow *window;
299
300 window = Win32BaseWindow::GetWindowFromHandle(arg6);
301 if(!window)
302 {
303 dprintf(("TrackPopupMenu, window %x not found", arg6));
304 return 0;
305 }
306 dprintf(("USER32: TrackPopupMenu\n"));
307 if(hMenu == 0)
308 {
309 SetLastError(ERROR_INVALID_PARAMETER);
310 return 0;
311 }
312 return O32_TrackPopupMenu(hMenu, arg2, arg3, arg4, arg5, window->getOS2WindowHandle(),
313 arg7);
314}
315//******************************************************************************
316//******************************************************************************
317ODINFUNCTION6(BOOL, TrackPopupMenuEx,
318 HMENU, hMenu,
319 UINT, flags,
320 int, X,
321 int, Y,
322 HWND, hwnd,
323 LPTPMPARAMS, lpPM)
324{
325 RECT *rect = NULL;
326 Win32BaseWindow *window;
327
328 window = Win32BaseWindow::GetWindowFromHandle(hwnd);
329 if(!window)
330 {
331 dprintf(("TrackPopupMenu, window %x not found", hwnd));
332 return 0;
333 }
334
335 dprintf(("USER32: TrackPopupMenuEx, not completely implemented\n"));
336 if(lpPM->cbSize != 0)
337 rect = &lpPM->rcExclude;
338
339 if(hMenu == 0)
340 {
341 SetLastError(ERROR_INVALID_PARAMETER);
342 return 0;
343 }
344 return O32_TrackPopupMenu(hMenu, flags, X, Y, 0, window->getOS2WindowHandle(), rect);
345}
346//******************************************************************************
347//******************************************************************************
348ODINFUNCTION4(BOOL, AppendMenuA,
349 HMENU, hMenu,
350 UINT, uFlags,
351 UINT, ulDNewItem,
352 LPCSTR, lpNewItem)
353{
354 BOOL rc;
355
356 dprintf(("USER32: OS2AppendMenuA uFlags = %X\n", uFlags));
357
358 if(uFlags & MF_STRING || uFlags == 0)
359 dprintf(("USER32: OS2AppendMenuA %s\n", lpNewItem));
360
361 if(hMenu == 0)
362 {
363 SetLastError(ERROR_INVALID_PARAMETER);
364 return 0;
365 }
366 rc = O32_AppendMenu(hMenu, uFlags, ulDNewItem, lpNewItem);
367 dprintf(("USER32: AppendMenuA returned %d\n", rc));
368 return rc;
369}
370//******************************************************************************
371//******************************************************************************
372ODINFUNCTION4(BOOL, AppendMenuW,
373 HMENU, hMenu,
374 UINT, arg2,
375 UINT, arg3,
376 LPCWSTR, arg4)
377{
378 BOOL rc;
379 char *astring = NULL;
380
381 dprintf(("USER32: OS2AppendMenuW\n"));
382
383 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0)
384 astring = UnicodeToAsciiString((LPWSTR)arg4);
385 else
386 astring = (char *) arg4;
387
388 if(hMenu == 0)
389 {
390 SetLastError(ERROR_INVALID_PARAMETER);
391 return 0;
392 }
393 rc = O32_AppendMenu(hMenu, arg2, arg3, astring);
394 if(arg2 & MF_STRING && (int)arg4 >> 16 != 0)
395 FreeAsciiString(astring);
396 return(rc);
397}
398//******************************************************************************
399//******************************************************************************
400ODINFUNCTION3(DWORD, CheckMenuItem,
401 HMENU, hMenu,
402 UINT, arg2,
403 UINT, arg3)
404{
405 dprintf(("USER32: OS2CheckMenuItem\n"));
406 if(hMenu == 0)
407 {
408 SetLastError(ERROR_INVALID_PARAMETER);
409 return 0;
410 }
411 return O32_CheckMenuItem(hMenu, arg2, arg3);
412}
413//******************************************************************************
414//******************************************************************************
415ODINFUNCTION0(HMENU, CreateMenu)
416{
417 dprintf(("USER32: CreateMenu\n"));
418 return O32_CreateMenu();
419}
420//******************************************************************************
421//******************************************************************************
422ODINFUNCTION0(HMENU, CreatePopupMenu)
423{
424 dprintf(("USER32: CreateMenu\n"));
425 return O32_CreatePopupMenu();
426}
427//******************************************************************************
428//******************************************************************************
429ODINFUNCTION3(BOOL,EnableMenuItem,HMENU,hMenu,
430 UINT, uIDEnableItem,
431 UINT, uEnable)
432{
433 if(hMenu == 0)
434 {
435 SetLastError(ERROR_INVALID_PARAMETER);
436 return 0;
437 }
438
439 return O32_EnableMenuItem(hMenu,
440 uIDEnableItem,
441 uEnable);
442}
443//******************************************************************************
444//******************************************************************************
445ODINFUNCTION5(BOOL, ModifyMenuA,
446 HMENU, hMenu,
447 UINT, arg2,
448 UINT, arg3,
449 UINT, arg4,
450 LPCSTR, arg5)
451{
452 dprintf(("USER32: OS2ModifyMenuA\n"));
453 if(hMenu == 0)
454 {
455 SetLastError(ERROR_INVALID_PARAMETER);
456 return 0;
457 }
458 return O32_ModifyMenu(hMenu, arg2, arg3, arg4, arg5);
459}
460//******************************************************************************
461//******************************************************************************
462ODINFUNCTION5(BOOL, ModifyMenuW,
463 HMENU, hMenu,
464 UINT, arg2,
465 UINT, arg3,
466 UINT, arg4,
467 LPCWSTR, arg5)
468{
469 BOOL rc;
470 char *astring = NULL;
471
472 dprintf(("USER32: OS2ModifyMenuW %s\n", astring));
473
474 if(hMenu == 0)
475 {
476 SetLastError(ERROR_INVALID_PARAMETER);
477 return 0;
478 }
479
480 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
481 astring = UnicodeToAsciiString((LPWSTR)arg5);
482 else
483 astring = (char *) arg5;
484
485 rc = O32_ModifyMenu(hMenu, arg2, arg3, arg4, astring);
486 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
487 FreeAsciiString(astring);
488 return(rc);
489}
490//******************************************************************************
491//******************************************************************************
492ODINFUNCTION3(BOOL, RemoveMenu,
493 HMENU, hMenu,
494 UINT, arg2,
495 UINT, arg3)
496{
497 dprintf(("USER32: OS2RemoveMenu\n"));
498 if(hMenu == 0)
499 {
500 SetLastError(ERROR_INVALID_PARAMETER);
501 return 0;
502 }
503
504 return O32_RemoveMenu(hMenu, arg2, arg3);
505}
506//******************************************************************************
507//******************************************************************************
508ODINFUNCTION3(BOOL, DeleteMenu,
509 HMENU, hMenu,
510 UINT, arg2,
511 UINT, arg3)
512{
513 dprintf(("USER32: OS2DeleteMenu\n"));
514 if(hMenu == 0)
515 {
516 SetLastError(ERROR_INVALID_PARAMETER);
517 return 0;
518 }
519
520 return O32_DeleteMenu(hMenu, arg2, arg3);
521}
522//******************************************************************************
523//******************************************************************************
524ODINFUNCTION4(BOOL, HiliteMenuItem,
525 HWND, hMenu,
526 HMENU, arg2,
527 UINT, arg3,
528 UINT, arg4)
529{
530 dprintf(("USER32: OS2HiliteMenuItem\n"));
531 if(hMenu == 0)
532 {
533 SetLastError(ERROR_INVALID_PARAMETER);
534 return 0;
535 }
536
537 return O32_HiliteMenuItem(hMenu, arg2, arg3, arg4);
538}
539//******************************************************************************
540//******************************************************************************
541ODINFUNCTION5(BOOL, InsertMenuA,
542 HMENU, hMenu,
543 UINT, arg2,
544 UINT, arg3,
545 UINT, arg4,
546 LPCSTR, arg5)
547{
548 dprintf(("USER32: OS2InsertMenuA\n"));
549 if(hMenu == 0)
550 {
551 SetLastError(ERROR_INVALID_PARAMETER);
552 return 0;
553 }
554
555 return O32_InsertMenu(hMenu, arg2, arg3, arg4, arg5);
556}
557//******************************************************************************
558//******************************************************************************
559ODINFUNCTION5(BOOL, InsertMenuW,
560 HMENU, hMenu,
561 UINT, arg2,
562 UINT, arg3,
563 UINT, arg4,
564 LPCWSTR, arg5)
565{
566 BOOL rc;
567 char *astring = NULL;
568
569 dprintf(("USER32: OS2InsertMenuW %s\n", astring));
570
571 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
572 astring = UnicodeToAsciiString((LPWSTR)arg5);
573 else
574 astring = (char *) arg5;
575
576 rc = O32_InsertMenu(hMenu, arg2, arg3, arg4, astring);
577 if(arg3 & MF_STRING && (int)arg5 >> 16 != 0)
578 FreeAsciiString(astring);
579 return(rc);
580}
581//******************************************************************************
582//******************************************************************************
583ODINFUNCTION2(BOOL, SetMenuContextHelpId,
584 HMENU, hMenu,
585 DWORD, dwContextHelpId)
586{
587 dprintf(("USER32: OS2SetMenuContextHelpId, not implemented\n"));
588 return(TRUE);
589}
590//******************************************************************************
591//******************************************************************************
592ODINFUNCTION1(DWORD, GetMenuContextHelpId,
593 HMENU, hMenu)
594{
595 dprintf(("USER32: OS2GetMenuContextHelpId, not implemented\n"));
596 return(0);
597}
598//******************************************************************************
599//******************************************************************************
600ODINFUNCTION5(BOOL, CheckMenuRadioItem,
601 HMENU, hMenu,
602 UINT, idFirst,
603 UINT, idLast,
604 UINT, idCheck,
605 UINT, uFlags)
606{
607 dprintf(("USER32: OS2CheckMenuRadioItem, not implemented\n"));
608 return(TRUE);
609}
610//******************************************************************************
611//******************************************************************************
612ODINFUNCTION5(BOOL, ChangeMenuA,
613 HMENU, hMenu,
614 UINT, pos,
615 LPCSTR, data,
616 UINT, id,
617 UINT, flags)
618{
619 dprintf(("USER32: ChangeMenuA flags %X\n", flags));
620
621 if (flags & MF_APPEND) return AppendMenuA(hMenu, flags & ~MF_APPEND,
622 id, data );
623 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);
624 if (flags & MF_CHANGE) return ModifyMenuA(hMenu, pos, flags & ~MF_CHANGE,
625 id, data );
626 if (flags & MF_REMOVE) return RemoveMenu(hMenu,
627 flags & MF_BYPOSITION ? pos : id,
628 flags & ~MF_REMOVE );
629 /* Default: MF_INSERT */
630 return InsertMenuA( hMenu, pos, flags, id, data );
631}
632//******************************************************************************
633//******************************************************************************
634ODINFUNCTION5(BOOL, ChangeMenuW,
635 HMENU, hMenu,
636 UINT, pos,
637 LPCWSTR, data,
638 UINT, id,
639 UINT, flags)
640{
641 dprintf(("USER32: ChangeMenuW flags %X\n", flags));
642
643 if (flags & MF_APPEND) return AppendMenuW(hMenu, flags & ~MF_APPEND,
644 id, data );
645 if (flags & MF_DELETE) return DeleteMenu(hMenu, pos, flags & ~MF_DELETE);
646 if (flags & MF_CHANGE) return ModifyMenuW(hMenu, pos, flags & ~MF_CHANGE,
647 id, data );
648 if (flags & MF_REMOVE) return RemoveMenu(hMenu,
649 flags & MF_BYPOSITION ? pos : id,
650 flags & ~MF_REMOVE );
651 /* Default: MF_INSERT */
652 return InsertMenuW(hMenu, pos, flags, id, data);
653}
654//******************************************************************************
655//******************************************************************************
656ODINFUNCTION4(BOOL, SetMenuItemInfoA,
657 HMENU, hMenu,
658 UINT, par1,
659 BOOL, par2,
660 const MENUITEMINFOA *, lpMenuItemInfo)
661{
662 dprintf(("USER32: SetMenuItemInfoA, faked\n"));
663 return(TRUE);
664}
665/*****************************************************************************
666 * Function : SetMenuItemInfoW
667 * Purpose : The SetMenuItemInfo function changes information about a menu item.
668 * Parameters:
669 * Variables :
670 * Result : If the function succeeds, the return value is TRUE.
671 * If the function fails, the return value is FALSE. To get extended
672 * error information, use the GetLastError function.
673 * Remark :
674 * Status : UNTESTED STUB
675 *
676 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
677 *****************************************************************************/
678
679ODINFUNCTION4(BOOL, SetMenuItemInfoW,
680 HMENU, hMenu,
681 UINT, uItem,
682 BOOL, fByPosition,
683 const MENUITEMINFOW *, lpmmi)
684{
685 dprintf(("USER32:SetMenuItemInfoW (%08xh,%08xh,%08xh,%08x) not implemented.\n",
686 hMenu,
687 uItem,
688 fByPosition,
689 lpmmi));
690
691 return (SetMenuItemInfoA(hMenu,
692 uItem,
693 fByPosition,
694 (const MENUITEMINFOA *)lpmmi));
695}
696//******************************************************************************
697//******************************************************************************
698ODINFUNCTION3(BOOL, SetMenuDefaultItem,
699 HMENU, hMenu,
700 UINT, uItem,
701 UINT, fByPos)
702{
703 dprintf(("USER32: SetMenuDefaultItem, faked\n"));
704 return(TRUE);
705}
706//******************************************************************************
707//******************************************************************************
708ODINFUNCTION4(BOOL, GetMenuItemInfoA,
709 HMENU, hMenu,
710 UINT, uItem,
711 BOOL, aBool,
712 MENUITEMINFOA *, lpMenuItemInfo)
713{
714 dprintf(("USER32: GetMenuItemInfoA, faked\n"));
715 return(TRUE);
716}
717/*****************************************************************************
718 * Function : GetMenuDefaultItem
719 * Purpose : TheGetMenuDefaultItem function determines the default menu item
720 * on the specified menu.
721 * Parameters:
722 * Variables :
723 * Result : If the function succeeds, the return value is the identifier or
724 * position of the menu item.
725 * If the function fails, the return value is - 1.
726 * Remark :
727 * Status : UNTESTED STUB
728 *
729 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
730 *****************************************************************************/
731
732ODINFUNCTION3(UINT, GetMenuDefaultItem,
733 HMENU, hMenu,
734 UINT, fByPos,
735 UINT, gmdiFlags)
736{
737 dprintf(("USER32:GetMenuDefaultItem (%08xh,%u,%08x) not implemented.\n",
738 hMenu,
739 fByPos,
740 gmdiFlags));
741
742 return (-1);
743}
744
745
746/*****************************************************************************
747 * Function : GetMenuItemInfoW
748 * Purpose : The GetMenuItemInfo function retrieves information about a menu item.
749 * Parameters:
750 * Variables :
751 * Result : If the function succeeds, the return value is TRUE.
752 * If the function fails, the return value is FALSE. To get extended
753 * error information, use the GetLastError function.
754 * Remark :
755 * Status : UNTESTED STUB
756 *
757 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
758 *****************************************************************************/
759
760ODINFUNCTION4(BOOL, GetMenuItemInfoW,
761 HMENU, hMenu,
762 UINT, uItem,
763 BOOL, fByPosition,
764 MENUITEMINFOW *, lpmii)
765{
766 dprintf(("USER32:GetMenuItemInfoW (%08xh,%08xh,%u,%08x) not implemented.\n",
767 hMenu,
768 uItem,
769 fByPosition,
770 lpmii));
771
772 return(GetMenuItemInfoA(hMenu,
773 uItem,
774 fByPosition,
775 (MENUITEMINFOA *)lpmii));
776}
777
778
779/*****************************************************************************
780 * Function : GetMenuItemRect
781 * Purpose : The GetMenuItemRect function retrieves the bounding rectangle
782 * for the specified menu item.
783 * Parameters:
784 * Variables :
785 * Result : If the function succeeds, the return value is TRUE.
786 * If the function fails, the return value is FALSE. To get
787 * extended error information, use the GetLastError function.
788 * Remark :
789 * Status : UNTESTED STUB
790 *
791 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
792 *****************************************************************************/
793
794ODINFUNCTION4(BOOL, GetMenuItemRect,
795 HWND, hWnd,
796 HMENU, hMenu,
797 UINT, uItem,
798 LPRECT, lprcItem)
799{
800 dprintf(("USER32:GetMenuItemRect (%08xh,%08xh,%08xh,%08x) not implemented.\n",
801 hWnd,
802 hMenu,
803 uItem,
804 lprcItem));
805
806 return (FALSE);
807}
808/*****************************************************************************
809 * Function : InsertMenuItemA
810 * Purpose : The InsertMenuItem function inserts a new menu item at the specified
811 * position in a menu bar or pop-up menu.
812 * Parameters:
813 * Variables :
814 * Result : If the function succeeds, the return value is TRUE.
815 * If the function fails, the return value is FALSE. To get extended
816 * error information, use the GetLastError function.
817 * Remark :
818 * Status : UNTESTED STUB
819 *
820 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
821 *****************************************************************************/
822
823ODINFUNCTION4(BOOL, InsertMenuItemA,
824 HMENU, hMenu,
825 UINT, uItem,
826 BOOL, fByPosition,
827 const MENUITEMINFOA*, lpmii)
828{
829 dprintf(("USER32:InsertMenuItemA (%08xh,%08xh,%u,%08x) not implemented.\n",
830 hMenu,
831 uItem,
832 fByPosition,
833 lpmii));
834
835 return (FALSE);
836}
837
838
839/*****************************************************************************
840 * Function : InsertMenuItemW
841 * Purpose : The InsertMenuItem function inserts a new menu item at the specified
842 * position in a menu bar or pop-up menu.
843 * Parameters:
844 * Variables :
845 * Result : If the function succeeds, the return value is TRUE.
846 * If the function fails, the return value is FALSE. To get extended
847 * error information, use the GetLastError function.
848 * Remark :
849 * Status : UNTESTED STUB
850 *
851 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
852 *****************************************************************************/
853
854ODINFUNCTION4(BOOL, InsertMenuItemW,
855 HMENU, hMenu,
856 UINT, uItem,
857 BOOL, fByPosition,
858 const MENUITEMINFOW *, lpmii)
859{
860 dprintf(("USER32:InsertMenuItemW (%08xh,%08xh,%u,%08x) not implemented.\n",
861 hMenu,
862 uItem,
863 fByPosition,
864 lpmii));
865
866 return (FALSE);
867}
868/*****************************************************************************
869 * Function : MenuItemFromPoint
870 * Purpose : TheMenuItemFromPoint function determines which menu item, if
871 * any, is at the specified location.
872 * Parameters:
873 * Variables :
874 * Result : Returns the zero-based position of the menu item at the specified
875 * location or -1 if no menu item is at the specified location.
876 * Remark :
877 * Status : UNTESTED STUB
878 *
879 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
880 *****************************************************************************/
881
882ODINFUNCTION3(UINT, MenuItemFromPoint,
883 HWND, hWnd,
884 HMENU, hMenu,
885 POINT, ptScreen)
886{
887 dprintf(("USER32:MenuItemFromPoint (%08xh,%08xh,%u) not implemented.\n",
888 hWnd,
889 hMenu,
890 ptScreen));
891
892 return (-1);
893}
894
895
896/*****************************************************************************
897 * Function : GetMenuInfo
898 * Parameters:
899 * Variables :
900 * Result :
901 * Remark :
902 * Status : UNTESTED STUB win98/NT5.0
903 *
904 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
905 *****************************************************************************/
906
907ODINFUNCTION2(BOOL, GetMenuInfo,
908 HMENU, hMenu,
909 LPMENUINFO, lpmi)
910{
911 dprintf(("USER32: GetMenuInfo(%08xh,%08xh) not implemented.\n",
912 hMenu,
913 lpmi));
914
915 memset(lpmi,0,sizeof(MENUINFO));
916 return 0;
917}
918#if 0
919 POPUPMENU *menu;
920
921 TRACE("(0x%04x %p)\n", hMenu, lpmi);
922
923 if (lpmi && (menu = (POPUPMENU *) USER_HEAP_LIN_ADDR(hMenu)))
924 {
925
926 if (lpmi->fMask & MIM_BACKGROUND)
927 lpmi->hbrBack = menu->hbrBack;
928
929 if (lpmi->fMask & MIM_HELPID)
930 lpmi->dwContextHelpID = menu->dwContextHelpID;
931
932 if (lpmi->fMask & MIM_MAXHEIGHT)
933 lpmi->cyMax = menu->cyMax;
934
935 if (lpmi->fMask & MIM_MENUDATA)
936 lpmi->dwMenuData = menu->dwMenuData;
937
938 if (lpmi->fMask & MIM_STYLE)
939 lpmi->dwStyle = menu->dwStyle;
940
941 return TRUE;
942 }
943 return FALSE;
944}
945#endif
946
947
948/*****************************************************************************
949 * Function : SetMenuInfo
950 * Purpose :
951 * Parameters:
952 * Variables :
953 * Result :
954 * Remark :
955 * FIXME
956 * MIM_APPLYTOSUBMENUS
957 * actually use the items to draw the menu
958 * Status : UNTESTED STUB win98/NT5.0
959 *
960 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
961 *****************************************************************************/
962
963ODINFUNCTION2(BOOL, SetMenuInfo,
964 HMENU, hMenu,
965 LPCMENUINFO, lpmi)
966{
967 dprintf(("USER32: SetMenuInfo(%08xh,%08xh) not implemented.\n",
968 hMenu,
969 lpmi));
970
971 return 0;
972}
973#if 0
974 POPUPMENU *menu;
975
976 TRACE("(0x%04x %p)\n", hMenu, lpmi);
977
978
979
980 if (lpmi && (lpmi->cbSize==sizeof(MENUINFO)) && (menu=(POPUPMENU*)USER_HEAP_LIN_ADDR(hMenu)))
981 {
982
983 if (lpmi->fMask & MIM_BACKGROUND)
984 menu->hbrBack = lpmi->hbrBack;
985
986 if (lpmi->fMask & MIM_HELPID)
987 menu->dwContextHelpID = lpmi->dwContextHelpID;
988
989 if (lpmi->fMask & MIM_MAXHEIGHT)
990 menu->cyMax = lpmi->cyMax;
991
992 if (lpmi->fMask & MIM_MENUDATA)
993 menu->dwMenuData = lpmi->dwMenuData;
994
995 if (lpmi->fMask & MIM_STYLE)
996 menu->dwStyle = lpmi->dwStyle;
997
998 return TRUE;
999 }
1000 return FALSE;
1001}
1002#endif
1003
1004
Note: See TracBrowser for help on using the repository browser.