This functionality is supported only if you are using the Classic Agent.
An owner-draw list/combo box is a list/combo box that has the owner-draw style bit set. This is distinct from a custom object that looks like a standard list/combo box, but is not.
The following procedure describes how developers can modify an application so that Silk Test Classic can access the text of a standard list/combo box that is owner-draw and that does not have the HasStrings style bit turned on. (If the HasStrings style bit of the owner-draw list/combo box is turned on, then you do not need to make the modifications described here.) The procedure entails modifying each owner-draw list/combo box’s parent window procedure so that Silk Test Classic can query the parent about what is in the list/combo box.
To turn on the HasStrings style bit of the owner-draw list/combo box:
For each owner-draw list/combo box, add a message handler for each of the messages in owndraw.h (ODA_HASTEXT, ODA_GETITEMTEXT, ODA_GETITEMTEXTSIZE). Base the message handlers on the 'switch' statement cases below. If writing in C, add code, such as that shown below, to its parent s WndProc.
LONG FAR PASCAL ListParentWndProc (HWND hWnd, UINT uiMsg,WPARAM wParam, LPARAM lParam)
{
//Use a static for the registered message number
static UINT uiMsgGetItem Text = 0;
LPGETITEMTEXTSTRUCT LpGetItemText;
USHORT usItem;
PSZ pszItemText;
//Register the QAP_GETITEMTEXT message if it is not registered
if (uiMsgGetItem Text == 0)
uiMsgGetItemText = RegisterWindowMessage("QAP_GETITEMTEXT");
switch (uiMsg)
{
...
default;
//Process the QAP_GETITEMTEXT message
if (uiMsg == uiMsgGetItemText)
{
//lParam points to a LPGETITEMTEXTSTRUCT structure
lpGetItemText = (LPGETITEMTEXTSTRUCT) lParam;
//Perform the requested action
switch (lpGetItemText->Action)
{
case ODA_HASTEXT:
//Tell the QAP driver if your list box contains text
if (your list box has text)
lpGetItemText->bSuccess = TRUE;
else
lpGetItemText->bSuccess = FALSE;
break;
case ODA_GETITEMTEXT:
//Return the text for the requested list item
//(lpGetItemText->itemID is the index of the item in the
//list/combo box -- the same number passed to LB_GETITEMDATA
(for a list box) or CB_ GETITEMDATA (for a combo box))
usItem = UINT (lpGetItemText->itemID);
pszItemText = <pointer to text of item[usItem]>;
strncpy (lpGetItemText->lpstrItemText, pszItemText,
lpGetItemText->nMaxItemText);
lpGetItemText->lpstrItemText[lpGetItemText->nMaxItemText-1]
= ‘\0’;
lpGetItemText->bSuccess = TRUE;
break;
case ODA_GETITEMTEXTSIZE:
//Return the length of the requested list item
usItem = UINT (lpGetItemText->itemID);
lpGetItemText->nMaxItemText = <length of item[usItem]> + 1;
lpGetItemText->bSuccess = TRUE;
break;
...
}
}
}
}