UserData *Container::allocateRecords(short num) { UserData *ud; PVOID pv; LONG additional_space = (LONG)(sizeof(UserData)-sizeof(RECORDCORE)); pv = WinSendMsg(cont,CM_ALLOCRECORD,MPFROMLONG(additional_space),MPFROMSHORT((short)num)); if (pv == NULL) { switch(WinGetLastError(hab)) { case PMERR_INSUFFICIENT_MEMORY: message("PMERR_INSUFFICIENT_MEMORY"); break; case PMERR_INVALID_PARAMETERS: message("PMERR_INVALID_PARAMETERS"); break; // default: // message("Unknown error in Container Allocation"); } ud = NULL; } else { ud = (UserData*)PVOIDFROMMR(pv); } return ud; }
UserData *Container::findSelectedRecord(UserData *after_this) { if (after_this == NULL) after_this = (UserData*)(PRECORDCORE)CMA_FIRST; PVOID pv; UserData *ud; pv = WinSendMsg(cont,CM_QUERYRECORDEMPHASIS,MPFROMP((PRECORDCORE)after_this),MPFROMLONG(CRA_SELECTED)); ud = (UserData*)PVOIDFROMMR(pv); return ud; }
bool wxListBox::OS2OnDraw ( WXDRAWITEMSTRUCT* pItem ) { POWNERITEM pDrawStruct = (POWNERITEM)pItem; LONG lItemID = pDrawStruct->idItem; int eAction = 0; int eStatus = 0; // // Only owner-drawn control should receive this message // wxCHECK(((m_windowStyle & wxLB_OWNERDRAW) == wxLB_OWNERDRAW), false); // // The item may be -1 for an empty listbox // if (lItemID == -1L) return false; wxListBoxItem* pData = (wxListBoxItem*)PVOIDFROMMR( ::WinSendMsg( GetHwnd() ,LM_QUERYITEMHANDLE ,MPFROMLONG(pDrawStruct->idItem) ,(MPARAM)0 ) ); wxCHECK(pData, false ); wxDC vDc; wxPoint pt1( pDrawStruct->rclItem.xLeft, pDrawStruct->rclItem.yTop ); wxPoint pt2( pDrawStruct->rclItem.xRight, pDrawStruct->rclItem.yBottom ); wxRect vRect( pt1, pt2 ); vDc.SetHPS(pDrawStruct->hps); if (pDrawStruct->fsAttribute == pDrawStruct->fsAttributeOld) { // // Entire Item needs to be redrawn (either it has reappeared from // behind another window or is being displayed for the first time // eAction = wxOwnerDrawn::wxODDrawAll; if (pDrawStruct->fsAttribute & MIA_HILITED) { // // If it is currently selected we let the system handle it // eStatus |= wxOwnerDrawn::wxODSelected; } if (pDrawStruct->fsAttribute & MIA_CHECKED) { // // If it is currently checked we draw our own // eStatus |= wxOwnerDrawn::wxODChecked; pDrawStruct->fsAttributeOld = pDrawStruct->fsAttribute &= ~MIA_CHECKED; } if (pDrawStruct->fsAttribute & MIA_DISABLED) { // // If it is currently disabled we let the system handle it // eStatus |= wxOwnerDrawn::wxODDisabled; } // // Don't really care about framed (indicationg focus) or NoDismiss // } else { if (pDrawStruct->fsAttribute & MIA_HILITED) { eAction = wxOwnerDrawn::wxODDrawAll; eStatus |= wxOwnerDrawn::wxODSelected; // // Keep the system from trying to highlight with its bogus colors // pDrawStruct->fsAttributeOld = pDrawStruct->fsAttribute &= ~MIA_HILITED; } else if (!(pDrawStruct->fsAttribute & MIA_HILITED)) { eAction = wxOwnerDrawn::wxODDrawAll; eStatus = 0; // // Keep the system from trying to highlight with its bogus colors // pDrawStruct->fsAttribute = pDrawStruct->fsAttributeOld &= ~MIA_HILITED; } else { // // For now we don't care about anything else // just ignore the entire message! // return true; } } return pData->OnDrawItem( vDc ,vRect ,(wxOwnerDrawn::wxODAction)eAction ,(wxOwnerDrawn::wxODStatus)eStatus ); } // end of wxListBox::OS2OnDraw
/*����������������������������������������������������������������������������*/ MRESULT FilterDlgProc( HWND hwnd, register ULONG message, MPARAM lParam1, MPARAM lParam2 ) { /*���������������������������������������������������������������������Ŀ*/ /*� Local Variables �*/ /*�����������������������������������������������������������������������*/ MRESULT dpResult = NULL; register USHORT pbSelected; CHAR sFilterItem[128]; PMSG_ITEM pMsg; static PSPY_DATA pSpyData = NULL; HWND hwndLB; /* HWND of message listbox */ /*����������������������������������������������������������������������Ŀ*/ /*� Process the message �*/ /*������������������������������������������������������������������������*/ switch (message) /* Switch off of the message ID */ { /*������������������������������������������������������������������Ŀ*/ /*� One of our pushbuttons was pressed... �*/ /*��������������������������������������������������������������������*/ case WM_COMMAND: switch( pbSelected = LOUSHORT( lParam1 ) ) { /*������������������������������������������������������������Ŀ*/ /*� Process selected items �*/ /*��������������������������������������������������������������*/ default: { USHORT curItem, /* current list item */ nSelected; /* Number of items selected */ MSG_COLOR color = GetColor( hwnd, pSpyData); /*����������������������������������������������������������Ŀ*/ /*� Obtain HWND of message listbox once for performance �*/ /*������������������������������������������������������������*/ hwndLB = WinWindowFromID(hwnd, IDD_FILTER); /************************************************************ * "Lock" the ListBox to minimize performance impact ************************************************************/ WinLockWindowUpdate(HWND_DESKTOP, /* Desktop */ hwndLB); /* Lockee */ /************************************************************ * Process the "selected" ListBox items ************************************************************/ for(nSelected = 0, /* Initialize */ curItem = SHORT1FROMMR(WinSendMsg(hwndLB, LM_QUERYSELECTION, MPFROMSHORT(LIT_FIRST), NULL) ); curItem != (USHORT)LIT_NONE; /* While */ nSelected++, /* Iterate */ curItem = SHORT1FROMMR(WinSendMsg(hwndLB, LM_QUERYSELECTION, MPFROMSHORT(curItem), NULL) ) ) { /*��������������������������������������������������������Ŀ*/ /*� Locate specific MSG item for this selected item �*/ /*����������������������������������������������������������*/ pMsg = PVOIDFROMMR( WinSendMsg(hwndLB, LM_QUERYITEMHANDLE, MPFROMSHORT(curItem), NULL) ); /*��������������������������������������������������������Ŀ*/ /*� Perform action on this selected item �*/ /*����������������������������������������������������������*/ switch( pbSelected ) { /********************************************************* * Delete this MSG's definition **********************************************************/ case ID_PB_F_DELETE: DeleteMsg(pSpyData, pMsg->Msg); WinSendMsg(hwndLB, LM_DELETEITEM, MPFROMSHORT(curItem), MPFROMP(NULL)); curItem = (USHORT)( (curItem == 0) ? LIT_FIRST : (curItem - 1) ); break; /********************************************************* * Mark that this MSG can NOT be "spied" / act as "trigger" **********************************************************/ case ID_PB_F_EXCLUDE: IncludeMsg(pSpyData, pMsg->Msg, BOOL_FALSE, color); WinSendMsg(hwndLB, LM_SETITEMTEXT, MPFROMSHORT(curItem), MPFROMP(FormatMSG(pMsg, sFilterItem))); break; /********************************************************* * Mark that this MSG can be "spied" / act as "trigger" **********************************************************/ case ID_PB_F_INCLUDE: IncludeMsg(pSpyData, pMsg->Msg, BOOL_TRUE, color); WinSendMsg(hwndLB, LM_SETITEMTEXT, MPFROMSHORT(curItem), MPFROMP(FormatMSG(pMsg, sFilterItem))); break; /********************************************************* * Set FREEZE "trigger" **********************************************************/ case ID_PB_F_FREEZE: pMsg->TriggerFreeze = BOOL_TRUE; pMsg->TriggerThaw = BOOL_FALSE; WinSendMsg(hwndLB, LM_SETITEMTEXT, MPFROMSHORT(curItem), MPFROMP(FormatMSG(pMsg, sFilterItem))); if (color != Color_Asis) pMsg->ClrFG = color; break; /********************************************************* * Set THAW "trigger" **********************************************************/ case ID_PB_F_THAW: pMsg->TriggerThaw = BOOL_TRUE; pMsg->TriggerFreeze = BOOL_FALSE; WinSendMsg(hwndLB, LM_SETITEMTEXT, MPFROMSHORT(curItem), MPFROMP(FormatMSG(pMsg, sFilterItem))); if (color != Color_Asis) pMsg->ClrFG = color; break; /********************************************************* * Remove FREEZE and THAW "triggers" **********************************************************/ case ID_PB_F_NO_TRIGGER: pMsg->TriggerFreeze = pMsg->TriggerThaw = BOOL_FALSE; WinSendMsg(hwndLB, LM_SETITEMTEXT, MPFROMSHORT(curItem), MPFROMP(FormatMSG(pMsg, sFilterItem))); if (color != Color_Asis) pMsg->ClrFG = color; break; /********************************************************* * Reset MSG unique data **********************************************************/ case ID_PB_F_RESET: pMsg->aulTimes[MSG_TIMES_SINCE] = 0; if (color != Color_Asis) pMsg->ClrFG = color; break; } } /************************************************************ * Finally, "unlock" the ListBox so it is only redrawn once ************************************************************/ WinLockWindowUpdate(HWND_DESKTOP, NULLHANDLE); /************************************************************ * Make "noise" if no items were selected... ************************************************************/ if (nSelected == 0) WinAlarm(HWND_DESKTOP, WA_ERROR); } break; /*������������������������������������������������������������Ŀ*/ /*� User cancelled dialog �*/ /*��������������������������������������������������������������*/ case DID_CANCEL: WinDismissDlg(hwnd, 0); /* Close dialog */ break; } break; /* Break WM_COMMAND */ /*������������������������������������������������������������������Ŀ*/ /*� WM_CLOSE: �*/ /*� - Call WinDismissDlg to close the dialog box �*/ /*��������������������������������������������������������������������*/ case WM_CLOSE: /* Close Dialog Box. */ WinDismissDlg( hwnd, 0); break; /*������������������������������������������������������������������Ŀ*/ /*� WM_INITDLG: �*/ /*� - Init pointer to data pointed to by WinDlgBox �*/ /*� - Init global handle of this dlg �*/ /*� �*/ /*� - MP2 = PSPY_DATA �*/ /*��������������������������������������������������������������������*/ case WM_INITDLG: { register USHORT list_index; /*�����������������������������������������������������������Ŀ*/ /*� Locate "SPY" data to utilize �*/ /*�������������������������������������������������������������*/ pSpyData = PVOIDFROMMP(lParam2); /*�����������������������������������������������������������Ŀ*/ /*� Obtain HWND of message listbox once for performance �*/ /*�������������������������������������������������������������*/ hwndLB = WinWindowFromID(hwnd, IDD_FILTER); /*������������������������������������������������������������Ŀ*/ /*� Set listbox FONT to current non-proportional value �*/ /*��������������������������������������������������������������*/ SetListboxFont(hwndLB, (PSZ) pSpyData->pfnLB); /************************************************************ * "Lock" the ListBox to minimize performance impact ************************************************************/ WinLockWindowUpdate(HWND_DESKTOP, /* Desktop */ hwndLB); /* Lockee */ /*�����������������������������������������������������������Ŀ*/ /*� Add all Messages to list box �*/ /*�������������������������������������������������������������*/ for( /* Initialize */ pMsg = ProcessFirstMsg(pSpyData); /* start @ first MSG */ /* Terminate */ pMsg != NULL; /* stop at End-Of-Table */ /* Iterate */ pMsg = ProcessNextMsg(pSpyData) /* try the next MSG */ ) { list_index = (USHORT) WinSendMsg(hwndLB, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING), MPFROMP(FormatMSG(pMsg, sFilterItem)) ); WinSendMsg(hwndLB, /* Window Handle */ LM_SETITEMHANDLE, /* Message */ MPFROMSHORT(list_index), /* Index of list item */ MPFROMP(pMsg)); /* Handle of list item */ } /************************************************************ * Finally, "unlock" the ListBox so it is only redrawn once ************************************************************/ WinLockWindowUpdate(HWND_DESKTOP, NULLHANDLE); /************************************************************ * Other dialog set-up ************************************************************/ SetColors( hwnd, pSpyData ); /* load colors */ CenterDialog(hwnd); /* Center the Dialog */ } break; /*������������������������������������������������������������������Ŀ*/ /*� We don't need to handle any other messages... �*/ /*� �*/ /*� If this isn't an IPF message, let PM do it's default "thing" �*/ /*��������������������������������������������������������������������*/ default: if ( !HandleIPF(hwnd, message, lParam1, lParam2, &dpResult) ) dpResult = WinDefDlgProc(hwnd, /* Dialog Handle */ message, /* Message */ lParam1, /* First parameter for message. */ lParam2); /* Second parameter for message.*/ } /* End MSG switch */ /*�����������������������������������������������������������������������Ŀ*/ /*� Exit �*/ /*�������������������������������������������������������������������������*/ return( dpResult ); }