WindowBlinds requires a file to describe which images are used by the personality and how to use them.  This document describes them and explains how they can be used and any limitations of them in the current releases

You should read this entire document before designing your own personality and you may like to look at the UIS files which come with other personalities to get a general idea of how everything works

 
Important Note to Personality Authors

When making a personality please make the .zip filename the same as the .uis filename.  WindowBlinds will create a folder named the same as the zip file (minus the .zip extension)

Also you should not use spaces or funny symbols in the name of the zip.  It is useful if you could name the zip (and therefore the .uis file) something without the version of the personality.  Then if you make a change to the personality, it can be updated in the listings easier.

 
[TitlebarSkin]

Firstly ALL .uis files must contain the personality name & author.  Without these, the user will not be able to select it as it will not show in the list of installed personalities.

 SkinName = World of Yellow
 SkinAuthor = Neil Banfield

The following are not used in the current public releases but later versions may do, so you may as well include them

 AuthorsURL = [Put your url here]
 AuthorEmail = [Put your e-mail address here]
 SpecialNotes = [Any special notes regarding this personality go here]

 
[Personality]

This is where the main details of the personality are specified.  This section lists the bitmaps, the sizing information and the number of buttons implemented

If your personality does not use transparency in the buttons then you should put the following line in the UIS file as it helps WindowBlinds and ensures greater performance when using this personality.

 UsesTran = 0

 buttonCount = [Number of buttons we have defined in this personality]

We now specify details about the titlebar text

 TextAlignment = [ 0 - Left, 1 - Centre, 2 - Right]
 TextShift = [Amount in pixels to shift the titlebar text by from the left] (A)
 TextShiftVert = [Amount in pixels to shift the titlebar text down by] (B)
 TextRightClip = [How far from the right edge should clipping of the text start] (C)

If you want to make the titlebar text appear on the bottom border, rather than the top border, then the next line is for you.

 TextOnBottom = [0 - Normal text behaviour, 1 - Place the text on the bottom on the window]

WindowBlinds also has the ability to add strings to the front and back of the titlebar text

 FrontString = "*** " [String to add]
 EndString = " ***" [String to add]

 
All UIS 2 based personalities include lines which relate to menu bars.  You should remember that the bitmap name is relative to the WindowBlinds install directory.

 menubar = yellow\menu.bmp

Sometimes you want to make the menus start a set number of pixels from the left of the window border. 

 MenuLeftTile = Specifies the amount to shift the menu text by again in pixels

When a menu item is selected, the item has a rectangle drawn behind it to indicate the selection.  The next lines define the colour of the rectangle in red, green & blue

 MenuR = 142
 MenuG = 109
 MenuB = 146

There are also some other colours which are added to the UIS file too.  These can be chosen by the user or they may choose to use their own system colours instead.  You MUST include all of the 3 colours definitions described below or the colours are ignored

 ActiveTextR
 ActiveTextG
 ActiveTextB

 InactiveTextR
 InactiveTextG
 InactiveTextB

 MenuTextR
 MenuTextG
 MenuTextB

 
Now we have the bitmaps for the window borders and titlebar.  Again they are relative to the WindowBlinds install directory.

 Top = yellow\top.bmp
 Left = yellow\left6.bmp
 Right = yellow\right6.bmp
 Bottom = yellow\bot5.bmp

These bitmaps use RGB(255,0,255) as a transparent area.  Currently the transparency is only obtained from the active titlebar.  Each bitmap consists of 2 images.  The active & inactive images are placed in the bitmap together.  For vertical sides, the active is on the left & the inactive on the right.  For horizontal images, the active is on the top and the inactive is on the bottom
 

 
Each border has areas which are not tiled and areas which are tiled or stretched
In the above, A & C are non tiled and B is an area which is either tiled or stretched

For each we specify the size of A & the size of C

 TopTopHeight = 45 (Size in pixels of A)

 TopBotHeight = 45 (Size in pixels of C)

This is repeated for the other 3 sides

 LeftTopHeight = 6
 LeftBotHeight = 10

 RightTopHeight = 6
 RightBotHeight = 10

 BottomTopHeight = 6
 BottomBotHeight = 6

Notes: The value of LeftBotHeight MUST be >= height of the bottom edge

We now specify is the area B should be tiled or stretched

 TopStretch = 0 (0 - Tile, 1 - Stretch)
 LeftStretch = 0 (0 - Tile, 1 - Stretch)
 RightStretch = 0 (0 - Tile, 1 - Stretch)
 BottomStretch = 0 (0 - Tile, 1 - Stretch)

Later versions will support animation of active titlebar images.  So the following bits should be added for future compatibility

 AniRate = 0

The number of frames in the border images (This is 2 as its the inactive + active state).  YOU MUST make these values = 2.

 TopFrame = 2
 LeftFrame = 2
 RightFrame = 2
 BottomFrame = 2

New for 0.40 is the ability to assign a bitmap to place behind the text.  This is split into 2 (active = top half, inactive = bottom half).  In version 0.63 and later, this feature works for left, centred & right aligned text.

 textBack = MacPC\macback.bmp

Also new in version 0.63 is the ability to set the alpha value for the text background image.  This is a value from 0 - 255 where 255 = totally visible and 0 = invisible.

 ActiveAlpha

 InactiveAlpha

See the notes for alpha in the titlebar buttons section to see limitations of this feature. 

We can tell WindowBlinds how much should be tiled at each end too.  These bits will overhang the caption text.  So to make the text background start 20 pixels to the left of the text and finish 30 pixels to the right, you would make TXTBackleft = 20 and TXTBackRight = 30.

 TXTBackleft = 4
 TXTBackRight = 4

New for version 0.41 is the ability to specify a background wallpaper for the personality.  The user is asked if they wish to use it when they choose the personality.

 Wallpaper = Yellow\bitmap.bmp

Remember the paths are as usual relative to the WindowBlinds directory.

We also have the ability to run a command when the personality is selected. WindowBlinds will ask the user if they wish to do this action specified.

 Exec = start readme.txt

You can specify the run style (3 = normal, 7 = hidden (use if you use start.exe to start something))

 RunStyle = {0,1,2,3,4,5,6,7}

From 0.45 onwards you can specify some bitmaps to use for bitmap backgrounds etc

 ExplorerBmp

 DialogBmp

 MDIBmp =

For 0.85 and later, you can specify a bitmap to use for the menu borders.  Only the 3 pixel wide border around the edge of the bitmap is used.

 menuBorders
 

 
Now we get onto the titlebar buttons

The images for a button are all stored one file.  The states are

  • Non Pressed
  • Pressed
  • Disabled
But we also support different images for when the titlebar is inactive (like in the picture above), so the following is defined to indicate to WindowBlinds if we are using this

 TripleImages = [1 - Use 6 images in one, 0 - Use 3 images]

We can assign sound effects to buttons so to enable this use the following line

 SoundEnabled = [1 - Sound effects on, 0 - Sound effects off]

Lastly as we can assign the rollup function to a button we have a line which lets us specify the minimum height to rollup to.  Without this line it will rollup to the height of the titlebar.

 RollupSize = [In Pixels]

We can also have an action assigned to the right click on the titlebar.  This code is as Action in the next section

 RightClickAction = See Action table

We can also now assign an action to double clicking the titlebar.  The default is to maximize the window

 DoubleClickAction = See Action table
 

 
[Button#]

 # = Number of the button.  So [Button4] is the 5th button.  We start from 0

 Align = See table below
 
 

Align ID
Meaning
0
Align button relative to top left of window
1
Align button relative to the top right of window
2
Align button relative to bottom left of window
3
Align button relative to bottom right of window
4
Align button in the middle of the top edge*
5
Align button in the middle of the bottom edge*
6
Align button in the middle of the left edge*
7
Align button in the middle of the right edge*
8
Align to left of caption text*
 

* These styles do not permit the button to be pressed in


 XCoord = No of pixels to shift left edge of button from the alignment edge (Left or Right)
 YCoord = No of pixels to shift top edge of button from the alignment edge (Top or Bottom)

 Action = See table below
 

Action ID
Action Performed
0
Close this window
1
Maximize this window
2
Minimize this window
3
Help button
4
Rollup / Unroll this window
5
Execute this command (see Command line next)
6
Force this Window to be always on top
7
Attach this window to the desktop (Always on bottom)
8
Litestep Only - Keep this window visible always
9
Prevent this window from being sized or moved
10
Execute the screensaver
11
System icon (I.e. The icon used for this window)
12
System Menu (Does not show the system icon, but works just like it with the menus)
13
Size from the top
14
Size from the bottom
15
Size from the left
16
Size from the right
17
Size from top left
18
Size from the top right
19
Size from the bottom left
20
Size from the bottom right
21
Send to back of z-order
-1
Do nothing.  For when you just want to show an image.  This does not intercept mouse messages
-2
This is like the above but it intercepts mouse messages, so clicking it stops you moving the window
-3
New in 0.77
This tells WindowBlinds that this is a dll button.  See later in this section

New in 0.85 is the ability to assign a different command to a button if shift or control is pressed.  The following 2 lines take the same action codes as the Action line.

 ShiftAction

 CtrlAction =

 Command = [Filename to execute - for buttons with action = 5]

This is the bitmap which contains the button images.  Again RGB(255,0,255) is a transparent area. 

 ButtonImage = yellow\min.bmp

We can also specify the visibility for the button.  Using the codes below you can make a button appear only when certain conditions are true.

 Visibility = See table below
 
 

Visibility ID
Whats it mean
0
Always show this button
1
Show only when the window is active
2
Show only when the window is inactive
3
Show only when the window is maximized
4
Show only when the window is NOT maximized
5
Show only when window has been rolled up
6
Show only when window is NOT rolled up
7
Show only if this window has 'Always on top' set
8
Show only if window is NOT set as 'Always on top'
9
Show only if attached to desktop
10
Show only if NOT attached to desktop
11
Show only if 'Keep this window visible always'
12
Show if NOT 'Keep this window visible always'
13
Show only if window has WS_EX_CONTEXTHELP
14
Show only if window does NOT have help button
15
Show when window does NOT have either maximize or minimize button and is NOT maximized
16
Hides button if a maximize button exists or a minimize button exists
17
Show when window does NOT have either minimize or maximize button
18
Show if window is a MDI child
19
Show only if window is NOT a MDI child
20
Show if the window has a maximize button
21
Show only if the window does NOT have a maximize button
22
Show if the window has a minimize button
23
Show only if the window does NOT have a minimize button
24
Show if the window is sizable
25
Show if the window is NOT sizable

New for 0.63 is the ability to set an alpha value.  WindowBlinds uses this to blend the image with whatever is below it.  WindowBlinds makes use of its own advanced image blender which supports many per pixel effects.  The alpha blender supports the RGB(255,0,255) transparency. 

The larger the area of alpha blending, the slower it will be to display.  However for normal sized buttons there is little performance hit that can be noticed.  The alpha blending does not require any additional support files. 

You can overlap blending and they will be blended in order.  The lower numbered buttons are drawn before the higher numbered ones.  So button 0 is drawn before button 5.

This option has no effect on button style 11 (sysmenu)

 Alpha = {0 - 255}, where 255 is normal and 0 is invisible.  All values between are different amounts to blend.

You can also specify the operation to use when combining the image

 AlphaOp = See Table Below
 
 

Operation Code
What it does
0
Simple Alpha Blend.  This uses the Alpha value to work out the blending
1
As above but the image is flipped
3
Darken.  This uses the darkest pixel from the images
4
Lighten.  This uses the lightest pixel from the images
5
Multiply.  This multiplies the images
6
Screen.
7
Difference.  The result is the difference between the 2 images.
8
Simple Transparency
9
Blur.  Alpha = the amount.  higher value = greater blur.

These operations are just like the ones you would find in a graphics package.  The performance is not bad on a typical system and it may be that in the future these operations are made faster.  If you would like any other per-pixel effects then please e-mail Neil@stardock.com with the algorithm for the operation and I will try to add it to a future release.

Most of the above operations would be used by a titlebar dll plugin as it is able to modify it's own look at runtime and so cannot have the operations carried out in a image package.

New for  0.77

0.77 introduces the dll plugin interface for buttons. 

Basically this allows a programmer to design their own items to be added to titlebars.  These could be clocks, animated buttons, almost anything!

The latest SDK's can be downloaded from www.windowblinds.net.  The C SDK is included in this distribution and is called UIS2Plug.zip.  Look for it in your WindowBlinds directory.

 DllName = the dll to use. Again relative to the WindowBlinds directory

The following have been added to help you size your new items

 Width = Width in pixels of the item
 Height = Height in pixels of the item

These values override the dimensions of the bitmap specified in ButtonImage.  It is advised not to have a ButtonImage line as it will just waste memory.  Use the Width & Height lines instead.

crzywin.zip contains a demo personality which uses the dll interface.  Plugin.dll is a clock.  Crzywin.uis contains a section called clock which holds the parameters that can be used to configure the clock module.

Please note that the crzywin personality (called 'Tech Demo for Win98') makes extensive use of alpha blending, and the clock module is running in the fade mode.  So it will fade in & out (using more CPU than in really needs)

crzywin.zip is not included in the WindowBlinds distribution due to size limitations.  It is included in the titlebar plugin sdk on www.windowblinds.net

Now for sound effects

 InSound = [Sound to play when a button is pressed in]

 OutSound = [Sound to play when a button is released]
 


WindowBlinds 0.39g and later supports bitmaps to replace the standard buttons and checkboxes.  0.45 introduces bitmaps for radio buttons too.

[Buttons]

This is the checkbox bitmaps file. 

 CheckButton

This is the radio buttons bitmaps file.  If this is not specified then the checkbutton bitmap use used instead

 RadioButton

This is the button bitmaps

 Bitmap =

And the edge sizes for the buttons.  These edges are not stretched. 

 TopHeight = [Height of the top border]
 BottomHeight = [Height of bottom border]
 LeftWidth = [Width of the left border]
 RightWidth = [Width of the right border]

- Standard buttons

Button states in bitmaps are

1) Normal
2) Pressed
3) Disabled
4) Focus
5) Default

- Check box buttons

Checkbox states in bitmaps

1) Normal
2) Selected
3) Greyed non selected
4) Greyed selected

 
WindowBlinds 0.50 introduces the capability to assign bitmaps to the taskbar.  Due to a bug in the public release of 0.50 this option did not work as intended.  This now works properly.

However the bitmap MUST be called TASK.BMP, but it can be in your directory.  So TaskImg = abc\fred.bmp will not work for a personality called abc, but TaskImg = abc\task.bmp will.

[TaskBar]

 TaskImg = image file (again relative to the WB directory)
 



 

The .UIS file format is ©1998-9 Neil Banfield & Stardock Systems, Inc