/******************************************************************************* 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); } }
/******************************************************************************* 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); }
/******************************************************************************* 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 }