Пример #1
0
/*******************************************************************************
  Function Name  : SetColumnWidthAuto
  Input(s)       : nCol, includeHeader
  Output         : BOOL
  Functionality  : Sets the column width of nCol to automatic.
  Member of      : CRxMsgList
  Author(s)      : Arunkumar K
  Date Created   : 20-05-2010
  Modifications  : 
*******************************************************************************/
BOOL CRxMsgList::SetColumnWidthAuto(int nCol, bool includeHeader)
{
	if (nCol == -1)
	{
		for(int i = 0; i < GetHeaderCtrl()->GetItemCount() ; ++i)
		{
			SetColumnWidthAuto(i, includeHeader);
		}
		return TRUE;
	}
	else
	{
		if (includeHeader)
			return SetColumnWidth(nCol, LVSCW_AUTOSIZE_USEHEADER);
		else
			return SetColumnWidth(nCol, LVSCW_AUTOSIZE);
	}
}
Пример #2
0
/*******************************************************************************
  Function Name  : OnKeyDown
  Input(s)       : nChar, nRepCnt, nFlags
  Output         : -
  Functionality  : Handle the case of VK_ADD CTRL + NumPlus (Auto size all columns).
  Member of      : CRxMsgList
  Author(s)      : Arunkumar K
  Date Created   : 20-05-2010
  Modifications  : 14-09-2010, ArunKumar K,
                   Added new Handlers for VK_PRIOR, VK_NEXT, VK_END, VK_HOME.
                   15-07-2010, ArunKumar K,
                   Added new Handlers for VK_UP, VK_DOWN.
                   13-07-2010, ArunKumar K,
                   Added new Handlers for VK_LEFT, VK_RIGHT, VK_RETURN.
*******************************************************************************/
void CRxMsgList::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    switch(nChar)
    {
        case VK_ADD:    // CTRL + NumPlus (Auto size all columns)
        {
            if (GetKeyState(VK_CONTROL) < 0)
            {
                // Special handling to avoid showing "hidden" columns
                SetColumnWidthAuto(-1);
                return;
            }
        }
        break;

        case VK_UP:
        {
            BOOL bInterpret = FALSE;
            ::SendMessage( m_hParent, WM_GET_INTERPRET_STATE, (WPARAM)&bInterpret, 0);

            if(bInterpret)
            {
                INT nItem = GetNextItem(-1, LVNI_SELECTED);

                if (nItem != -1)
                {
                    GetParent()->SendMessage(WM_GET_NEXT_PREV_MSG_INDEX, (WPARAM)false, (LPARAM)&nItem);
                    SetItemState(nItem-1,LVIS_SELECTED , LVIS_SELECTED );
                    return;
                }
            }

            break;
        }

        case VK_DOWN:
        {
            BOOL bInterpret = FALSE;
            ::SendMessage( m_hParent, WM_GET_INTERPRET_STATE, (WPARAM)&bInterpret, 0);

            if(bInterpret)
            {
                INT nItem = GetNextItem(-1, LVNI_SELECTED);

                if (nItem != -1)
                {
                    GetParent()->SendMessage(WM_GET_NEXT_PREV_MSG_INDEX, (WPARAM)true, (LPARAM)&nItem);
                    SetItemState(nItem+1,LVIS_SELECTED , LVIS_SELECTED );
                    return;
                }
            }

            break;
        }

        case VK_LEFT:
        {
            INT nItem = GetNextItem(-1, LVNI_SELECTED);

            if (nItem != -1)
            {
                GetParent()->SendMessage(WM_EXPAND_COLLAPSE_MSG, nItem, TREESTATE_COLLAPSE);
                SetItemState(nItem,LVIS_SELECTED , LVIS_SELECTED );
                return;
            }

            break;
        }

        case VK_RIGHT:
        {
            INT nItem = GetNextItem(-1, LVNI_SELECTED);

            if (nItem != -1)
            {
                GetParent()->SendMessage(WM_EXPAND_COLLAPSE_MSG, nItem, TREESTATE_EXPAND);
                SetItemState(nItem,LVIS_SELECTED , LVIS_SELECTED );
                return;
            }

            break;
        }

        case VK_RETURN:
        {
            INT nItem = GetNextItem(-1, LVNI_SELECTED);

            if (nItem != -1)
            {
                GetParent()->SendMessage(WM_EXPAND_COLLAPSE_MSG, nItem, TREESTATE_TOGGLE);
            }

            break;
        }

        case VK_PRIOR:
        case VK_NEXT:
        case VK_END:
        case VK_HOME:
        {
            BOOL bInterpret = FALSE;
            ::SendMessage( m_hParent, WM_GET_INTERPRET_STATE, (WPARAM)&bInterpret, 0);

            if ( bInterpret )
            {
                AfxBeginThread(UpDateThread, (LPVOID)this);
            }
        }
    }

    CListCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
}
Пример #3
0
/*******************************************************************************
  Function Name  : OnHeaderDividerDblClick
  Input(s)       : pNMHDR, pResult
  Output         : BOOL
  Functionality  : Event is fired when user double clicks on Divider.
  Member of      : CRxMsgList
  Author(s)      : Arunkumar K
  Date Created   : 20-05-2010
  Modifications  :
*******************************************************************************/
BOOL CRxMsgList::OnHeaderDividerDblClick(UINT, NMHDR* pNMHDR, LRESULT* /*pResult*/)
{
    NMHEADER* pNMH = (NMHEADER*)pNMHDR;
    SetColumnWidthAuto(pNMH->iItem);
    return TRUE;    // Don't let parent handle the event
}