void CListViewCtrlEx::OnMouseMove(UINT nFlags, CPoint point)
{
    TRACKMOUSEEVENT trkMouse;
    trkMouse.cbSize = sizeof( TRACKMOUSEEVENT );
    trkMouse.dwFlags = TME_LEAVE;
    trkMouse.hwndTrack = m_hWnd;

    // notify when the mouse leaves button
    _TrackMouseEvent( &trkMouse );

    CRect	rcItem;

    LVHITTESTINFO hti;
    hti.pt = point;
    SubItemHitTest( &hti );

    if( m_nHoverItem != hti.iItem || m_nHoverSubItem != hti.iSubItem)
    {
        m_nHoverItem = hti.iItem;
        m_nHoverSubItem = hti.iSubItem;
        _FireEvent(WMH_LISTEX_HOVERCHANGED, m_nHoverItem);

        KillTimer(XX_TIMER_ID_TIPS);
        //CBkSafeTip::Hide();
    }

    static CPoint ptLast;
    if (ptLast != point && hti.iItem != -1)
        SetTimer(XX_TIMER_ID_TIPS, 200);

    ptLast = point;
}
Example #2
0
void CHappyGoDlg::OnMouseMove(UINT nFlags, CPoint point) 
 {
	 if (! ::g_global.bEnableUserType)
	 {
		 return CListCtrl::OnMouseMove(nFlags, point);;
	 }
      CString str;
      LVHITTESTINFO lvhti;

     // 判断鼠标当前所在的位置(行, 列)
     lvhti.pt = point;    
     SubItemHitTest(&lvhti);
	 if (lvhti.iItem == -1)
	 {
		 m_toolTip.Activate(false);
	 }

     // 如果鼠标移动到另一个单元格内, 则进行处理; 否则, 不做处理
	 if((lvhti.iItem != m_nItem))
     {
         // 保存当前鼠标所在的(行,列)
         m_nItem = lvhti.iItem;
         m_nSubItem = lvhti.iSubItem;

         // 如果鼠标移动到一个合法的单元格内,则显示新的提示信息
         if((m_nItem != -1) && (m_nSubItem == 0))
         {
			 m_toolTip.DelTool(this);
			 UserItemStruct * pUserItem=(UserItemStruct *)GetItemData(m_nItem);
			 CString strType="玩家类型:";
			 int nType = pUserItem->GameUserInfo.userType;
			 m_toolTip.SetTipTextColor(RGB(255,0,0));
			 if (nType ==1)
			 {
				 strType += "电视比赛玩家";
			 }
			 else if (nType == 2)
			 {
				 strType += "VIP玩家";
			 }
			 else if (nType == 3)
			 {
				 strType += "电视比赛VIP玩家";
			 }
			 else
			 {
				  strType += "普通玩家";
				  m_toolTip.SetTipTextColor(RGB(0,0,255));
			 }               
             m_toolTip.AddTool(this, strType);
			 m_toolTip.UpdateTipText(strType,this);
			 m_toolTip.Update();
             // 显示提示框
			 m_toolTip.Activate(true);
         }
		 else
			 return;
     }
     CListCtrl::OnMouseMove(nFlags, point);
 }
