#include #include #include #include #include #include ToolTip::ToolTip(GUIWindow &parentWindow,Style style,int controlID) : mNotifyHandler(this,&ToolTip::notifyHandler), mParentWindow(parentWindow), mhControlWnd(0), mControlID(controlID) { ::InitCommonControls(); mParentWindow.insertHandler(VectorHandler::NotifyHandler,&mNotifyHandler); createToolTip((int)style); } ToolTip::~ToolTip() { if(mhControlWnd){::DestroyWindow(mhControlWnd);mhControlWnd=0;} mParentWindow.removeHandler(VectorHandler::NotifyHandler,&mNotifyHandler); } ToolTip &ToolTip::operator=(const ToolTip &/*someToolTip*/) { // no implementation return *this; } void ToolTip::createToolTip(int style) { mhControlWnd=::CreateWindowEx(WS_EX_TOPMOST|WS_EX_STATICEDGE,TOOLTIPS_CLASS,"",WS_CHILD|WS_VISIBLE|style, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, mParentWindow,(HMENU)controlID(),mParentWindow.processInstance(),0); } void ToolTip::activate(WORD activate)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_ACTIVATE,(WPARAM)activate,(LPARAM)0); } WORD ToolTip::addTool(const PureToolInfo &somePureToolInfo)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_ADDTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } void ToolTip::delTool(const PureToolInfo &somePureToolInfo)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_DELTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } WORD ToolTip::enumTools(UINT indexTool,const PureToolInfo &somePureToolInfo)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_ENUMTOOLS,(WPARAM)indexTool,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } WORD ToolTip::getCurrentTool(PureToolInfo &somePureToolInfo)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_GETCURRENTTOOL,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } void ToolTip::getText(PureToolInfo &somePureToolInfo)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_GETTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } DWORD ToolTip::getToolCount(void)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLCOUNT,0,0L); } WORD ToolTip::getToolInfo(PureToolInfo &somePureToolInfo)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_GETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } WORD ToolTip::hitTest(const PureHitTestInfo &somePureHitTestInfo)const { if(!isOkay())return FALSE; return mParentWindow.sendMessage(mhControlWnd,TTM_HITTEST,0,(LPARAM)&((TTHITTESTINFO&)((PureHitTestInfo&)somePureHitTestInfo))); } void ToolTip::newToolInfo(const PureToolInfo &somePureToolInfo)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_NEWTOOLRECT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } void ToolTip::relayEvent(const WinMsg &someWinMsg)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_RELAYEVENT,0,(LPARAM)&((MSG&)((WinMsg&)someWinMsg))); } void ToolTip::setDelayTime(DelayFlag typeDelay,int timeDelay)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_SETDELAYTIME,(WPARAM)typeDelay,(LPARAM)timeDelay); } void ToolTip::setToolInfo(const PureToolInfo &somePureToolInfo)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_SETTOOLINFO,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } void ToolTip::updateTipText(const PureToolInfo &somePureToolInfo)const { if(!isOkay())return; mParentWindow.sendMessage(mhControlWnd,TTM_UPDATETIPTEXT,0,(LPARAM)&((TOOLINFO&)somePureToolInfo)); } HWND ToolTip::windowFromPoint(const GDIPoint &someGDIPoint)const { if(!isOkay())return (HWND)0; return (HWND)mParentWindow.sendMessage(mhControlWnd,TTM_WINDOWFROMPOINT,0,(LPARAM)&((POINT&)someGDIPoint)); } UINT ToolTip::controlID(void)const { return mControlID; } void ToolTip::controlID(UINT controlID) { mControlID=controlID; } WORD ToolTip::isOkay(void)const { return (mhControlWnd?TRUE:FALSE); } CallbackData::ReturnType ToolTip::notifyHandler(CallbackData &someCallbackData) { NMHDR &nmHdr=*((NMHDR*)someCallbackData.lParam()); if(controlID()==nmHdr.idFrom) { switch(nmHdr.code) { case TTN_NEEDTEXT : ::OutputDebugString("TTN_NEEDTEXT\n"); ttnNeedText(nmHdr); break; case TTN_POP : ::OutputDebugString("TTN_POP\n"); ttnPop(nmHdr); break; case TTN_SHOW : ::OutputDebugString("TTN_SHOW\n"); ttnShow(nmHdr); break; default : break; } } return (CallbackData::ReturnType)FALSE; } // *** virtuals void ToolTip::ttnNeedText(NMHDR &/*someNMHDR*/) { } void ToolTip::ttnPop(NMHDR &/*someNMHDR*/) { } void ToolTip::ttnShow(NMHDR &/*someNMHDR*/) { }