Using Skins with the Windows Media Player Control

When you embed the Windows Media Player control in a C++ program, you can customize the Player user interface (UI) by applying a skin definition file to it. A skin definition file is an XML-based document specifying the layout of standard and customizable UI components and any accompanying graphics. Using Microsoft JScript, you can specify the behavior of these components and manipulate the Windows Media Player control without the overhead of C++ and COM syntax.

Skins provide an easy way to keep your user interface code and your main program code separate so that they can be maintained and developed independently. You can also reuse skins originally designed for use by the standalone Player in skin mode. Skin code that you design specifically for C++ programs can interact with your programs through a scriptable object that your program can provide.

To enable skin mode for the Windows Media Player control, your program must implement the IWMPRemoteMediaServices interface. Although you can use skins with the control and remote the control at the same time, you can use this interface to enable either feature without enabling the other. To disable remoting, simply pass a value of "Local" as the out parameter of the GetServiceType method, and return an HRESULT of E_NOTIMPL from the GetApplicationName method.

To switch the Windows Media Player control to skin mode, call the IWMPPlayer::put_uiMode method, passing in a value of "custom". Specify the path and file name of the skin definition file to use by returning it from the IWMPRemoteMediaServices::GetCustomUIMode method.

If you want to provide a scriptable object for communication between your skin and your program, pass a name and a pointer to an IDispatch pointer as the two out parameters of the IWMPRemoteMediaServices::GetScriptableObject method. Your skin can then make calls to the scriptable object by using the name specified as though it were a global attribute similar to the player global attribute.

A skin applied to a remoted Windows Media Player control can access the PlayerApplication object using another global attribute called playerApplication. Because the Player.playerApplication property cannot be accessed by skins, you must use this global attribute when you want your skin code to manage docking and undocking.


The Windows Media Player SDK setup package installs a sample that demonstrates applying a skin to the Windows Media Player control. See the RemoteSkin sample for more information.


Using the Windows Media Player Control in a C++ Program