BOOL CCPListCtrl::PreTranslateMessage(MSG *pMsg)
{
  if (pMsg->message == WM_LBUTTONDOWN) {
    // Get cell position for CustomDraw
    CPoint pt(pMsg->pt);
    ScreenToClient(&pt);
    LVHITTESTINFO htinfo = {0};
    htinfo.pt = pt;
    int index = SubItemHitTest(&htinfo);
    // Ignore any clicks not on an item or not on cloumn 0 or 1
    if (index != -1 &&
        (htinfo.iSubItem == 0 || htinfo.iSubItem == 1) &&
        !(htinfo.flags & (LVHT_NOWHERE |
                          LVHT_ABOVE   | LVHT_BELOW |
                          LVHT_TORIGHT | LVHT_TOLEFT))) {
      if ((GetKeyState(VK_CONTROL) & 0x8000) && m_column != htinfo.iSubItem) {
        //  Multi-select - can't change column
        return TRUE;
      }
      m_row = htinfo.iItem;
      m_column = htinfo.iSubItem;
    }
  }
  return CListCtrl::PreTranslateMessage(pMsg);
} 
Example #4
0
void CListEditCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	LVHITTESTINFO hi;
	hi.pt = point;

	if(SubItemHitTest(&hi) != -1)
	{
		m_Row = hi.iItem;
		m_Col = hi.iSubItem;
		if(m_EditItem.m_hWnd == NULL)
		{
			RECT rect;
			rect.left = rect.top = 0;
			rect.bottom = 20;
			rect.right = 100;
			m_EditItem.Create(WS_CHILD | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL | ES_WANTRETURN | ES_MULTILINE, rect, this, IDC_MY_LIST_EDITBOX);
			m_EditItem.SetFont(this->GetFont(), FALSE);
		}
		CRect rect;
		GetSubItemRect(hi.iItem, hi.iSubItem, LVIR_BOUNDS, rect);
		m_EditItem.SetWindowText(this->GetItemText(hi.iItem, hi.iSubItem));
		m_EditItem.MoveWindow(&rect, TRUE);
		m_EditItem.ShowWindow(1);
	}
	CListCtrl::OnLButtonDblClk(nFlags, point);
}
void CListControlEx::OnLButtonDown( UINT nFlags, CPoint point )
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CListCtrl::OnLButtonDown(nFlags, point);
	CRect rcCtrl;
	LVHITTESTINFO lvhti;
	lvhti.pt = point;
	m_nItem =SubItemHitTest(&lvhti);
	if (m_nItem == -1) return;
	m_nSubItem = lvhti.iSubItem;
	GetSubItemRect(m_nItem,m_nSubItem,LVIR_LABEL,rcCtrl);
	if (m_Edit_ctlItem.m_hWnd == NULL)
	{
		m_Edit_ctlItem.Create(ES_AUTOHSCROLL|WS_CHILD|ES_LEFT|ES_WANTRETURN|WS_BORDER,CRect(0,0,0,0),this,99);
		m_Edit_ctlItem.ShowWindow(SW_HIDE);

		m_FontItem.CreateStockObject(DEFAULT_GUI_FONT);
		m_Edit_ctlItem.SetFont(&m_FontItem);
		m_FontItem.DeleteObject();

	}
	CString strItem=GetItemText(m_nItem,m_nSubItem);
	m_Edit_ctlItem.MoveWindow(&rcCtrl);
	m_Edit_ctlItem.ShowWindow(SW_SHOW);
	m_Edit_ctlItem.SetWindowText(strItem);
	m_Edit_ctlItem.SetFocus();
	m_Edit_ctlItem.SetSel(-1); 
}
Example #6
0
void CReportCtrlEx2::_MouseClkMonitor(UINT nMsg, UINT nFlags, CPoint point, BOOL bTriggerEdit)
{
	LVHITTESTINFO hti;
	hti.pt = point;
	const int IDX = SubItemHitTest(&hti);
	const BOOL BEFORE = CListCtrl::GetCheck(IDX) > 0;
	const BOOL WAS_EDIT = _IsEditVisible();
	EndItem(TRUE);
	const BOOL WASACTIVE = bTriggerEdit ? ExamItemStates(IDX, RC_ITEM_FOCUSED | RC_ITEM_SELECTED) : FALSE;

	switch (nMsg)
	{
	case WM_LBUTTONDOWN:
		CListCtrl::OnLButtonDown(nFlags, point);
		break;

	case WM_LBUTTONDBLCLK:
		CListCtrl::OnLButtonDblClk(nFlags, point);
		break;

	case WM_MBUTTONDOWN:
		CListCtrl::OnMButtonDown(nFlags, point);
		break;

	case WM_MBUTTONDBLCLK:
		CListCtrl::OnMButtonDblClk(nFlags, point);
		break;

	case WM_RBUTTONDOWN:
		CListCtrl::OnRButtonDown(nFlags, point);
		break;

	case WM_RBUTTONDBLCLK:
		CListCtrl::OnRButtonDblClk(nFlags, point);
		break;

	default:
		break;		
	}
	
	const BOOL STATSCHANGED = _ItemCheckMonitor(IDX, BEFORE, CListCtrl::GetCheck(IDX) > 0, nMsg);

	if (bTriggerEdit && m_bAllowEdit && !STATSCHANGED && !WAS_EDIT && WASACTIVE)
	{
		if (hti.iSubItem == 4 || hti.iSubItem == 5)
		{
			m_bEdit = FALSE;
			StartDateTimeCtrl(IDX, hti.iSubItem);
		}
		else
		{
			m_bEdit = TRUE;
			StartEdit(IDX, hti.iSubItem);
		}
	}
}
Example #7
0
BOOL CWaitingUserList::OnToolNeedText( UINT id, NMHDR* pNMHDR, LRESULT* pResult )
{
	CRect rc;
	GetWindowRect(&rc);
	CPoint pot;
	GetCursorPos(&pot);
	pot.x = pot.x - rc.left;
	pot.y = pot.y - rc.top;

	LVHITTESTINFO LVHTestInfo;
	LVHTestInfo.pt = pot;
	HitTest(&LVHTestInfo);
	int iItem = LVHTestInfo.iItem;//获得行
	SubItemHitTest(&LVHTestInfo);
	int iSubItem = LVHTestInfo.iSubItem;//获得列	

	if (iItem >= 0 && iItem < GetItemCount())
	{
		IUserItem * pUserItem = (IUserItem*)GetItemData(iItem);//获取该选中项信息

		if (pUserItem != NULL && pUserItem->GetUserUIN() != 0)
		{
			int columnCount = GetHeaderCtrl()->GetItemCount();//获得总列数
			if (iSubItem >= 0 && iSubItem < columnCount)
			{	
				if (iSubItem < 4)
				{
					std::wstring strTip;
					if (iSubItem == 1)
					{
						strTip = ListIconManager::GetIconTipByIndex(USERLIST_ICON_WAIT_MIC);
					}
					else
					{
						strTip = ListIconManager::GetIconTipByIndex(pUserItem->GetListIconIndex(iSubItem));
					}
					if (strTip != L"")
					{
						TOOLTIPTEXTW* pTT = (TOOLTIPTEXT*) pNMHDR;
						wcscpy(pTT->szText,strTip.c_str());
					}
				}
				else if (4 == iSubItem)//昵称
				{//显示相关信息
					std::wstring strName = pUserItem->GetUserName() + L"(" + common::utility::stringhelper::IntToString(pUserItem->GetUser179ID()) + L")";
					TOOLTIPTEXTW* pTT = (TOOLTIPTEXT*) pNMHDR;
					wcscpy(pTT->szText,strName.c_str());
				}
			}
		}
	}

	*pResult = 1;

	return TRUE;
}
Example #8
0
BOOL CSubTooltipListCtrl::OnToolTipText(UINT /*id*/, NMHDR * pNMHDR, LRESULT * pResult)
{
    if (pProvider == NULL)
        return FALSE;

    TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;

    // Ignore messages from the built in tooltip, we are processing them internally
    if( (pNMHDR->idFrom == (UINT_PTR)m_hWnd) &&
        ( ((pNMHDR->code == TTN_NEEDTEXTA) && (pTTTA->uFlags & TTF_IDISHWND)) ||
        ((pNMHDR->code == TTN_NEEDTEXTW) && (pTTTW->uFlags & TTF_IDISHWND)) ) )
    {
        return FALSE;
    }

    *pResult = 0;

    //Get the mouse position
    const MSG* pMessage = GetCurrentMessage();

    CPoint pt;
    pt = pMessage->pt;
    ScreenToClient(&pt);

    // Check if the point falls onto a list item
    LVHITTESTINFO lvhitTestInfo;
    lvhitTestInfo.pt = pt;

    int nItem = SubItemHitTest(&lvhitTestInfo);

    if (lvhitTestInfo.flags & LVHT_ONITEM)
    {
        // we want multiline tooltips
        ::SendMessage(pNMHDR->hwndFrom, TTM_SETMAXTIPWIDTH, 0, INT_MAX);
        CString strTipText = pProvider->GetToolTipText(nItem, lvhitTestInfo.iSubItem);

        //Deal with UNICODE
#ifndef _UNICODE
        if (pNMHDR->code == TTN_NEEDTEXTA)
            StringCchCopy(pTTTA->szText, _countof(pTTTA->szText), strTipText);
        else
            _mbstowcsz(pTTTW->szText, strTipText, 80);
#else
        if (pNMHDR->code == TTN_NEEDTEXTA)
            _wcstombsz(pTTTA->szText, strTipText, 80);
        else
            StringCchCopy(pTTTW->szText, _countof(pTTTW->szText), strTipText);
#endif
        return TRUE;    //We found a tool tip,
        //tell the framework this message has been handled
    }

    return FALSE; //We didn't handle the message,
    //let the framework continue propagating the message
}
void CListControlEx::OnLButtonDblClk( UINT nFlags, CPoint point )
{
	
	LVHITTESTINFO lvhti;
	lvhti.pt = point;
	int nItem = SubItemHitTest(&lvhti);
	if (nItem == -1)//插入一行
	{
		InsertItem(GetItemCount()+1,L"");
	}
	
}
Example #10
0
void CWatchList::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	SetFocus();

	LVHITTESTINFO lvhti;
	lvhti.pt = point;
	SubItemHitTest(&lvhti);

	if (lvhti.flags & LVHT_ONITEMLABEL)
		EditLabel(lvhti.iItem);
	else
		CCJListCtrl::OnLButtonDblClk(nFlags, point);
}
Example #11
0
BOOL CListViewCtrlEx::OnSetCursor(CWindow wnd, UINT nHitTest, UINT message)
{
    CPoint pt;
    GetCursorPos( &pt );
    ScreenToClient( &pt );

    LVHITTESTINFO hti;
    hti.pt = pt;
    SubItemHitTest( &hti );
    bool bInLink = _PtInSubItemLink(pt, hti.iItem, hti.iSubItem);
    ::SetCursor(::LoadCursor(NULL, bInLink?IDC_HAND:IDC_ARROW));
    return TRUE;
}
Example #12
0
BOOL CSListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NMITEMACTIVATE* pNMActivate = (NMITEMACTIVATE*)pNMHDR;
	*pResult = 0;

	int nItem = -1;
	
	//+++
	LVHITTESTINFO lvhit;
	lvhit.pt = pNMActivate->ptAction;
	SubItemHitTest(&lvhit);
	if (lvhit.flags & LVHT_ONITEM)
	{
		nItem = lvhit.iItem;
	}
	
	if(nItem != -1)
	{	
		CRect rect;
		int nSubItem = -1;
		
		// check if a subitem checkbox was clicked
		for (int i = 0; i < GetHeaderCtrl()->GetItemCount(); i++)
		{
			GetSubItemRect(nItem, i, LVIR_BOUNDS, rect);
			if (rect.PtInRect(pNMActivate->ptAction))
			{
				nSubItem = i;
				break;
			}
		}
		
		if (nSubItem != -1)
		{
			int nChecked = GetItemCheckedState(nItem, nSubItem);
			if (nChecked != SHC_NONE_CHECK_BOX && IsPtInSubItemCheckBox(nItem, nSubItem, pNMActivate->ptAction))
			{
				nChecked = SwitchCheckedState(nChecked);
				
				SetItemCheckedStateByClick(nItem, nSubItem, nChecked, TRUE);
			}
		}
	}

	return FALSE;
}
Example #13
0
// CHgzListCtrl 消息处理程序
void CHgzListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	BOOL bSelected = FALSE;

	// 得到被点击的Item
	LVHITTESTINFO testinfo;
	testinfo.pt = point;                  //点击时的鼠标位置
	//testinfo.flags = LVHT_ONITEM;    //点击的必须不是标题
	if( SubItemHitTest(&testinfo)<0 )
		goto defalt_session;            //没有点在有效区域,不进入编辑
		
	// 检查是否有Item正被编辑
	if (m_bEditing == TRUE) { 
		if (m_nItem == testinfo.iItem && m_nSubItem == testinfo.iSubItem)
			goto defalt_session;
		else
			EndEdit(TRUE);
	}
	
	int m = m_nItem;
	int n = m_nSubItem;
	m_nItem = testinfo.iItem;            //被点击表项的行号
	m_nSubItem = testinfo.iSubItem;    //被点击表项的列号

	Update(m);

	if(m_nSubItem == 0) {
		bSelected = IsItemSelected(m_nItem) && GetSelectedCount() == 1;
		goto defalt_session;            //点中第一列,不编辑
	}

	// 开始编辑
	CListCtrl::OnLButtonDown(nFlags, point);
	m_bEditing = BeginEdit();
	return;

