NO , I'm not going to use it on leopard . Cause in leopard , NSMenuItem
support setting custom views using API setView:.What I want , just using it
in Tiger .



extern MenuRef _NSGetCarbonMenu( NSMenu *menu);


@implementation MyController


OSStatus PictureHandler( EventHandlerCallRef caller, EventRef event,

 void* refcon )

{

    OSStatus    err = eventNotHandledErr;

    WindowRef   owner;

     GetEventParameter( event, kEventParamControlCurrentOwningWindow,

   typeWindowRef, NULL, sizeof( owner ), NULL, &owner );

     if ( owner != NULL )

    {

        // find the content view

        HIViewRef content;

        HIViewFindByID( HIViewGetRoot( owner ), kHIViewWindowContentID,

&content );

         // create a data provider for our image

        CFURLRef url = CFBundleCopyResourceURL( CFBundleGetMainBundle(),

CFSTR("NSApplication"), CFSTR(".icns"), NULL );

        CGDataProviderRef data = CGDataProviderCreateWithURL( url );

        CFRelease( url );

         // create our image

        CGImageRef image = CGImageCreateWithJPEGDataProvider( data, NULL,

  true, kCGRenderingIntentDefault );

        CFRelease( data );

         // create our image view

        HIViewRef imageView;

        HIImageViewCreate( image, &imageView );

        HIImageViewSetOpaque( imageView, false );

        HIImageViewSetAlpha( imageView, 0.3 );

        CFRelease( image );

         // position our image view below the content view's children

        HIViewAddSubview( content, imageView );

        HIViewSetZOrder( imageView, kHIViewZOrderBelow, NULL );

        HIViewSetVisible( imageView, true );

         // size our image view to match the content view

        HIRect bounds;

        HIViewGetBounds( content, &bounds );

        HIViewSetFrame( imageView, &bounds );

    }

    return err;

}


-(void) awakeFromNib

{

CFBundleRef bundleRef;

IBNibRef nibRef;

MenuRef myMenuRef;

HIViewRef theView;

EventTypeSpec myEvent;

 OSStatus err;

 //bundleRef = CFBundleGetMainBundle();

//err = CreateNibReferenceWithCFBundle(bundleRef,CFSTR("MainMenu"),
&nibRef);

//if(err)

// NSLog(@"load menu nib failed");

//CreateMenuFromNib(nibRef,CFSTR("myMain"),&myMenuRef);

//InsertMenu(myMenuRef,0);

 NSMenu *menu = [NSApp mainMenu];

myMenuRef = _NSGetCarbonMenu(menu);

 HIMenuGetContentView(myMenuRef,kThemeMenuTypePullDown,&theView);

myEvent.eventClass = kEventClassControl;

myEvent.eventKind  = kEventControlOwningWindowChanged;

/****************************************************************/

        EventHandlerUPP handlerUPP;

handlerUPP = NewEventHandlerUPP(PictureHandler);

InstallControlEventHandler(theView,handlerUPP,2,&myEvent,0,NULL);

}

@end

this is the piece of code . I take the example of HIView Programming Guide
- Manipulating menu views
http://developer.apple.com/documentation/Carbon/Conceptual/HIViewDoc/HIView_tasks/chapter_3_section_12.html#//apple_ref/doc/uid/TP30000923-CH205-BAJIDJDH


so After I call _NSGetCarbonMenu(menu); myMenuRef is always 0x0 .
Must I create the carbon menu in the NIb instead of cocoa menu if I want to
get the correct menuRef?

2008/3/18, Kyle Sluder <[EMAIL PROTECTED]>:
>
> On Tue, Mar 18, 2008 at 2:25 PM, Daniel zeilMal <[EMAIL PROTECTED]>
> wrote:
> > I have a custom view . And I have drew something on this view . I want
> to
> >  add a custom view to a menuItem . But this is not supported before
> Leopard .So
>
>
> Are you trying to use _NSGetCarbonMenu on Leopard?  If so, just go
> with the NSView in NSMenu approach.  Leave _NSGetCarbonMenu for Tiger
> only.  Since the symbol is still defined on Leopard (even though it's
> giving you NULL) a simple if statement should suffice.
>
>
> --Kyle Sluder
>
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to