Hi Bernat,

>how do I translate this into NB code
Either invite Igor (author of NB) for lunch or try this:


Its a C-structure, you convert it by wrapping this in a sublcass 
of "NBExternalStructure". See the examples already in a Pharo 3.0 image.

Basically you need:

- define a subclass NBExternalStructure subclass: #WinNotifyIconData ...
- define the correct fields in a class side #fieldsDesc method according to the 
native data types used in the structure
- call "WinNotifyIconData rebuildFieldAccessors"
- setup the types in a shared pool that you can include later:

   - define the pool:       SharedPool subclass: #WinTryIconConstants ...
   - in a class initialize method you can setup the type

     initialize

        NOTIFYICONDATA := #WinNotifyIconData.
        PNOTIFYICONDATA:= 'NOTIFYICONDATA *'.   

- by including the pool you can use "NOTIFYICONDATA" or "PNOTIFYICONDATA" in 
any native boost call.


If you are in Pharo 3.0 load "OS-Windows" package from the config browser.
Check the subclasses of NBExternalStructure there.

I wrapped many other windows structures already so you can get an idea about
it. For instance have a look at WinConsoleConstants>>initTypeConstants, there 
you will find
the CONSOLE_CURSOR_INFO, CONSOLE_SCREEN_BUFFER_INFO structs wrapped in 
WinConsoleCursor, WinConsoleScreenBuffer classes.

Compare them with the MSDN struct description.

>Could the Windows API be any more convoluted and dev-unfriendly in any
>possible sense?

This question should go to M$ not Pharo-user ;)

Bye
T.


BTW: I'm not sure "PNOTIFYICONDATA" alone will solve your problem if I remember 
correctly
     from my Smalltalk/MT and C/C++ times also playing with tray icons.
     I guess you need a callback that gets called when the icon is clicked or 
the tray icon menu
     is choosen (see uCallbackMessage member in the struct).
     You also need a handle to an icon - either the icon from the EXEs resource 
section or 
     by loading one from a bitmap. That means wrapping the icon or bitmap apis 
too... 

Reply via email to