defalt_session:
	CListCtrl::OnLButtonDown(nFlags, point);

	if (m_nSubItem == 0 && bSelected) {
		SetItemState(m_nItem, 0, LVIS_SELECTED);
		SetItemState(m_nItem, 0, LVIS_FOCUSED);
	}
}
Example #14
0
void CUploadListCtrl::OnLvnGetInfoTip(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);
    if (pGetInfoTip->iSubItem == 0)
    {
        LVHITTESTINFO hti = {0};
        ::GetCursorPos(&hti.pt);
        ScreenToClient(&hti.pt);
        if (SubItemHitTest(&hti) == -1 || hti.iItem != pGetInfoTip->iItem || hti.iSubItem != 0) {
            // don't show the default label tip for the main item, if the mouse is not over the main item
            if ((pGetInfoTip->dwFlags & LVGIT_UNFOLDED) == 0 && pGetInfoTip->cchTextMax > 0 && pGetInfoTip->pszText[0] != _T('\0'))
                pGetInfoTip->pszText[0] = _T('\0');
            return;
        }

        const CUpDownClient* client = (CUpDownClient*)GetItemData(pGetInfoTip->iItem);
        if (client && pGetInfoTip->pszText && pGetInfoTip->cchTextMax > 0)
        {
            CString strInfo;
            strInfo.Format(GetResString(IDS_USERINFO), client->GetUserName());
            // ==> requpfile optimization [SiRoB] - Stulle
            /*
            const CKnownFile* file = theApp.sharedfiles->GetFileByID(client->GetUploadFileID());
            */
            const CKnownFile* file = client->CheckAndGetReqUpFile();
            // <== requpfile optimization [SiRoB] - Stulle
            if (file)
            {
                strInfo += GetResString(IDS_SF_REQUESTED) + _T(' ') + file->GetFileName() + _T('\n');
                strInfo.AppendFormat(GetResString(IDS_FILESTATS_SESSION) + GetResString(IDS_FILESTATS_TOTAL),
                                     file->statistic.GetAccepts(), file->statistic.GetRequests(), CastItoXBytes(file->statistic.GetTransferred(), false, false),
                                     file->statistic.GetAllTimeAccepts(), file->statistic.GetAllTimeRequests(), CastItoXBytes(file->statistic.GetAllTimeTransferred(), false, false));
            }
            else
            {
                strInfo += GetResString(IDS_REQ_UNKNOWNFILE);
            }
            strInfo += TOOLTIP_AUTOFORMAT_SUFFIX_CH;
            _tcsncpy(pGetInfoTip->pszText, strInfo, pGetInfoTip->cchTextMax);
            pGetInfoTip->pszText[pGetInfoTip->cchTextMax-1] = _T('\0');
        }
    }
    *pResult = 0;
}
Example #15
0
void CUploadListCtrl::OnLvnGetInfoTip(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);

	if (pGetInfoTip->iSubItem == 0)
	{
		LVHITTESTINFO hti = {0};
		::GetCursorPos(&hti.pt);
		ScreenToClient(&hti.pt);
		if (SubItemHitTest(&hti) == -1 || hti.iItem != pGetInfoTip->iItem || hti.iSubItem != 0){
			// don' show the default label tip for the main item, if the mouse is not over the main item
			if ((pGetInfoTip->dwFlags & LVGIT_UNFOLDED) == 0 && pGetInfoTip->cchTextMax > 0 && pGetInfoTip->pszText[0] != '\0')
				pGetInfoTip->pszText[0] = '\0';
			return;
		}

		const CUpDownClient* client = (CUpDownClient*)GetItemData(pGetInfoTip->iItem);
		if (client && pGetInfoTip->pszText && pGetInfoTip->cchTextMax > 0)
		{
			CString info;

			CKnownFile* file = theApp.sharedfiles->GetFileByID(client->GetUploadFileID());
			// build info text and display it
			info.Format(GetResString(IDS_USERINFO), client->GetUserName());
			if (file)
			{
				info += GetResString(IDS_SF_REQUESTED) + _T(" ") + CString(file->GetFileName()) + _T("\n");
				CString stat;
				stat.Format(GetResString(IDS_FILESTATS_SESSION)+GetResString(IDS_FILESTATS_TOTAL),
							file->statistic.GetAccepts(), file->statistic.GetRequests(), CastItoXBytes(file->statistic.GetTransferred(), false, false),
							file->statistic.GetAllTimeAccepts(), file->statistic.GetAllTimeRequests(), CastItoXBytes(file->statistic.GetAllTimeTransferred(), false, false) );
				info += stat;
			}
			else
			{
				info += GetResString(IDS_REQ_UNKNOWNFILE);
			}

			_tcsncpy(pGetInfoTip->pszText, info, pGetInfoTip->cchTextMax);
			pGetInfoTip->pszText[pGetInfoTip->cchTextMax-1] = _T('\0');
		}
	}
	*pResult = 0;
}
Example #16
0
void CEditableListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	CListCtrl::OnLButtonDown(nFlags, point);

	LVHITTESTINFO hti = {0};
	hti.pt = point;
	if (SubItemHitTest(&hti) == -1)
		return;

	int iItem = hti.iItem;
	int iSubItem = hti.iSubItem;
	if (iItem == -1 || iSubItem == -1)
		return;

	CRect rect;
	GetSubItemRect(iItem, iSubItem, LVIR_LABEL, rect);
	ClientToScreen(rect);

	CPoint pt(rect.right, rect.bottom);
	CRect rc;
	GetWindowRect(rc);
	if (!rc.PtInRect(pt))
		SendMessage(WM_VSCROLL, SB_LINEDOWN, 0);

	pt.x = rect.left;
	pt.y = rect.top;
	if (!rc.PtInRect(pt))
		SendMessage(WM_VSCROLL, SB_LINEUP, 0);

	m_iRow = iItem;
	m_iCol = iSubItem;

	switch (m_iCol)
	{
		case 0:
			m_iCol = 1;
			ShowEditCtrl();
			break;
		case 1:
			ShowEditCtrl();
			break;
	}
}
void CEditListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	m_bFocus = TRUE;

	LVHITTESTINFO  lvhit;
	lvhit.pt = point;
	int item = SubItemHitTest(&lvhit);
	
	//if (over a item/subitem)
	if (item != -1 && (lvhit.flags & LVHT_ONITEM))
	{
		CListCtrl::OnLButtonDown(nFlags, point);
		
		if(m_bHighLight && m_iItem == lvhit.iItem && m_iSubItem == lvhit.iSubItem && (m_iSubItem==1 || m_iSubItem==2))//在这里只编辑坐标点
		{
			//第二次单击
			EditLabel(m_iItem);
			return;
		}
		else
		{
			//第一次单击
			m_iItem = lvhit.iItem;
			m_iSubItem = lvhit.iSubItem;
			m_bHighLight = TRUE;
		}
	}
	else
	{
		if(m_edtItemEdit.m_hWnd == NULL)
		{
			//未出现文本编辑框时
			m_bHighLight = FALSE;
		}
		
		CListCtrl::OnLButtonDown(nFlags, point);
	}
	
	Invalidate();
}
Example #18
0
/*===========================================================================
 *
 * Class CSrBatchListCtrl Event - void OnLButtonDown (nFlags, Point);
 *
 *=========================================================================*/
