void CDuiListBox::NotifySelChange( int nOldSel,int nNewSel ,UINT uMsg) { DUINMLBSELCHANGE nms; nms.hdr.code=DUINM_LBSELCHANGING; nms.hdr.hDuiWnd=m_hDuiWnd; nms.hdr.idFrom=GetCmdID(); nms.hdr.pszNameFrom=GetName(); nms.nOldSel=nOldSel; nms.nNewSel=nNewSel; nms.uMsg=uMsg; nms.uHoverID=0; if(S_OK!=DuiNotify((LPDUINMHDR)&nms)) return ; m_iSelItem=nNewSel; if(nOldSel!=-1) RedrawItem(nOldSel); if(m_iSelItem!=-1) RedrawItem(m_iSelItem); nms.hdr.idFrom=GetCmdID(); nms.hdr.code=DUINM_LBSELCHANGED; DuiNotify((LPDUINMHDR)&nms); }
BOOL CExtThemeSwitcherToolButton::PutToPopupMenu( CExtPopupMenuWnd * pPopup ) { ASSERT_VALID( this ); ASSERT( pPopup != NULL ); ASSERT( pPopup->GetSafeHwnd() == NULL ); ASSERT( CtrlGet() == NULL ); if( (GetStyle()&TBBS_HIDDEN) != 0 ) return TRUE; if( IsSeparator() ) return CExtBarButton::PutToPopupMenu( pPopup ); ASSERT( ! IsAbleToTrackMenu() ); CExtToolControlBar * pBar = GetBar(); ASSERT_VALID( pBar ); CExtCmdItem * pCmdItem = g_CmdManager->CmdGetPtr( g_CmdManager->ProfileNameFromWnd( pBar->GetSafeHwnd() ), GetCmdID( false ) ); ASSERT( pCmdItem != NULL ); HWND hWndCmdReceiver = pBar->GetSafeHwnd(); int nCheck = ( (GetStyle()&TBBS_CHECKED) != 0 ) ? 1 : 0; // const CExtCmdIcon & _icon = GetIcon(); CExtCmdIcon _icon; // CExtCmdIcon _cmdIconEmpty, * pCmdIcon = ((CExtThemeSwitcherToolControlBar*)pBar)->ThemeSwitcher_GetMenuIconByToolBarCmdID(GetCmdID(false)); // const CExtCmdIcon & _icon = ( pCmdIcon != NULL ) ? ( * pCmdIcon ) : _cmdIconEmpty; CExtSafeString strButtonText; if( (pPopup->TrackFlagsGet()&TPMX_PALETTE) == 0 ) strButtonText = pCmdItem->m_sMenuText; if( ! pPopup->ItemInsertCommand( ((CExtThemeSwitcherToolControlBar*)pBar)->ThemeSwitcher_GetMenuCmdIDByToolBarCmdID(GetCmdID( false )), //GetCmdID( false ), -1, strButtonText.IsEmpty() ? NULL : LPCTSTR(strButtonText), NULL, _icon, nCheck, hWndCmdReceiver ) ) { ASSERT( FALSE ); return FALSE; } CExtPopupMenuWnd::MENUITEMDATA & mi = pPopup->ItemGetInfo( pPopup->ItemGetCount() - 1 ); mi.Enable( IsEnabled() ); mi.SetNoCmdUI( true ); if( ! pCmdItem->m_sTipTool.IsEmpty() ) mi.SetCustomTip( LPCTSTR(pCmdItem->m_sTipTool) ); return TRUE; }
LRESULT CDuiScrollBar::NotifySbCode(UINT uCode,int nPos) { DUINMSCROLL nms; nms.hdr.code=DUINM_SCROLL; nms.hdr.hDuiWnd=m_hDuiWnd; nms.hdr.idFrom=GetCmdID(); nms.hdr.pszNameFrom=GetName(); nms.uSbCode=uCode; nms.pScrollBar=this; nms.nPos=nPos; nms.bVertical=IsVertical(); return DuiNotify((LPDUINMHDR)&nms); }
void CExtThemeSwitcherToolButton::OnDeliverCmd() { ASSERT_VALID( this ); CExtToolControlBar * pBar = GetBar(); ASSERT_VALID( pBar ); if( pBar->_OnHookButtonDeliverCmd( this ) ) return; if( pBar->OnDeliverCmd( this ) ) return; if( ! CExtCmdManager::IsCommand( GetCmdID(false) ) ) return; ((CExtThemeSwitcherToolControlBar*)pBar) -> ThemeSwitcher_OnButtonInvoke( this ); }
void CDuiHeaderCtrl::OnMouseMove( UINT nFlags,CPoint pt ) { if(m_bDragging || nFlags&MK_LBUTTON) { if(!m_bDragging) { m_bDragging=TRUE; if(IsItemHover(m_dwHitTest) && m_bItemSwapEnable) { m_dwDragTo=m_dwHitTest; CRect rcItem=GetItemRect(LOWORD(m_dwHitTest)); DrawDraggingState(m_dwDragTo); m_hDragImg=CreateDragImage(LOWORD(m_dwHitTest)); CPoint pt=m_ptClick-rcItem.TopLeft(); CDragWnd::BeginDrag(m_hDragImg,pt,0,128,LWA_ALPHA|LWA_COLORKEY); } } if(IsItemHover(m_dwHitTest)) { if(m_bItemSwapEnable) { DWORD dwDragTo=HitTest(pt); CPoint pt2(pt.x,m_ptClick.y); ClientToScreen(GetContainer()->GetHostHwnd(),&pt2); if(IsItemHover(dwDragTo) && m_dwDragTo!=dwDragTo) { m_dwDragTo=dwDragTo; DUITRACE(_T("\n!!! dragto %d"),LOWORD(dwDragTo)); DrawDraggingState(dwDragTo); } CDragWnd::DragMove(pt2); } }else if(m_dwHitTest!=-1) {//调节宽度 int cxNew=m_nAdjItemOldWidth+pt.x-m_ptClick.x; if(cxNew<0) cxNew=0; m_arrItems[LOWORD(m_dwHitTest)].cx=cxNew; NotifyInvalidate(); GetContainer()->DuiUpdateWindow();//立即更新窗口 //发出调节宽度消息 DUINMHDSIZECHANGING nm; nm.hdr.hDuiWnd=m_hDuiWnd; nm.hdr.code=DUINM_HDSIZECHANGING; nm.hdr.idFrom=GetCmdID(); nm.hdr.pszNameFrom=GetName(); nm.nWidth=cxNew; DuiNotify((LPDUINMHDR)&nm); } }else { DWORD dwHitTest=HitTest(pt); if(dwHitTest!=m_dwHitTest) { if(m_bSortHeader) { if(IsItemHover(m_dwHitTest)) { WORD iHover=LOWORD(m_dwHitTest); m_arrItems[iHover].state=0; RedrawItem(iHover); } if(IsItemHover(dwHitTest)) { WORD iHover=LOWORD(dwHitTest); m_arrItems[iHover].state=1;//hover RedrawItem(iHover); } } m_dwHitTest=dwHitTest; } } }
void CDuiHeaderCtrl::OnLButtonUp( UINT nFlags,CPoint pt ) { if(IsItemHover(m_dwHitTest)) { if(m_bDragging) {//拖动表头项 if(m_bItemSwapEnable) { CDragWnd::EndDrag(); DeleteObject(m_hDragImg); m_hDragImg=NULL; if(m_dwDragTo!=m_dwHitTest && IsItemHover(m_dwDragTo)) { DUIHDITEM t=m_arrItems[LOWORD(m_dwHitTest)]; m_arrItems.RemoveAt(LOWORD(m_dwHitTest)); int nPos=LOWORD(m_dwDragTo); if(nPos>LOWORD(m_dwHitTest)) nPos--;//要考虑将自己移除的影响 m_arrItems.InsertAt(LOWORD(m_dwDragTo),t); //发消息通知宿主表项位置发生变化 DUINMHDSWAP nm; nm.hdr.hDuiWnd=m_hDuiWnd; nm.hdr.code=DUINM_HDSWAP; nm.hdr.idFrom=GetCmdID(); nm.hdr.pszNameFrom=GetName(); nm.iOldIndex=LOWORD(m_dwHitTest); nm.iNewIndex=nPos; DuiNotify((LPDUINMHDR)&nm); } m_dwHitTest=HitTest(pt); m_dwDragTo=-1; NotifyInvalidate(); } }else {//点击表头项 if(m_bSortHeader) { m_arrItems[LOWORD(m_dwHitTest)].state=1;//hover RedrawItem(LOWORD(m_dwHitTest)); DUINMHDCLICK nm; nm.hdr.hDuiWnd=m_hDuiWnd; nm.hdr.code=DUINM_HDCLICK; nm.hdr.idFrom=GetCmdID(); nm.hdr.pszNameFrom=GetName(); nm.iItem=LOWORD(m_dwHitTest); DuiNotify((LPDUINMHDR)&nm); } } }else if(m_dwHitTest!=-1) {//调整表头宽度,发送一个调整完成消息 DUINMHDSIZECHANGED nm; nm.hdr.hDuiWnd=m_hDuiWnd; nm.hdr.code=DUINM_HDSIZECHANGED; nm.hdr.idFrom=GetCmdID(); nm.hdr.pszNameFrom=GetName(); nm.iItem=LOWORD(m_dwHitTest); nm.nWidth=m_arrItems[nm.iItem].cx; DuiNotify((LPDUINMHDR)&nm); } m_bDragging=FALSE; ReleaseDuiCapture(); }