#include WORD VectorHandler::insertHandler(HandlerType handlerType,PureCallback *lpCallback,CallOrder callOrder) { WORD returnCode(0); switch(handlerType) { case ChangeCBChainHandler : returnCode=insert(mChangeCBChainVector,lpCallback,callOrder); break; case DrawClipboardHandler : returnCode=insert(mDrawClipboardVector,lpCallback,callOrder); break; case UserHandler : returnCode=insert(mUserVector,lpCallback,callOrder); break; case NCCreateHandler : returnCode=insert(mNCCreateVector,lpCallback,callOrder); break; case CreateHandler : returnCode=insert(mCreateVector,lpCallback,callOrder); break; case InitDialogHandler : returnCode=insert(mInitDialogVector,lpCallback,callOrder); break; case SetFontHandler : returnCode=insert(mSetFontVector,lpCallback,callOrder); break; case SizeHandler : returnCode=insert(mSizeVector,lpCallback,callOrder); break; case PaintHandler : returnCode=insert(mPaintVector,lpCallback,callOrder); break; case EraseBackgroundHandler : returnCode=insert(mEraseBackgroundVector,lpCallback,callOrder); break; case PaletteChangedHandler : returnCode=insert(mPaletteChangedVector,lpCallback,callOrder); break; case TimerHandler : returnCode=insert(mTimerVector,lpCallback,callOrder)-1; break; case CharHandler : returnCode=insert(mCharVector,lpCallback,callOrder); break; case CommandHandler : returnCode=insert(mCommandVector,lpCallback,callOrder); break; case CompactingHandler : returnCode=insert(mCompactingVector,lpCallback,callOrder); break; case WinIniChangeHandler : returnCode=insert(mWinIniChangeVector,lpCallback,callOrder); break; case LeftButtonDoubleHandler : returnCode=insert(mLeftButtonDoubleVector,lpCallback,callOrder); break; case LeftButtonDownHandler : returnCode=insert(mLeftButtonDownVector,lpCallback,callOrder); break; case LeftButtonUpHandler : returnCode=insert(mLeftButtonUpVector,lpCallback,callOrder); break; case RightButtonDoubleHandler : returnCode=insert(mRightButtonDoubleVector,lpCallback,callOrder); break; case RightButtonDownHandler : returnCode=insert(mRightButtonDownVector,lpCallback,callOrder); break; case RightButtonUpHandler : returnCode=insert(mRightButtonUpVector,lpCallback,callOrder); break; case NCLeftButtonDownHandler : returnCode=insert(mNCLeftButtonDownVector,lpCallback,callOrder); break; case NCLeftButtonUpHandler : returnCode=insert(mNCLeftButtonUpVector,lpCallback,callOrder); break; case NCRightButtonDownHandler : returnCode=insert(mNCRightButtonDownVector,lpCallback,callOrder); break; case NCRightButtonUpHandler : returnCode=insert(mNCRightButtonUpVector,lpCallback,callOrder); break; case SetFocusHandler : returnCode=insert(mSetFocusVector,lpCallback,callOrder); break; case KillFocusHandler : returnCode=insert(mKillFocusVector,lpCallback,callOrder); break; case KeyUpHandler : returnCode=insert(mKeyUpVector,lpCallback,callOrder); break; case KeyDownHandler : returnCode=insert(mKeyDownVector,lpCallback,callOrder); break; case SysKeyDownHandler : returnCode=insert(mSysKeyDownVector,lpCallback,callOrder); break; case SysKeyUpHandler : returnCode=insert(mSysKeyUpVector,lpCallback,callOrder); break; case MinMaxHandler : returnCode=insert(mMinMaxVector,lpCallback,callOrder); break; case EnterIdleHandler : returnCode=insert(mEnterIdleVector,lpCallback,callOrder); break; case MenuSelectHandler : returnCode=insert(mMenuSelectVector,lpCallback,callOrder); break; case DrawItemHandler : returnCode=insert(mDrawItemVector,lpCallback,callOrder); break; case SysColorChangeHandler : returnCode=insert(mSysColorChangeVector,lpCallback,callOrder); break; case CloseHandler : returnCode=insert(mCloseVector,lpCallback,callOrder); break; case MouseMoveHandler : returnCode=insert(mMouseMoveVector,lpCallback,callOrder); break; case ControlColorHandler : returnCode=insert(mControlColorVector,lpCallback,callOrder); break; case NotifyHandler : returnCode=insert(mNotifyVector,lpCallback,callOrder); break; case DDEInitiateHandler : returnCode=insert(mDDEInitiateVector,lpCallback,callOrder); break; case DDEAckHandler : returnCode=insert(mDDEAckVector,lpCallback,callOrder); break; case DDERequestHandler : returnCode=insert(mDDERequestVector,lpCallback,callOrder); break; case DDETerminateHandler : returnCode=insert(mDDETerminateVector,lpCallback,callOrder); break; case DDEDataHandler : returnCode=insert(mDDEDataVector,lpCallback,callOrder); break; case MeasureItemHandler : returnCode=insert(mMeasureItemVector,lpCallback,callOrder); break; case MMOpenHandler : returnCode=insert(mMMOpenVector,lpCallback,callOrder); break; case MMCloseHandler : returnCode=insert(mMMCloseVector,lpCallback,callOrder); break; case MMDoneHandler : returnCode=insert(mMMDoneVector,lpCallback,callOrder); break; case DialogCodeHandler : returnCode=insert(mDialogCodeVector,lpCallback,callOrder); break; case NCDestroyHandler : returnCode=insert(mNCDestroyVector,lpCallback,callOrder); break; case DestroyHandler : returnCode=insert(mDestroyVector,lpCallback,callOrder); break; case VerticalScrollHandler : returnCode=insert(mVerticalScrollVector,lpCallback,callOrder); break; case HorizontalScrollHandler : returnCode=insert(mHorizontalScrollVector,lpCallback,callOrder); break; case DropFilesHandler : returnCode=insert(mDropFilesVector,lpCallback,callOrder); break; case MDIActivateHandler : returnCode=insert(mMDIActivateVector,lpCallback,callOrder); break; case MDIDestroyHandler : returnCode=insert(mMDIDestroyVector,lpCallback,callOrder); break; case QueryEndSessionHandler : returnCode=insert(mQueryEndSessionVector,lpCallback,callOrder); break; case ActivateAppHandler : returnCode=insert(mActivateAppVector,lpCallback,callOrder); break; case DisplayChangeHandler : returnCode=insert(mDisplayChangeVector,lpCallback,callOrder); break; case ShowWindowHandler : returnCode=insert(mShowWindowVector,lpCallback,callOrder); break; case CaptureChangedHandler : returnCode=insert(mCaptureChangedVector,lpCallback,callOrder); break; case DeviceChangeHandler : returnCode=insert(mDeviceChangeVector,lpCallback,callOrder); } return returnCode; } CallbackData::ReturnType VectorHandler::callHandlers(HandlerType handlerType,CallbackData someCallbackData) { CallbackData::ReturnType returnCode; switch(handlerType) { case ChangeCBChainHandler : if(!handlers(mChangeCBChainVector))returnCode=TRUE; else returnCode=callHandler(mChangeCBChainVector,someCallbackData); break; case DrawClipboardHandler : if(!handlers(mDrawClipboardVector))returnCode=TRUE; else returnCode=callHandler(mDrawClipboardVector,someCallbackData); break; case UserHandler : if(!handlers(mUserVector))returnCode=TRUE; else returnCode=callHandler(mUserVector,someCallbackData); break; case NCCreateHandler : if(!handlers(mNCCreateVector))returnCode=TRUE; else returnCode=callHandler(mNCCreateVector,someCallbackData); break; case CreateHandler : returnCode=callHandler(mCreateVector,someCallbackData); break; case InitDialogHandler : returnCode=callHandler(mInitDialogVector,someCallbackData); break; case SetFontHandler : returnCode=callHandler(mSetFontVector,someCallbackData); break; case PaintHandler : returnCode=callHandler(mPaintVector,someCallbackData); break; case EraseBackgroundHandler : returnCode=callHandler(mEraseBackgroundVector,someCallbackData); break; case PaletteChangedHandler : returnCode=callHandler(mPaletteChangedVector,someCallbackData); break; case TimerHandler : returnCode=mTimerVector[someCallbackData.wParam()].callback(someCallbackData); break; case CharHandler : returnCode=callHandler(mCharVector,someCallbackData); break; case SizeHandler : returnCode=callHandler(mSizeVector,someCallbackData); break; case CommandHandler : returnCode=callHandler(mCommandVector,someCallbackData); break; case CompactingHandler : returnCode=callHandler(mCompactingVector,someCallbackData); break; case LeftButtonDoubleHandler : returnCode=callHandler(mLeftButtonDoubleVector,someCallbackData); break; case LeftButtonDownHandler : returnCode=callHandler(mLeftButtonDownVector,someCallbackData); break; case LeftButtonUpHandler : returnCode=callHandler(mLeftButtonUpVector,someCallbackData); break; case RightButtonDoubleHandler : returnCode=callHandler(mRightButtonDoubleVector,someCallbackData); break; case RightButtonUpHandler : returnCode=callHandler(mRightButtonUpVector,someCallbackData); break; case RightButtonDownHandler : returnCode=callHandler(mRightButtonDownVector,someCallbackData); break; case NCLeftButtonDownHandler : returnCode=callHandler(mNCLeftButtonDownVector,someCallbackData); break; case NCLeftButtonUpHandler : returnCode=callHandler(mNCLeftButtonUpVector,someCallbackData); break; case NCRightButtonDownHandler : returnCode=callHandler(mNCRightButtonDownVector,someCallbackData); break; case NCRightButtonUpHandler : returnCode=callHandler(mNCRightButtonUpVector,someCallbackData); break; case WinIniChangeHandler : returnCode=callHandler(mWinIniChangeVector,someCallbackData); break; case SysColorChangeHandler : returnCode=callHandler(mSysColorChangeVector,someCallbackData); break; case SetFocusHandler : returnCode=callHandler(mSetFocusVector,someCallbackData); break; case KillFocusHandler : returnCode=callHandler(mKillFocusVector,someCallbackData); break; case KeyUpHandler : returnCode=callHandler(mKeyUpVector,someCallbackData); break; case KeyDownHandler : returnCode=callHandler(mKeyDownVector,someCallbackData); break; case SysKeyDownHandler : returnCode=callHandler(mSysKeyDownVector,someCallbackData); break; case SysKeyUpHandler : returnCode=callHandler(mSysKeyUpVector,someCallbackData); break; case MinMaxHandler : returnCode=callHandler(mMinMaxVector,someCallbackData); break; case EnterIdleHandler : returnCode=callHandler(mEnterIdleVector,someCallbackData); break; case MenuSelectHandler : returnCode=callHandler(mMenuSelectVector,someCallbackData); break; case DrawItemHandler : returnCode=callHandler(mDrawItemVector,someCallbackData); break; case MouseMoveHandler : returnCode=callHandler(mMouseMoveVector,someCallbackData); break; case ControlColorHandler : returnCode=callHandler(mControlColorVector,someCallbackData); break; case NotifyHandler : returnCode=callHandler(mNotifyVector,someCallbackData); break; case MeasureItemHandler : returnCode=callHandler(mMeasureItemVector,someCallbackData); break; case DDEInitiateHandler : returnCode=callHandler(mDDEInitiateVector,someCallbackData); break; case DDEAckHandler : returnCode=callHandler(mDDEAckVector,someCallbackData); break; case DDERequestHandler : returnCode=callHandler(mDDERequestVector,someCallbackData); break; case DDETerminateHandler : returnCode=callHandler(mDDETerminateVector,someCallbackData); break; case DDEDataHandler : returnCode=callHandler(mDDEDataVector,someCallbackData); break; case MMOpenHandler : returnCode=callHandler(mMMOpenVector,someCallbackData); break; case MMCloseHandler : returnCode=callHandler(mMMCloseVector,someCallbackData); break; case MMDoneHandler : returnCode=callHandler(mMMDoneVector,someCallbackData); break; case CloseHandler : returnCode=callHandler(mCloseVector,someCallbackData); break; case DialogCodeHandler : returnCode=callHandler(mDialogCodeVector,someCallbackData); break; case DestroyHandler : returnCode=callHandler(mDestroyVector,someCallbackData); break; case NCDestroyHandler : returnCode=callHandler(mNCDestroyVector,someCallbackData); break; case HorizontalScrollHandler : returnCode=callHandler(mHorizontalScrollVector,someCallbackData); break; case VerticalScrollHandler : returnCode=callHandler(mVerticalScrollVector,someCallbackData); break; case DropFilesHandler : returnCode=callHandler(mDropFilesVector,someCallbackData); break; case MDIActivateHandler : returnCode=callHandler(mMDIActivateVector,someCallbackData); break; case MDIDestroyHandler : returnCode=callHandler(mMDIDestroyVector,someCallbackData); break; case QueryEndSessionHandler : returnCode=callHandler(mQueryEndSessionVector,someCallbackData); break; case ActivateAppHandler : returnCode=callHandler(mActivateAppVector,someCallbackData); break; case DisplayChangeHandler : returnCode=callHandler(mDisplayChangeVector,someCallbackData); break; case ShowWindowHandler : returnCode=callHandler(mShowWindowVector,someCallbackData); break; case CaptureChangedHandler : returnCode=callHandler(mCaptureChangedVector,someCallbackData); break; case DeviceChangeHandler : returnCode=callHandler(mDeviceChangeVector,someCallbackData); } return returnCode; } CallbackData::ReturnType VectorHandler::callHandler(Block &someCallbackVector,CallbackData &someCallbackData) { size_t size((size_t)someCallbackVector.size()); CallbackData::ReturnType returnCode(0); CallbackData::ReturnType callReturn; for(int vectorIndex=0;vectorIndex<(int)size;vectorIndex++) { if(FALSE!=(callReturn=someCallbackVector[vectorIndex].callback(someCallbackData)))returnCode=callReturn; size=(size_t)someCallbackVector.size(); } return returnCode; } void VectorHandler::removeHandler(HandlerType handlerType,PureCallback *lpCallback) { CallbackPointer callbackPointer(lpCallback); switch(handlerType) { case ChangeCBChainHandler : removeHandler(mChangeCBChainVector,callbackPointer); break; case DrawClipboardHandler : removeHandler(mDrawClipboardVector,callbackPointer); break; case UserHandler : removeHandler(mUserVector,callbackPointer); break; case NCCreateHandler : removeHandler(mNCCreateVector,callbackPointer); break; case CreateHandler : removeHandler(mCreateVector,callbackPointer); break; case InitDialogHandler : removeHandler(mInitDialogVector,callbackPointer); break; case SetFontHandler : removeHandler(mSetFontVector,callbackPointer); break; case TimerHandler : removeHandler(mTimerVector,callbackPointer); break; case CharHandler : removeHandler(mCharVector,callbackPointer); break; case SizeHandler : removeHandler(mSizeVector,callbackPointer); break; case CompactingHandler : removeHandler(mCompactingVector,callbackPointer); break; case WinIniChangeHandler : removeHandler(mWinIniChangeVector,callbackPointer); break; case SysColorChangeHandler : removeHandler(mSysColorChangeVector,callbackPointer); break; case LeftButtonDoubleHandler : removeHandler(mLeftButtonDoubleVector,callbackPointer); break; case LeftButtonDownHandler : removeHandler(mLeftButtonDownVector,callbackPointer); break; case LeftButtonUpHandler : removeHandler(mLeftButtonUpVector,callbackPointer); break; case RightButtonDoubleHandler : removeHandler(mRightButtonDoubleVector,callbackPointer); break; case RightButtonDownHandler : removeHandler(mRightButtonDownVector,callbackPointer); break; case RightButtonUpHandler : removeHandler(mRightButtonUpVector,callbackPointer); break; case NCLeftButtonDownHandler : removeHandler(mNCLeftButtonDownVector,callbackPointer); break; case NCLeftButtonUpHandler : removeHandler(mNCLeftButtonUpVector,callbackPointer); break; case NCRightButtonDownHandler : removeHandler(mNCRightButtonDownVector,callbackPointer); break; case NCRightButtonUpHandler : removeHandler(mNCRightButtonUpVector,callbackPointer); break; case PaintHandler : removeHandler(mPaintVector,callbackPointer); break; case EraseBackgroundHandler : removeHandler(mEraseBackgroundVector,callbackPointer); break; case PaletteChangedHandler : removeHandler(mPaletteChangedVector,callbackPointer); break; case CommandHandler : removeHandler(mCommandVector,callbackPointer); break; case SetFocusHandler : removeHandler(mSetFocusVector,callbackPointer); break; case KillFocusHandler : removeHandler(mKillFocusVector,callbackPointer); break; case KeyUpHandler : removeHandler(mKeyUpVector,callbackPointer); break; case KeyDownHandler : removeHandler(mKeyDownVector,callbackPointer); break; case SysKeyUpHandler : removeHandler(mSysKeyUpVector,callbackPointer); break; case SysKeyDownHandler : removeHandler(mSysKeyDownVector,callbackPointer); break; case MinMaxHandler : removeHandler(mMinMaxVector,callbackPointer); break; case EnterIdleHandler : removeHandler(mEnterIdleVector,callbackPointer); break; case DrawItemHandler : removeHandler(mDrawItemVector,callbackPointer); break; case ControlColorHandler : removeHandler(mControlColorVector,callbackPointer); break; case NotifyHandler : removeHandler(mNotifyVector,callbackPointer); break; case MenuSelectHandler : removeHandler(mMenuSelectVector,callbackPointer); break; case MeasureItemHandler : removeHandler(mMeasureItemVector,callbackPointer); break; case DDEInitiateHandler : removeHandler(mDDEInitiateVector,callbackPointer); break; case DDEAckHandler : removeHandler(mDDEAckVector,callbackPointer); break; case DDERequestHandler : removeHandler(mDDERequestVector,callbackPointer); break; case DDETerminateHandler : removeHandler(mDDETerminateVector,callbackPointer); break; case DDEDataHandler : removeHandler(mDDEDataVector,callbackPointer); break; case MMOpenHandler : removeHandler(mMMOpenVector,callbackPointer); break; case MMCloseHandler : removeHandler(mMMCloseVector,callbackPointer); break; case MMDoneHandler : removeHandler(mMMDoneVector,callbackPointer); break; case CloseHandler : removeHandler(mCloseVector,callbackPointer); break; case MouseMoveHandler : removeHandler(mMouseMoveVector,callbackPointer); break; case DialogCodeHandler : removeHandler(mDialogCodeVector,callbackPointer); break; case DestroyHandler : removeHandler(mDestroyVector,callbackPointer); break; case NCDestroyHandler : removeHandler(mNCDestroyVector,callbackPointer); break; case HorizontalScrollHandler : removeHandler(mHorizontalScrollVector,callbackPointer); break; case VerticalScrollHandler : removeHandler(mVerticalScrollVector,callbackPointer); break; case DropFilesHandler : removeHandler(mDropFilesVector,callbackPointer); break; case MDIActivateHandler : removeHandler(mMDIActivateVector,callbackPointer); break; case MDIDestroyHandler : removeHandler(mMDIDestroyVector,callbackPointer); break; case QueryEndSessionHandler : removeHandler(mQueryEndSessionVector,callbackPointer); break; case ActivateAppHandler : removeHandler(mActivateAppVector,callbackPointer); break; case DisplayChangeHandler : removeHandler(mDisplayChangeVector,callbackPointer); break; case ShowWindowHandler : removeHandler(mShowWindowVector,callbackPointer); break; case CaptureChangedHandler : removeHandler(mCaptureChangedVector,callbackPointer); break; case DeviceChangeHandler : removeHandler(mDeviceChangeVector,callbackPointer); break; } } void VectorHandler::removeHandler(Block &someCallbackVector,CallbackPointer &locatePointer) { size_t size((size_t)someCallbackVector.size()); for(int vectorIndex=0;vectorIndex<(int)size;vectorIndex++) { if(someCallbackVector[vectorIndex]==locatePointer) { someCallbackVector.remove(vectorIndex); size=(size_t)someCallbackVector.size(); vectorIndex=-1; } } } WORD VectorHandler::installedHandlers(HandlerType handlerType)const { switch(handlerType) { case ChangeCBChainHandler : return (WORD)mChangeCBChainVector.size(); case DrawClipboardHandler : return (WORD)mDrawClipboardVector.size(); case UserHandler : return (WORD)mUserVector.size(); case NCCreateHandler : return (WORD)mNCCreateVector.size(); case CreateHandler : return (WORD)mCreateVector.size(); case InitDialogHandler : return (WORD)mInitDialogVector.size(); case SetFontHandler : return (WORD)mSetFontVector.size(); case TimerHandler : return (WORD)mTimerVector.size(); case SizeHandler : return (WORD)mSizeVector.size(); case CompactingHandler : return (WORD)mCompactingVector.size(); case WinIniChangeHandler : return (WORD)mWinIniChangeVector.size(); case SysColorChangeHandler : return (WORD)mSysColorChangeVector.size(); case LeftButtonDoubleHandler : return (WORD)mLeftButtonDoubleVector.size(); case LeftButtonDownHandler : return (WORD)mLeftButtonDownVector.size(); case LeftButtonUpHandler : return (WORD)mLeftButtonUpVector.size(); case RightButtonDoubleHandler : return (WORD)mRightButtonDoubleVector.size(); case RightButtonUpHandler : return (WORD)mRightButtonUpVector.size(); case RightButtonDownHandler : return mRightButtonDownVector.size(); case NCLeftButtonDownHandler : return mNCLeftButtonDownVector.size(); case NCLeftButtonUpHandler : return mNCLeftButtonUpVector.size(); case NCRightButtonDownHandler : return mNCRightButtonDownVector.size(); case NCRightButtonUpHandler : return mNCRightButtonUpVector.size(); case PaintHandler : return (WORD)mPaintVector.size(); case EraseBackgroundHandler : return mEraseBackgroundVector.size(); case PaletteChangedHandler : return mPaletteChangedVector.size(); case CommandHandler : return (WORD)mCommandVector.size(); case SetFocusHandler : return (WORD)mSetFocusVector.size(); case KillFocusHandler : return (WORD)mKillFocusVector.size(); case MeasureItemHandler : return (WORD)mMeasureItemVector.size(); case KeyUpHandler : return (WORD)mKeyUpVector.size(); case KeyDownHandler : return (WORD)mKeyDownVector.size(); case SysKeyDownHandler : return (WORD)mSysKeyDownVector.size(); case SysKeyUpHandler : return (WORD)mSysKeyUpVector.size(); case CharHandler : return (WORD)mCharVector.size(); case MinMaxHandler : return (WORD)mMinMaxVector.size(); case EnterIdleHandler : return (WORD)mEnterIdleVector.size(); case MenuSelectHandler : return (WORD)mMenuSelectVector.size(); case DrawItemHandler : return (WORD)mDrawItemVector.size(); case NotifyHandler : return (WORD)mNotifyVector.size(); case DDEInitiateHandler : return (WORD)mDDEInitiateVector.size(); case DDEAckHandler : return (WORD)mDDEAckVector.size(); case DDERequestHandler : return (WORD)mDDERequestVector.size(); case DDETerminateHandler : return (WORD)mDDETerminateVector.size(); case DDEDataHandler : return (WORD)mDDEDataVector.size(); case MMOpenHandler : return (WORD)mMMOpenVector.size(); case MMCloseHandler : return (WORD)mMMCloseVector.size(); case MMDoneHandler : return (WORD)mMMDoneVector.size(); case ControlColorHandler : return (WORD)mControlColorVector.size(); case MouseMoveHandler : return (WORD)mMouseMoveVector.size(); case CloseHandler : return (WORD)mCloseVector.size(); case DialogCodeHandler : return (WORD)mDialogCodeVector.size(); case DestroyHandler : return (WORD)mDestroyVector.size(); case NCDestroyHandler : return (WORD)mNCDestroyVector.size(); case HorizontalScrollHandler : return (WORD)mHorizontalScrollVector.size(); case VerticalScrollHandler : return (WORD)mVerticalScrollVector.size(); case DropFilesHandler : return (WORD)mDropFilesVector.size(); case MDIActivateHandler : return (WORD)mMDIActivateVector.size(); case MDIDestroyHandler : return (WORD)mMDIDestroyVector.size(); case QueryEndSessionHandler : return (WORD)mQueryEndSessionVector.size(); case ActivateAppHandler : return (WORD)mActivateAppVector.size(); case DisplayChangeHandler : return (WORD)mActivateAppVector.size(); case ShowWindowHandler : return (WORD)mShowWindowVector.size(); case CaptureChangedHandler : return (WORD)mCaptureChangedVector.size(); case DeviceChangeHandler : return (WORD)mDeviceChangeVector.size(); default : return 0; } } WORD VectorHandler::insert(Block &someHandlerBlock,PureCallback *lpCallback,CallOrder callOrder) { if(FirstHandler==callOrder&&someHandlerBlock.size()) { CallbackPointer firstCallback(someHandlerBlock[0]); CallbackPointer callback(lpCallback); someHandlerBlock[0]=callback; // someHandlerBlock[0]=CallbackPointer(lpCallback); someHandlerBlock.insert(&firstCallback); } // else someHandlerBlock.insert(&CallbackPointer(lpCallback)); else someHandlerBlock.insert(new CallbackPointer(lpCallback)); return (WORD)someHandlerBlock.size(); }