void CSrBatchListCtrl::OnLButtonDown (UINT nFlags, CPoint Point) {
  LVHITTESTINFO HitTest;
  int		Result;

  CListCtrl::OnLButtonDown(nFlags, Point);

  HitTest.pt    = Point;
  HitTest.flags = 0;
  HitTest.iItem = -1;

  Result = SubItemHitTest(&HitTest);

  if (Result < 0) {
    GetParent()->SendMessage(ID_BATCHEDIT_MSG_UPDATE, -1, 0);
    return;
  }
  
  SetItem(Result, 0, LVIF_STATE, "", 0, LVIS_SELECTED, LVIS_SELECTED, 0);
  GetParent()->SendMessage(ID_BATCHEDIT_MSG_UPDATE, Result, 0);
}
Example #19
0
BOOL CRichListCtrl::PreTranslateMessage(MSG* pMsg)
{
	if(pMsg->message == WM_LBUTTONUP)
	{
		int nBtnID = GetWindowLong(pMsg->hwnd,GWL_ID); 
		POINT pt;
		GetCursorPos(&pt);
		ScreenToClient(&pt);
		LVHITTESTINFO hitInfo;
		hitInfo.pt=pt;
		SubItemHitTest(&hitInfo);
		if (GetItemType(hitInfo.iItem, hitInfo.iSubItem) == CTRL_BUTTON)
		{
			this->GetParent()->SendMessage(WM_RICHLISTCTRL_MESSGAE, WM_RICHLS_CLICK_BUTTON, (LPARAM)&hitInfo); 
			return TRUE;
		}
	}

	return CListCtrl::PreTranslateMessage(pMsg);
}
Example #20
0
void CListCtrlEx::OnMouseMove(UINT nFlags, CPoint point)
{
	DWORD dwPos=GetMessagePos();
	CPoint point1( LOWORD(dwPos), HIWORD(dwPos));

	ScreenToClient(&point1);


	LVHITTESTINFO lvinfo;
	lvinfo.pt=point;
	lvinfo.flags=LVHT_ABOVE;


	int nItem=SubItemHitTest(&lvinfo);
	if(nItem!=-1  && lvinfo.iSubItem >= 0 && m_HandOverList.Find(lvinfo.iSubItem))
	{
		SetCursor(m_hCursor);
	}

    CListCtrl::OnMouseMove(nFlags, point);
}
Example #21
0
void CEditTable::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	
	POSITION pos;
	BOOL bSelected = FALSE;
	if( m_bEditing ==TRUE)
	goto defalt_session;	// 检查是否有Item被选中,没有时不进入编辑
	pos = GetFirstSelectedItemPosition();
	if( pos )
	{
		// 得到被点击的Item
		LVHITTESTINFO testinfo;
		testinfo.pt.x = point.x;
		testinfo.pt.y = point.y;            //点击时的鼠标位置
		testinfo.flags = LVHT_ONITEMLABEL;    
		if( SubItemHitTest(&testinfo)<0 )    //点击的必须是标题
			goto defalt_session;            //没有点在有效区域,不进入编辑
		m_nItem = testinfo.iItem;            //被点击表项的行号
		m_nSubItem = testinfo.iSubItem;    //被点击表项的列号
		if(m_nSubItem == 0)
		{
		goto defalt_session;            //选中第一列,不编辑
		}
		// 检查该表项是否被选中,没被选中不进入编辑
		while( pos )
			if( m_nItem==GetNextSelectedItem(pos) )
			{
				bSelected = TRUE;
				break;
			}
			if( bSelected==FALSE )
				goto defalt_session;            //没有点在有效区域,不编辑
			// 开始编辑
			m_bEditing = BeginEdit();
			return;
	}
defalt_session:
	CListCtrl::OnLButtonDblClk(nFlags, point);
}
Example #22
0
void CListViewCtrlEx::OnTimer(UINT_PTR nIDEvent)
{
    if (nIDEvent == XX_TIMER_ID_TIPS)
    {
        CPoint	ptx;
        CPoint	ptxbak;
        ::GetCursorPos(&ptx);
        ptxbak		= ptx;
        ptxbak.y	-= 25;
        ScreenToClient(&ptx);

        LVHITTESTINFO hti;
        hti.pt = ptx;
        SubItemHitTest( &hti );

        const TListItem* pItem = _GetItemData( hti.iItem );
        //if (pItem && hti.iSubItem >= 0 && hti.iSubItem < pItem->subItems.size())
        //	CBkSafeTip::Show(pItem->subItems[hti.iSubItem].str, ptxbak, m_hWnd);

        KillTimer(nIDEvent);
    }
}
afx_msg void CCtlPendingOrders::OnLButtonUp( UINT nFlags, CPoint point ) {

  CListCtrl::OnLButtonUp(nFlags, point);

  LVHITTESTINFO Info;
  Info.pt = point;
  //if( ( index = HitTest( point, NULL )) != -1 ) {
          //SetItemState( index, LVIS_SELECTED | LVIS_FOCUSED , 
          //                LVIS_SELECTED | LVIS_FOCUSED);
  //}
  SubItemHitTest( &Info );
//  CString s;
//  s.Format( "item %d, subitem %d", Info.iItem, Info.iSubItem );
//  theApp.pConsoleMessages->WriteLine( s );
  if ( -1 != Info.iItem ) {
    if ( IXACTION == Info.iSubItem ) {
      if ( NULL != OnCancel ) {
        OnCancel( GetItemData( Info.iItem ) );
      }
    }
  }
}
Example #24
0
void CMyListCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
	LVHITTESTINFO	lvhit;
	lvhit.pt = point;
	int item = SubItemHitTest(&lvhit);

	//if (over a subitem)
	if (item != -1 && lvhit.iSubItem && (lvhit.flags & LVHT_ONITEM ))
	{
		//mouse click outside the editbox in an allready editing cell cancels editing
		if (m_subitem == lvhit.iSubItem && item == m_item)
		{
			CListCtrl::OnLButtonUp(nFlags, point);
		}
		else
		{
			CListCtrl::OnLButtonUp(nFlags, point);
			m_subitem = lvhit.iSubItem;
			m_item = item;
			EditLabel(item);
		}
	}
	else CListCtrl::OnLButtonUp(nFlags, point);
}
Example #25
0
/////////////////////////////////////////////////////////////////////////////
// CSHListCtrl message handlers
void CSHListCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	LVHITTESTINFO ht;
	ht.pt = point;
	int rval = SubItemHitTest(&ht);
	
	int oldsubitem = m_CurSubItem;
	m_CurSubItem = IndexToOrder(ht.iSubItem);
	
	CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
	// Make the column fully visible.
	// We have to take into account that the columns may be reordered
	MakeColumnVisible(Header_OrderToIndex(pHeader->m_hWnd, m_CurSubItem));
	
	// Store old state of the item.
	int state = GetItemState(ht.iItem, LVIS_FOCUSED);

	if (m_CurSubItem == -1 || ht.iItem == -1)
	{
		if(ht.iItem == -1)
		{
			NMLISTVIEW dispinfo;
			dispinfo.hdr.hwndFrom = m_hWnd;
			dispinfo.hdr.idFrom = GetDlgCtrlID();
			dispinfo.hdr.code = NM_CLICK;
			
			dispinfo.iItem = -1;
			dispinfo.iSubItem = ht.iSubItem;
			
			GetParent()->SendMessage( WM_NOTIFY, GetDlgCtrlID(), 
				(LPARAM)&dispinfo );
		}
		return;
	}
	
	
	// Call default left button click is here just before we might bail.
	// Also updates the state of the item.
	if (m_bClickEdit)
		m_bKeyEvent = FALSE;

	CListCtrl::OnLButtonDown(nFlags, point);
	
	// Bail if the state from before was not focused or the 
	// user has not already clicked on this cell.
	if (!m_bClickEdit)
	{
		if( !state || m_CurSubItem == -1 || oldsubitem != m_CurSubItem )
			return;
	
		int doedit = 0;
		// If we are in column 0 make sure that the user clicked on 
		// the item label.
		if( 0 == ht.iSubItem )
		{
			if (ht.flags & LVHT_ONITEMLABEL)
				doedit = 1;
		}
		else
		{
			doedit = 1;
		}
		if ( !doedit )
			return;
	}	
    // Send Notification to parent of ListView ctrl
	CString str;
	str = GetItemText( ht.iItem, ht.iSubItem );
    LV_DISPINFO dispinfo;
	dispinfo.hdr.hwndFrom = m_hWnd;
	dispinfo.hdr.idFrom = GetDlgCtrlID();
	dispinfo.hdr.code = LVN_BEGINLABELEDIT;
	
	dispinfo.item.mask = LVIF_TEXT;
	dispinfo.item.iItem = ht.iItem;
	dispinfo.item.iSubItem = ht.iSubItem;
	dispinfo.item.pszText = (LPTSTR)((LPCTSTR)str);
	dispinfo.item.cchTextMax = str.GetLength();
	
	GetParent()->SendMessage( WM_NOTIFY, GetDlgCtrlID(), 
		(LPARAM)&dispinfo );
}
void CServerListCtrl::OnLvnGetInfoTip(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);
	if (pGetInfoTip->iSubItem == 0)
	{
		LVHITTESTINFO hti = {0};
		::GetCursorPos(&hti.pt);
		ScreenToClient(&hti.pt);
		bool bOverMainItem = (SubItemHitTest(&hti) != -1 && hti.iItem == pGetInfoTip->iItem && hti.iSubItem == 0);

		// those tooltips are very nice for debugging/testing but pretty annoying for general usage
		// enable tooltips only if Shift+Ctrl is currently pressed
		bool bShowInfoTip = GetSelectedCount() > 1 || ((GetKeyState(VK_SHIFT) & 0x8000) && (GetKeyState(VK_CONTROL) & 0x8000));

		if (!bShowInfoTip){
			if (!bOverMainItem){
				// don' show the default label tip for the main item, if the mouse is not over the main item
				if ((pGetInfoTip->dwFlags & LVGIT_UNFOLDED) == 0 && pGetInfoTip->cchTextMax > 0 && pGetInfoTip->pszText[0] != '\0')
					pGetInfoTip->pszText[0] = '\0';
			}
			return;
		}

		if (GetSelectedCount() == 1)
		{
			;
		}
		else
		{
			int iSelected = 0;
			ULONGLONG ulTotalUsers = 0;
			ULONGLONG ulTotalLowIdUsers = 0;
			ULONGLONG ulTotalFiles = 0;
			POSITION pos = GetFirstSelectedItemPosition();
			while (pos)
			{
				const CServer* pServer = (CServer*)GetItemData(GetNextSelectedItem(pos));
				if (pServer)
				{
					iSelected++;
					ulTotalUsers += pServer->GetUsers();
					ulTotalFiles += pServer->GetFiles();
					ulTotalLowIdUsers += pServer->GetLowIDUsers();
				}
			}

			if (iSelected > 0)
			{
				CString strInfo;
				strInfo.Format(_T("%s: %u\r\n%s: %s\r\n%s: %s\r\n%s: %s"), 
					GetResString(IDS_FSTAT_SERVERS), iSelected, 
					GetResString(IDS_UUSERS), CastItoIShort(ulTotalUsers),
					GetResString(IDS_IDLOW), CastItoIShort(ulTotalLowIdUsers),
					GetResString(IDS_PW_FILES), CastItoIShort(ulTotalFiles));

				_tcsncpy(pGetInfoTip->pszText, strInfo, pGetInfoTip->cchTextMax);
				pGetInfoTip->pszText[pGetInfoTip->cchTextMax-1] = _T('\0');
			}
		}
	}

	*pResult = 0;
}
Example #27
0
void CMyListCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	static CPoint s_pt(0,0);

