1. Setting Icon....
- Posted by Patrick Quist <quistnet at HOTMAIL.COM> Feb 27, 1999
- 469 views
Hy, Does somebody know how to set a bitmap/icon of a win32lib window? Not in the window, but OF the window (Upper-Left-Corner at the blue line). setIcon() doesn't work. And I read in a program that if you use sendMessage(), you have to use command 128, but that doesn't work also. Can somebody help me? Bye, PQ QC ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com
2. Re: Setting Icon....
- Posted by Brian Jackson <bjackson at PRINTINGINC.COM> Feb 27, 1999
- 455 views
- Last edited Feb 28, 1999
Hi Patrick, Yes, I did that once, but I had to hack win32lib.ew pretty badly to do it. I tried to email David Cuny, but it bounced back, and I forgot about it. Let me show him how I did it, and see what he wants to do with it. BTW, you are correct that #80 (128) is the correct sendMessage code, but it won't work in win32lib because of some issues with global constants. Brian Jackson bjackson at printinginc.com
3. Re: Setting Icon....
- Posted by Bernie Ryan <bwryan at PCOM.NET> Feb 28, 1999
- 470 views
I am confused by what you mean by command 128. There are two types of main windows in mswindow. A single window and a MDI ( mutiple doctument interface ) A single main window has no child windows. A MDI window would be like an editor that creates multiple child windows for each document, etc. The Single window when its created is assign a default icon. I do not think you can change it on the fly. So you have to assign your own icon as the deault icon when you create it. But a MDI window I think can change the icon of any of its child by sending a message to it because it creates these child windows. So are trying to change a single window or a MDI window ? If its a single window use your ICON as the default when creating it. To change the MDI you have find out the correct message to send. I hope this helps you. Bernie
4. Re: Setting Icon....
- Posted by Daniel Berstein <daber at PAIR.COM> Feb 28, 1999
- 467 views
At 12:24 PM 28-02-1999 , you wrote: >The Single window when its created is assign a default icon. >I do not think you can change it on the fly. So you have to assign your >own icon as the deault icon when you create it. > >But a MDI window I think can change the icon of any of its child >by sending a message to it because it creates these child windows. >So are trying to change a single window or a MDI window ? >If its a single window use your ICON as the default when creating it. >To change the MDI you have find out the correct message to send. In fact the icon used in a window is defined on it's window class. You can send a WM_SETICON message, but the message is only recognized on Win9x, not NT. If you want to change it at runtime you need to get (or create) a new icon handle and modify the window class with the SetClassLong() WinAPI function. In the following code I use the LoadImage() API function to load from file an icon. The ChangeWindowIcon modifies the small icon associated with the window (GCL_HICONSM). The small icon is displayed on the left-top corner of the window and in the taskbar. The large icon (GCL_HICON) is used when switching task using ALT+TAB. I tested the code and worked fine (on NT 4.0). I modified window.exw (on %EUDIR%\DEMO\WIN32) to call ChangeWindowIcon when creating the Window (WM_CREATE), tell me if it works OK on other circumstances. Perhaps it requieres a repaint before displaying the new icon. --[CHANGEICON.EW]-- include dll.e -- Class field offsets for GetClassLong() global constant GCL_MENUNAME = -8, -- Pointer to the menu name string GCL_HBRBACKGROUND = -10, -- Handle to the default background brush GCL_HCURSOR = -12, -- Handle to the window class cursor GCL_HICON = -14, -- Handle to the window class icon GCL_HMODULE = -16, -- Handle of the module that registered the class GCL_CBWNDEXTRA = -18, -- Size of extra memory associated with each --window of this class, in bytes. GCL_CBCLSEXTRA = -20, -- Size of the extra memory associated with this --class, in bytes. GCL_WNDPROC = -24, -- Pointer to the window procedure for this class. --If a developer replaces the window procedure --using this index, it must conform to the window --procedure callback definition as outlined in the --RegisterClass function. This subclass will affect --all windows subsequently created with this class. --An application should not subclass a window created --by another process. GCL_STYLE = -26, -- 32-bit style bits for this class GCW_ATOM = -32, -- Atom that uniquely identifies this class. This --is the same atom returned by the RegisterClass --and RegisterClassEx functions GCL_HICONSM = -34 --Handle to the window class small icon -- LoadImage() constants global constant IMAGE_BITMAP = 0, IMAGE_ICON = 1, IMAGE_CURSOR = 2, IMAGE_ENHMETAFILE = 3, LR_DEFAULTCOLOR = #0000, LR_MONOCHROME = #0001, LR_COLOR = #0002, LR_COPYRETURNORG = #0004, LR_COPYDELETEORG = #0008, LR_LOADFROMFILE = #0010, LR_LOADTRANSPARENT = #0020, LR_DEFAULTSIZE = #0040, LR_VGACOLOR = #0080, LR_LOADMAP3DCOLORS = #1000, LR_CREATEDIBSECTION = #2000, LR_COPYFROMRESOURCE = #4000, LR_SHARED = #8000 atom user32, ApiSetClassLong, ApiLoadImage procedure init() user32 = open_dll("user32.dll") ApiSetClassLong = define_c_func(user32, "SetClassLongA", {C_INT, C_INT, C_LONG}, C_LONG) ApiLoadImage = define_c_func(user32, "LoadImageA", {C_INT, C_POINTER, C_UINT, C_INT, C_INT, C_UINT}, C_LONG) end procedure global function LoadImage(integer hinst, sequence name, integer utype, integer cxDesired, integer cyDesired, integer fuLoad) atom lpszname lpszname = allocate_string(name) return c_func(ApiLoadImage, {hinst, lpszname, utype, cxDesired, cyDesired, fuLoad}) free(lpszname) end function global function SetClassLong(integer hwnd, integer nIndex, integer NewVal) return c_func(ApiSetClassLong, {hwnd, nIndex, NewVal}) end function global function ChangeWindowIcon(integer hwnd, sequence icon_file) integer hicon hicon = LoadImage(0, icon_file, IMAGE_ICON, 0, 0, LR_LOADFROMFILE) return SetClassLong(hwnd, GCL_HICONSM, hicon) end init() --[TEST.EXW]-- include changeicon.ew --TO DO: Create and populate window -- hwnd = window handle ChangeWindowIcon(hwnd, "path\\icon_file.ico") Regards, Daniel Berstein [daber at pair.com]
5. Re: Setting Icon....
- Posted by Patrick Quist <quistnet at HOTMAIL.COM> Feb 28, 1999
- 475 views
>From: Bernie Ryan <bwryan at PCOM.NET> >Subject: Re: Setting Icon.... > >I am confused by what you mean by command 128. >There are two types of main windows in mswindow. >A single window and a MDI ( mutiple doctument interface ) >A single main window has no child windows. >A MDI window would be like an editor that creates multiple child windows >for each document, etc. >The Single window when its created is assign a default icon. >I do not think you can change it on the fly. So you have to assign your >own icon as the deault icon when you create it. >But a MDI window I think can change the icon of any of its child >by sending a message to it because it creates these child windows. >So are trying to change a single window or a MDI window ? >If its a single window use your ICON as the default when creating it. >To change the MDI you have find out the correct message to send. What has MDI to do with Icons ? ! Nothing ! I'm talking about changing the upper-left picture before the title in the blue line in a window. This supposed to be a WINDOW, The # is a ICON, - is MINIMIZE BUTTON, <> is MAXIMIZE/RESTORE button, X is CLOSE BUTTON. _____________________ [# TITLE - <> X] ----------------------- | | | | | | | | ----------------------- GET IT !? Bye, PQ QC ______________________________________________________ Get Your Private, Free Email at http://www.hotmail.com
6. Re: Setting Icon....
- Posted by Bernie Ryan <bwryan at PCOM.NET> Feb 28, 1999
- 476 views
That ( titlebar or caption or system menu )icon what ever you want to call it can appear in two places in an MDI WINDOW, on the APPLICATION WINDOW or on the DOCUMENT WINDOW. A SINGLE WINDOW has only ONE ICON because it is only a APPLICATION WINDOW ( No child windows ). All of these windows display an ICON on the little blue line at the top. You did not explain which of the ICON's you wanted to change or in what type of windows. Bernie
7. Re: Setting Icon....
- Posted by Daniel Berstein <daber at PAIR.COM> Feb 28, 1999
- 456 views
- Last edited Mar 01, 1999
At 06:40 PM 28-02-1999 , you wrote: >That ( titlebar or caption or system menu )icon what ever you want to call >it can appear in two places in an MDI WINDOW, on the APPLICATION WINDOW >or on the DOCUMENT WINDOW. >A SINGLE WINDOW has only ONE ICON because it is only a APPLICATION >WINDOW ( No child windows ). >All of these windows display an ICON on the little blue line at the top. >You did not explain which of the ICON's you wanted to change or in what >type of windows. > >Bernie The code I sent earlier can handle any window. It just need a handle to the window. Tell me if it works on 95/98 (it should). Regards, Daniel Berstein [daber at pair.com]