📄 childview.cpp
字号:
#include "StdAfx.h"
#include "App.h"
#include "ChildView.h"
IMPLEMENT_DYNCREATE(ChildView, CListView)
BEGIN_MESSAGE_MAP(ChildView, CListView)
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_WM_TIMER()
END_MESSAGE_MAP()
ChildView::ChildView()
{
IsInitialUpdate = FALSE;
}
BOOL ChildView::PreCreateWindow(CREATESTRUCT& cs)
{
CListView::PreCreateWindow(cs);
cs.style &= ~LVS_TYPEMASK;
cs.style |= LVS_REPORT | LVS_SORTASCENDING | LVS_SINGLESEL | LVS_SHOWSELALWAYS;
return TRUE;
}
enum
{
MEMBER_ID_COLUMN,
MEMBER_APP_CH_COLUMN,
MEMBER_JOIN_MODE_COLUMN,
MEMBER_IS_SPEAKING_COLUMN,
MEMBER_SILENCE_TIME_COLUMN,
MEMBER_N_COLUMNS
};
void ChildView::OnInitialUpdate()
{
if (IsInitialUpdate == FALSE)
{
CListCtrl& ListCtrl = GetListCtrl();
_TCHAR *ColumnLabel[MEMBER_N_COLUMNS] =
{
_T("ID"), _T("Channel"), _T("Join mode"), _T("Speaking"), _T("Silence time")
};
int i;
ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
for(i = 0; i < MEMBER_N_COLUMNS; i++)
{
ListCtrl.InsertColumn(i, ColumnLabel[i], LVCFMT_LEFT, 100);
}
SetTimer(0, 500, NULL);
child_hwnd = GetSafeHwnd();
IsInitialUpdate = TRUE;
}
}
int last_active;
void ChildView::OnTimer(UINT nIDEvent)
{
CListCtrl& ListCtrl = GetListCtrl();
LVFINDINFO item_find;
int active;
char str[10] = "";
int i;
if (nIDEvent == 0)
{
if (conf_active >=0 || conf_active == -1 && last_active == -1)
{
// ENG: Retrieve selection
// CHS: 获取选择
for (i = 0; i < ListCtrl.GetItemCount(); i++)
{
if (ListCtrl.GetItemState(i, LVIS_SELECTED))
ListCtrl.GetItemText(i, 0, str, 10);
}
ListCtrl.DeleteAllItems();
if (SsmValidateGrpId(conf_active))
{
// ENG: Refresh
// CHS: 刷新
WORD TotalMember, TotalSpeaker, TotalSpeaking;
SsmGetConfGrpInfo(conf_active, &TotalMember, &TotalSpeaker, &TotalSpeaking);
char temp[10];
DWORD SilenceTime;
WORD JoinMode, IsSpeaking;
int AppCh;
int index;
int * member = (int *)malloc(sizeof(int) * TotalMember);
SsmGetConfGrpMmbrId(conf_active, member);
for (i = 0; i < TotalMember; i++)
{
SsmGetConfGrpMmbrInfo(conf_active, member[i], &AppCh, & JoinMode, &IsSpeaking, &SilenceTime);
index = ListCtrl.InsertItem(0, itoa(member[i], temp, 10), IDI_ICON_MEMBER);
ListCtrl.SetItemText(index, 1, itoa(AppCh, temp, 10));
ListCtrl.SetItemText(index, 2, itoa(JoinMode, temp, 10));
ListCtrl.SetItemText(index, 3, itoa(IsSpeaking, temp, 10));
ListCtrl.SetItemText(index, 4, itoa(SilenceTime, temp, 10));
}
// ENG: Restore selection
// CHS: 还原选择
item_find.flags = LVFI_STRING;
item_find.psz = str;
active = ListCtrl.FindItem(&item_find);
if (active < 0)
active = 0;
if (ListCtrl.GetItemCount() >= 0)
ListCtrl.SetItemState(active, LVIS_SELECTED, LVIS_SELECTED);
}
}
last_active = conf_active;
}
}
void ChildView::OnRButtonDown(UINT nFlags, CPoint point)
{
int index;
PostMessage(WM_TIMER);
CListCtrl& ListCtrl = GetListCtrl();
if ((index = ListCtrl.HitTest(point)) >= 0)
ListCtrl.SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);
else if(ListCtrl.GetItemCount() > 0)
ListCtrl.SetItemState(ListCtrl.GetItemCount() - 1, LVIS_SELECTED, LVIS_SELECTED);
}
void ChildView::OnLButtonDown(UINT nFlags, CPoint point)
{
int index;
PostMessage(WM_TIMER);
CListCtrl& ListCtrl = GetListCtrl();
if ((index = ListCtrl.HitTest(point)) >= 0)
ListCtrl.SetItemState(index, LVIS_SELECTED, LVIS_SELECTED);
else if(ListCtrl.GetItemCount() > 0)
ListCtrl.SetItemState(ListCtrl.GetItemCount() - 1, LVIS_SELECTED, LVIS_SELECTED);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -