Introduction
Skin
Style is a
picture
based skin
system
written in
Visual
C++/Win32
and loosely
based on
Cuneyt
Elibol's
MFC/Skin
Sys. The
major
difference
is SkinStyle
is written
without any
MFC.
Much of the
functionality
found in
SkinSys is
not found in
this version
of
SkinStyle.
Contents
-
SkinStyle
Source
-
A
Simple
Example
Download
Directories
Once you
download
and extract
the files,
you'll see
several new
folders.
Here is what
each are
used for.
-
Root
: The
SkinStyle
Code
-
SkinTest
: An
Example
Project
And
Skin
Example
Create a
class that
inherits
from
SkinDialog
Collapse
Copy
Code
class KSkinTest : public SkinDialog
{
public:
virtual void OnKeyDown(WPARAM wParam, LPARAM lParam)
{
if ( wParam == VK_ESCAPE )
::PostMessage(m_hWnd, WM_CLOSE, 0, 0);
}
virtual BOOL OnButtonPressed(char *ButtonName);
};
Now lets
look at how
to handle
buttons
being
pressed...
Collapse
Copy
Code
BOOL KSkinTest::OnButtonPressed(char *ButtonName)
{
if(strcmp(ButtonName, "BUTTON_EXIT") == 0)
::PostMessage(m_hWnd, WM_CLOSE, 0, 0);
else if(strcmp(ButtonName, "BUTTON_MINIMIZE") == 0)
::ShowWindow(m_hWnd, SW_MINIMIZE);
else if(strcmp(ButtonName, "YOUR_DEFINED_BUTTON") == 0)
{
}
return FALSE;
}
Once you
have defined
your new
dialog class
it can be
used in
WinMain
like this
Collapse
Copy
Code
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR lpCmd, int nShow)
{
KSkinTest win;
HWND hParent;
char *SkinFile = GetFile(NULL);
if(SkinFile[0] == 0)
{
GlobalFree(SkinFile);
return 0;
}
hParent = win.CreateEx("SkinTest", CW_USEDEFAULT, CW_USEDEFAULT, hInst, SkinFile);
GlobalFree(SkinFile);
win.SetSticky(true);
win.ShowWindow(nShow); win.UpdateWindow();
return win.MessageLoop(); }
Skin
file format
A
Skin
file
consists of
three parts
(more to
come later)
-
[SCREEN]
: This
section
contains
the
image
files to
display
-
Mucancode.net
:
This
specifies
the
mucancode.net
image
for
the
dialog
-
Main
:
This
specifies
the
main
image
for
the
dialog
-
Down
:
This
specifies
the
image
displayed
when
a
widget
is
pressed
-
Over
:
This
specifies
the
image
displayed
when
the
mouse
is
over
a
sensitive
widget
-
Disabled
:
This
specifies
the
image
displayed
when
the
dialog
is
inactive
-
[BUTTONINFO]
: This
section
contains
a
numbered
list of
buttons
to
display
-
#=BUTTON_NAME,x,y,width,height,TOOL_TIP,FALSE
-
[TEXTINFO]
: This
section
contains
a
numbered
list of
labels
to
display
-
#=TEXT_NAME,FONT,BOLD(TRUE/FALSE),ITALIC(TRUE/FALSE),SIZE,COLOR(long),x,y,width,height,TOOL_TIP
For
example:
Collapse
Copy
Code
[SCREEN]
Mucancode.net=Mucancode.net.bmp
Main=Main.bmp
Down=Selected.bmp
Over=Selected.bmp
Disabled=Main.bmp
1=BUTTON_MINIMIZE,4,1,7,8,Minimize,FALSE
2=BUTTON_BABEL,12,425,43,19,Babel Preferences,FALSE
3=BUTTON_EXIT,196,1,7,8,Exit,FALSE
4=BUTTON_STATUS,119,425,25,19,User Status,FALSE
[TEXTINFO]
1=TEXT_STATUS,Courier New,FALSE,TRUE,-8,3496550,136,424,64,6,Offline,User Status
Problems/Bugs
At this
stage I am
unable to
reload skins
at run time?
This is
apparent in
the sample
app.
Additional
Notes
This is
by no means
a finished
product!
This is my
first
attempt at
writing a
terribly
complicated
Win32
application
library. I
wanted
something
similar to
SkinSys in
functionality
but without
the overhead
of
MFC.
There will
be bugs and
errors! I
hope that
you find
this code
useful. If
you have any
improvements/suggestions,
comments/flames,
or questions
please
e-mail me or
post here.