[osg-users] Simple question: How to set the icon that willbe used when a viewer is realized?
David Callu
ledocc at gmail.com
Thu Mar 12 03:55:31 PDT 2009
Hi Matt
Can you put your submissions in osg-submissions mailing list.
Take a look to submissions
protocol<http://www.openscenegraph.org/projects/osg/wiki/MailingLists/SubmissionsProtocol>for
more detail.
Cheer
David Callu
2009/3/11 Matt McPheeters <mmcpheeters at rscusa.com>
> Hi Robert,
>
> These source files came from OpenSceneGraph-2.7.4, which I checked out
> first from subversion.
>
> Please find the only three modified files attached.
>
> Thanks
>
>
> -----Original Message-----
> From: osg-users-bounces at lists.openscenegraph.org [mailto:
> osg-users-bounces at lists.openscenegraph.org] On Behalf Of Guy
> Sent: Wednesday, March 11, 2009 2:06 AM
> To: OpenSceneGraph Users
> Subject: Re: [osg-users] Simple question: How to set the icon that willbe
> used when a viewer is realized?
>
>
> Robert,
> I'm probably stating the obvious, but besides Matt changes I guess icon
> loading implementation for each of the platforms except windows will be
> required too.
>
> Guy.
>
> Hi Matt,
>
> Could you post the whole modified files, I can then review then with a
> view to merging them or something similar.
>
> Cheers,
> Robert.
>
>
>
> On Tue, Mar 10, 2009 at 6:43 PM, Matt McPheeters <mmcpheeters at rscusa.com>
> wrote:
> > Awesome, it worked. The icon I was talking about is the one in the
> > upper left hand corner of the window. But it also appears in the
> > taskbar and the
> > alt-tab popup menu.
> >
> > This is a Windows platform so the solution I came up with is not
> > platform independent, but I believe I implemented it in the same generic
> > way that
> > GraphicsWindow::setWindowName() is done.
> >
> > In GraphicsWindow (header file, line 121):
> >
> > /** Set the icons the window uses */
> > virtual void setWindowIcons(const std::string& /*iconPath*/) {
> > osg::notify(osg::NOTICE)<<"GraphicsWindow::setWindowIcons(..) not
> > implemented."<<std::endl; }
> >
> > /** Set the name of the window */
> > virtual void setWindowName(const std::string& /*name*/) {
> > osg::notify(osg::NOTICE)<<"GraphicsWindow::setWindowName(..) not
> > implemented."<<std::endl; }
> >
> >
> > In GraphicsWindowWin32 (header file, line 85):
> >
> > /** Set the icons for the window */
> > virtual void setWindowIcons(const std::string& /*iconPath*/);
> >
> > /** Set the name of the window */
> > virtual void setWindowName(const std::string& /*name*/);
> >
> > (and on line 151, the member variables):
> >
> > HWND _hwnd;
> > HDC _hdc;
> > HGLRC _hglrc;
> > HCURSOR _currentCursor;
> > HICON _currentIcon;
> >
> >
> > In GraphicsWindowWin32.cpp (source file, line 959, the constructor):
> >
> > GraphicsWindowWin32::GraphicsWindowWin32( osg::GraphicsContext::Traits*
> > traits )
> > : _hwnd(0),
> > _hdc(0),
> > _hglrc(0),
> > _currentCursor(0),
> > _currentIcon(0),
> >
> > (and on line 1006, the destructor):
> >
> > GraphicsWindowWin32::~GraphicsWindowWin32()
> > {
> > if (_currentIcon != NULL)
> > {
> > DestroyIcon(_currentIcon);
> > }
> >
> > close();
> > destroyWindow();
> > }
> >
> > (and on line 1878, the Windows implementation of the new function):
> >
> > void GraphicsWindowWin32::setWindowIcons( const std::string & iconPath )
> > {
> > HINSTANCE hinst = ::GetModuleHandle(NULL);
> > _currentIcon = ExtractIcon(hinst, iconPath.c_str(), 0 );
> >
> > if (_currentIcon != NULL)
> > {
> > SendMessage(_hwnd, WM_SETICON, ICON_SMALL, (LPARAM)_currentIcon
> > );
> > SendMessage(_hwnd, WM_SETICON, ICON_BIG, (LPARAM)_currentIcon );
> > }
> > }
> >
> > void GraphicsWindowWin32::setWindowName( const std::string & name )
> > {
> > _traits->windowName = name;
> > SetWindowText(_hwnd, name.c_str());
> > }
> >
> >
> >
> > Here is the code from my ::osgViewer application. Names have been
> > changed
> > to protect the innocent (haha):
> >
> > viewer.realize();
> >
> > osgViewer::Viewer::Windows windows;
> > viewer.getWindows( windows );
> > std::string windowName;
> > windowName.assign( "fooViewer" );
> > windows[0]->setWindowName( windowName );
> > windows[0]->setWindowIcons( "barney.ico" );
> >
> > All that is required is that "barney.ico" exists in the same directory
> > that
> > the executable is run from and contains a valid icon. However, I
> > verified that this code works even if the iconPath parameter contains
> > full path information. I did a test:
> >
> > windows[0]->( "C:\\WINDOWS\\nvidia icons\\Portal_32x32.ico" );
> >
> > And it worked like a charm. If the file doesn't exist or exists but
> > doesn't actually contain a valid icon, the viewer doesn't crash. You
> > just get the same default icon from before.
> >
> > Thanks for the great hints,
> > -Matt
> >
> >
> > -----Original Message-----
> > From: osg-users-bounces at lists.openscenegraph.org
> > [mailto:osg-users-bounces at lists.openscenegraph.org] On Behalf Of Guy
> > Sent: Monday, March 09, 2009 11:24 PM
> > To: OpenSceneGraph Users
> > Subject: Re: [osg-users] Simple question: How to set the icon that will
> > beused when a viewer is realized?
> >
> > Hi,
> > I guess it depends on your platform. I haven't seen generic
> > implementation for it but I guess it could be added to display settings
> > or something like that (maybe GraphicsContext::Traits).
> >
> > Anyway, on windows platform, in the file
> > "\osgViewer\GraphicsWindowWin32.cpp",
> > In the function "void Win32WindowingSystem::registerWindowClasses()"
> > The code register a window class and set it's icon to
> > wc.hIcon = ::LoadIcon(hinst, "OSG_ICON");
> >
> > so you can change it there (Hard coded).
> >
> > It of course will be much more usefull to pass the file in a generic way
> > that each platform implementation will call the specific platform calls
> > to load the icon.
> >
> > Guy.
> >
> >
> >
> >
> > I don't know if there is a platform independent way of setting this.
> > What OS are you using? which icon are you talking about exactly? The one
> > in the top right corner?
> >
> > Cory
> >
> > Matt McPheeters wrote:
> >> Hi guys,
> >>
> >> I found of an old way of doing this using Producer. I want the icon
> > of
> >> the viewer window to be custom, not the plain white application icon
> > it
> >> defaults to. How do you set the icon now in OpenSceneGraph-2.7.4?
> >>
> >> Sorry if this question gets asked a lot.
> >> _______________________________________________
> >> osg-users mailing list
> >> osg-users at lists.openscenegraph.org
> >>
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
> > g
> >>
> >>
> > _______________________________________________
> > osg-users mailing list
> > osg-users at lists.openscenegraph.org
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
> > g
> > _______________________________________________
> > osg-users mailing list
> > osg-users at lists.openscenegraph.org
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.or
> > g
> > _______________________________________________
> > osg-users mailing list
> > osg-users at lists.openscenegraph.org
> >
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> >
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20090312/d8525b78/attachment-0003.htm>
More information about the osg-users
mailing list