The following sample illustrates the class interface definition file (IDL):
#ifndef wpstyler_idl
#define wpstyler_idl
#include <wpabs.idl>
#include <somcls.idl>
interface M_Styler;
interface Styler : WPAbstract
{
ULONG InsertObjectStylePage(in HWND hwndDlg);
// Override: InsertObjectStylePage
//
// Description:
// Insert the Styler page into the Settings notebook.
ULONG QueryObjectStyle(in HWND hwndDlg);
// Override: QueryObjectStyle
//
// Description:
// Query the object's title and current style.
// Set the Styler Settings page checkboxes and MLE.
VOID SetObjectStyle(in HWND hwndDlg);
// Override: SetObjectStyle
//
// Description:
// Query the current checkbox state and set
// the object's style accordingly.
#ifdef __SOMIDL__
implementation
{
releaseorder: InsertObjectStylePage,QueryObjectStyle,SetObjectStyle;
/*
* Class modifiers
*/
functionprefix = Sty_;
majorversion = 1;
minorversion = 2;
filestem = wpstyler;
metaclass = M_Styler;
callstyle = oidl;
dllname = "wpstyler.dll";
/*
* Internal instance variables
*/
BOOL fGeneralPage; // Display the General page if true
ULONG ulStyle; // Save the style flags
WPObject self; // Save the self pointer of dropped object
/*
* Passthru to the .IH file the following:
*/
passthru C_ih =
"#define INCL_PM"
"#define INCL_DOS"
"#define INCL_DEV"
"#define INCL_WPCLASS"
"#define INCL_WINWORKPLACE"
"#include <os2.h>"
"#include <stdlib.h>"
"#include <string.h>"
"#include \"wpstyler.rch\""
"#include <somobj.h>"
""
"#define OPEN_STYLER (OPEN_USER+1)"
""
"#define MPNULL (MPFROMP(NULL))"
"#define MPZERO (MPFROMSHORT(0))"
"#define MRTRUE (MRFROMSHORT((SHORT) TRUE))"
"#define MRFALSE (MRFROMSHORT((SHORT) FALSE))"
""
"#define BM_UNCHECKED 0 // Parms in BM_SETCHECK message"
"#define BM_CHECKED 1 // to set or clear the radio buttons"
""
"#define PMWinSetDlgItemChecked(hwnd, id, bCheck)\"
" (WinSendDlgItemMsg((hwnd), (id), BM_SETCHECK,\"
" ((bCheck) ? MPFROMSHORT(1) : MPZERO), MPNULL))"
""
"#define PMWinIsDlgItemChecked(hwnd, id)\"
" (SHORT1FROMMR(WinSendDlgItemMsg((hwnd), (id),\"
" BM_QUERYCHECK, MPNULL, MPNULL)) != 0)"
""
"#define WinSetDialogFont(hwnd, usId, szFont)\"
" (WinSetPresParam(WinWindowFromID(hwnd, usId),\"
" PP_FONTNAMESIZE, (ULONG) strlen(szFont)+1, szFont))"
"";
/*
* Method modifiers
*/
wpInitData: override;
// Override: wpInitData
//
// Description:
// Initialize the state variables. Allocate any extra
// memory that WPStyler might need.
wpDragOver: override;
// Method: wpDragOver
//
// Description:
// Allow any object to be dropped on the Styler.
wpDrop: override;
// Method: wpDrop
//
// Description:
// Query the self pointer of dropped object.
// Call wpOpen to open the Settings notebook
// and display the styles.
wpOpen: override;
// Method: wpOpen
//
// Description:
// Opens the Settings notebook to display the General page
// for the Styler object.
wpAddSettingsPages: override;
// Method: wpAddSettingsPages
//
// Description:
// Add the Styler Settings page to let the user alter
// the styles of any object that is dropped onto us.
wpAddObjectWindowPage: override;
// Method: wpAddObjectWindowPage
//
// Description:
// Remove the Window page.
wpAddObjectGeneralPage: override;
// Method: wpAddObjectGeneralPage
//
// Description:
// Remove the General page when the Styler
// page is displayed.
};
#endif /* __SOMIDL__ */
};
interface M_Styler : M_WPAbstract
{
HMODULE clsQueryModuleHandle();
// Method: clsQueryModuleHandle
//
// Description:
// Return the module handle.
#ifdef __SOMIDL__
implementation
{
releaseorder: clsQueryModuleHandle;
/*
* Class modifiers
*/
functionprefix = StyM_;
majorversion = 1;
minorversion = 2;
filestem = wpstyler;
callstyle = oidl;
dllname = "wpstyler.dll";
/*
* Internal instance variables
*/
HMODULE hmod; /* Resource module handle */
HPOINTER hicon; /* Icon handle */
/*
* Method modifiers
*/
wpclsInitData: override;
// Method: wpclsInitData
//
// Description:
// Initalize the class data, query and save the module handle.
// Load the icon handle.
wpclsQueryIcon: override;
// Method: wpclsQueryIcon
//
// Description:
// Set the Stylers icon handle.
wpclsQueryStyle: override;
// Method: wpclsQueryStyle
//
// Description:
// wpclsQueryStyle is called to allow the class object to
// specify the default object class style for its instances.
//
// Remarks:
// This method can be called at any time in order to determine the
// default style for instances of this class.
// This method should be overridden in order to modify the default
// object style for instances of this class.
wpclsQueryDefaultHelp: override;
// Method: wpclsQueryDefaultHelp
//
// Description:
// Set the help library name and default help ID.
wpclsQueryDefaultView: override;
// Method: wpclsQueryDefaultView
//
// Description:
// Return the default view for a new instance of this object.
// Tell the system what the Styler's default view is.
};
#endif /* __SOMIDL__ */
};
#endif /* wpstyler_idl */