//	TRACE("%d,%d",point.x,point.y);

	if( s_pt == point )
	{
//		__super::OnMouseMove( nFlags,point );
		return;
	}
	s_pt = point;

	HideToolTip();

	LVHITTESTINFO lvhti;
	lvhti.pt = point;
	int ret = SubItemHitTest(&lvhti);
	if( ret == -1 )
	{
		if( m_iCurrentCursorItem != -1 )
		{
			CRect r;
			GetItemRect(m_iCurrentCursorItem, &r,LVIR_BOUNDS);
			InvalidateRect(&r, true);
		}
		m_iCurrentCursorItem = m_iCurrentCursorSubItem = -1;
		m_iOverImageItem	= -1;
		m_iOverImageSubItem	= -1;
		__super::OnMouseMove( nFlags,point );
		return;
	}

	if( m_iCurrentCursorItem != -1 )
	{
		CRect r;
		GetItemRect(m_iCurrentCursorItem, &r,LVIR_BOUNDS);
		InvalidateRect(&r, true);
	}
	m_iCurrentCursorItem	= lvhti.iItem;
	m_iCurrentCursorSubItem	= lvhti.iSubItem;
	if( m_iCurrentCursorItem != -1 )
	{
		CRect r;
		GetItemRect(m_iCurrentCursorItem, &r,LVIR_BOUNDS);
		InvalidateRect(&r, true);
	}

	CRect rectSubItem;
	GetSubItemRect( m_iCurrentCursorItem,m_iCurrentCursorSubItem,LVIR_BOUNDS,rectSubItem);

	if( NeedChangeCursor( point ) )
	{
		::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(32649)));			
		if( m_iOverImageItem == -1 && m_iOverImageSubItem == -1 )
		{
			if( m_iCurrentCursorSubItem == 0 )
			{
				rectSubItem.right = rectSubItem.left + GetColumnWidth(0);
			}

			InvalidateRect( rectSubItem );
			m_iOverImageItem	= lvhti.iItem;
			m_iOverImageSubItem	= lvhti.iSubItem;
		}
		ShowSubItemToolTip( m_iOverImageItem,m_iOverImageSubItem);
	}
	else
	{
		if( m_iOverImageItem != -1 && m_iOverImageSubItem != -1 )
		{
			GetSubItemRect( m_iOverImageItem,m_iOverImageSubItem,LVIR_BOUNDS,rectSubItem);
			if( m_iCurrentCursorSubItem == 0 )
			{
				rectSubItem.right = rectSubItem.left + GetColumnWidth(0);
			}
			InvalidateRect( rectSubItem );			
			m_iOverImageItem	= -1;
			m_iOverImageSubItem	= -1;
			::SetCursor(::LoadCursor(NULL, IDC_ARROW));	
		}	
		ShowItemToolTip( m_iCurrentCursorItem,m_iCurrentCursorSubItem);
	}
	if(!m_bTrackMouseEvent) 
	{
		TRACKMOUSEEVENT tme;
		tme.cbSize = sizeof(tme);
		tme.hwndTrack = m_hWnd;
		tme.dwFlags = TME_LEAVE; 
		tme.dwHoverTime = 1;
		m_bTrackMouseEvent = _TrackMouseEvent(&tme); 
	}
	__super::OnMouseMove( nFlags,point );

}