in reply to Re: Win32::GUI::Menu icon problem - I need help !
in thread Win32::GUI::Menu icon problem - I need help !

Excellent jop. kejohm Thank you very much :)

I managed to... These are my codes

use strict; use warnings; use Win32::API(); Win32::API->Import('user32', 'SetMenuItemInfo', 'LILP', 'L') or die; use Win32::GUI (); use Win32::GUI::DIBitmap(); sub MIIM_BITMAP() {0x00000080} my $menu = Win32::GUI::MakeMenu( 'Popup' => 'Popup', '>Item &1' => { -name => 'Item1', -onClick => sub { print "Item1\n +"; 0; }, }, '>-' => 'Seperator', '>Item &4' => { -name => 'Item4', -onClick => sub { print"Item4\n" +; 0; }, }, ); my $mw = Win32::GUI::Window->new( -size => [400,300], -menu => $menu, -name => "test", ); my $hbap = new Win32::GUI::Bitmap ('aon2.bmp'); my $hbmp = $hbap->{-handle}; my $hmenu = $menu->{Popup}->{-handle}; my $mii = pack( 'IIIIILLLLLIL', 12 * 4, # cbsize = sizeof(MENUITEMINFO) MIIM_BITMAP, # fMask = MIIM_BITMAP 0, # fType - unused 0, # fState - unused 0, # wID - unused 0, # hSubMenu - unused 0, # hbmpChecked - unused 0, # hbmpUnchecked - unused 0, # dwItemData - unused 0, # dwTypeData - unused 0, # cch - unused $hbmp, # hbmpItem ); SetMenuItemInfo($hmenu, 2, 1, $mii); $mw->Center(); $mw->Show(); Win32::GUI::Dialog();

use Win32::API(); Win32::API->Import('user32', 'SetMenuItemInfo', 'LILP', 'L') or die; Win32::API->Import('user32', 'SetMenuInfo', 'LP', 'L') or die; use Win32::GUI qw(CW_USEDEFAULT SM_CXMENUCHECK SM_CYMENUCHECK TRANSPAR +ENT); use Win32::GUI::DIBitmap(); sub MIIM_BITMAP() {0x00000080} sub MIM_STYLE() {0x00000010} sub MIM_BACKGROUND() {0x00000002} my $menu = Win32::GUI::MakeMenu( 'Popup' => 'Popup', '>Item &1' => { -name => 'Item1', -onClick => sub { print "Item1\n +"; 0; }, }, '>-' => 'Seperator', '>Item &4' => { -name => 'Item4', -onClick => sub { print"Item4\n" +; 0; }, }, ); $po = new Win32::GUI::Brush( -color => 000); my $mw = Win32::GUI::Window->new( -left => CW_USEDEFAULT, -size => [400,300], -menu => $menu, -name => "test", ); $hbap = new Win32::GUI::Bitmap ('aon2.bmp'); $hbmp = $hbap->{-handle}; $hmenu = $menu->{Popup}->{-handle}; my $mi = pack( 'LLLILLL', 12 * 4, # cbsize = sizeof(MENUITEMINFO) MIM_BACKGROUND, # fMask = MIM_STYLE 0, 0, # cyMax - unused $po, # hbrBack - unused 0, # dwContextHelpID - unused 0, # dwMenuData - unused ); SetMenuInfo($hmenu, $mi); my $mii = pack( 'IIIIILLLLLIL', 12 * 4, # cbsize = sizeof(MENUITEMINFO) MIIM_BITMAP, # fMask = MIIM_BITMAP 0, # fType - unused 0, # fState - unused 0, # wID - unused 0, # hSubMenu - unused 0, # hbmpChecked - unused 0, # hbmpUnchecked - unused 0, # dwItemData - unused 0, # dwTypeData - unused 0, # cch - unused $hbmp, # hbmpItem ); SetMenuItemInfo($hmenu, 2, 1, $mii); $mw->Center(); $mw->Show(); Win32::GUI::Dialog();

But now, not show the "Transparent" png images; i have looked transparent png images in a main window with "AddGraphic" and "AddLabel" modules !!... I changed my mind ! and write this code;
use Win32::API(); Win32::API->Import('user32', 'SetMenuItemInfo', 'LILP', 'L') or die; Win32::API->Import('user32', 'SetMenuInfo', 'LP', 'L') or die; use Win32::GUI qw(CW_USEDEFAULT SM_CXMENUCHECK SM_CYMENUCHECK TRANSPAR +ENT); use Win32::GUI::DIBitmap(); sub MIIM_BITMAP() {0x00000080} sub MIM_STYLE() {0x00000010} sub MIM_BACKGROUND() {0x00000002} my $menu = Win32::GUI::MakeMenu( 'Popup' => 'Popup', '>Item &1' => { -name => 'Item1', -onClick => sub { print "Item1\n +"; 0; }, }, '>-' => 'Seperator', '>Item &4' => { -name => 'Item4', -onClick => sub { print"Item4\n" +; 0; }, }, ); $po = new Win32::GUI::Brush( -color => 000); my $mw = Win32::GUI::Window->new( -left => CW_USEDEFAULT, -size => [400,300], -menu => $menu, -name => "test", ); $hbap = new Win32::GUI::Bitmap ('aon2.bmp'); $hbmp = $hbap->{-handle}; $hmenu = $menu->{Popup}->{-handle}; my $mi = pack( 'LLLILLL', 12 * 4, # cbsize = sizeof(MENUITEMINFO) MIM_BACKGROUND, # fMask = MIM_STYLE 0, 0, # cyMax - unused $po, # hbrBack - unused 0, # dwContextHelpID - unused 0, # dwMenuData - unused ); SetMenuInfo($hmenu, $mi); my $mii = pack( 'IIIIILLLLLIL', 12 * 4, # cbsize = sizeof(MENUITEMINFO) MIIM_BITMAP, # fMask = MIIM_BITMAP 0, # fType - unused 0, # fState - unused 0, # wID - unused 0, # hSubMenu - unused 0, # hbmpChecked - unused 0, # hbmpUnchecked - unused 0, # dwItemData - unused 0, # dwTypeData - unused 0, # cch - unused $hbmp, # hbmpItem ); SetMenuItemInfo($hmenu, 2, 1, $mii); $mw->Center(); $mw->Show(); Win32::GUI::Dialog();
Basically i change the popup menu "Color" and "Transparent" problem will be solved... This my idea but not change the popup menu color !!!

Replies are listed 'Best First'.
Re^3: Win32::GUI::Menu icon problem - I need help !
by kejohm (Hermit) on Dec 14, 2010 at 07:55 UTC

    The problem might where you are setting the background brush for the menu. You need to pass the handle of the brush, rather than the brush itself. So instead of this:

    my $mi = pack( 'LLLILLL', 12 * 4, MIM_BACKGROUND, 0, 0, $po, # <=== problem might be here 0, 0, );

    you need to do this:

    my $mi = pack( 'LLLILLL', 12 * 4, MIM_BACKGROUND, 0, 0, $po->{-handle}, # <=== change to this 0, 0, );

      Thank you very much for posts, kejohm.

      I'm working on a program for 1 month, So tired !,

      I forget the codes :)

      Thanks kejohm...

      Thanks Perlmonks...

      Regars...