📄 dlgfavoriteedit.cpp
字号:
// DlgFavoriteEdit.cpp : implementation file
//
#include "stdafx.h"
#include "AliEditor.h"
#include "DlgFavoriteEdit.h"
#include "MainFrm.h"
#include "DbParser.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgFavoriteEdit dialog
CDlgFavoriteEdit::CDlgFavoriteEdit(CWnd* pParent /*=NULL*/)
: CDialog(CDlgFavoriteEdit::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgFavoriteEdit)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CDlgFavoriteEdit::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgFavoriteEdit)
DDX_Control(pDX, IDC_LIST_ITEMS, m_list);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgFavoriteEdit, CDialog)
//{{AFX_MSG_MAP(CDlgFavoriteEdit)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgFavoriteEdit message handlers
BOOL CDlgFavoriteEdit::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_list.InsertColumn(0, PKEYZ_SERVICE_NAME, LVCFMT_LEFT, 200);
m_list.InsertColumn(1, "member", LVCFMT_LEFT, 60);
int nBitIndex = m_pSatTpMod->offset;
CDbParser* pdbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
db_header_t* header = &pdbParser->m_progheader;
int index_name = pdbParser->GetProgNodeIndex(PKEYZ_SERVICE_NAME, TRUE);
int index_fav = pdbParser->GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
char bufsz[256];
int nFav = 0;
for(short i = 0, short s = 0; i < header->rec_length; i++)
{
if( header->precord[i] == -1 )
continue;
pdbParser->GetNodeData(PROG_NODE, s, index_name, bufsz, 0, TRUE);
m_list.InsertItem(s, bufsz);
pdbParser->GetNodeData(PROG_NODE, s, index_fav, bufsz, 0, TRUE);
//nFav = pdbParser->GetDataValue(bufsz);
nFav = atoi(bufsz);
if( (nFav >> (nBitIndex-1)) & 0x00000001 )
{
m_list.SetItemText(s, 1, IS_FAVORITE_MEMBER);
}
else
{
m_list.SetItemText(s, 1, NOT_FAVORITE_MEMBER);
}
m_list.SetItemData(s, i);
s++;
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int CDlgFavoriteEdit::GetCurSel()
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL) return -1;
int nItem = m_list.GetNextSelectedItem(pos);
return nItem;
}
void CDlgFavoriteEdit::SetCurSel(int index, BOOL bClearFoucs)
{
LVITEM lvm;
lvm.mask = LVIF_STATE;
lvm.iItem = index;
lvm.stateMask = -1;
lvm.state = LVIS_SELECTED | LVIS_FOCUSED;
lvm.iSubItem = 0;
int old = GetCurSel();
m_list.SetItem(&lvm);
lvm.iItem = old;
if(!bClearFoucs)
{
lvm.state = 0;
}
else
{
lvm.state = LVIS_FOCUSED ;
// lvm.state = 0 ;
}
m_list.SetItem(&lvm);
lvm.iItem = index;
lvm.state = LVIS_SELECTED | LVIS_FOCUSED;
m_list.SetItem(&lvm);
m_list.EnsureVisible(index, TRUE);
}
void CDlgFavoriteEdit::OnAdd()
{
// TODO: Add your control notification handler code here
POSITION pos = m_list.GetFirstSelectedItemPosition();
while( pos )
{
int nItem = m_list.GetNextSelectedItem(pos);
m_list.SetItemText(nItem, 1, IS_FAVORITE_MEMBER);
}
}
void CDlgFavoriteEdit::OnRemove()
{
// TODO: Add your control notification handler code here
POSITION pos = m_list.GetFirstSelectedItemPosition();
while( pos )
{
int nItem = m_list.GetNextSelectedItem(pos);
m_list.SetItemText(nItem, 1, NOT_FAVORITE_MEMBER);
}
}
void CDlgFavoriteEdit::OnOK()
{
// TODO: Add extra validation here
CDbParser* pdbParser = &((CMainFrame*)AfxGetMainWnd())->m_dbParser;
int nCount = m_list.GetItemCount();
int offset = 0;
int nFav;
int nBitTrue = 0x00000001 << (m_pSatTpMod->offset -1);
char bufsz[256];
char contx[16];
int index_fav = pdbParser->GetProgNodeIndex(PKEYZ_FAV_GROUP, TRUE);
for(int s = 0; s < nCount; s++)
{
m_list.GetItemText(s, 1, contx, 15);
offset = m_list.GetItemData(s);
pdbParser->GetNodeData(PROG_NODE, offset, index_fav, bufsz, 0, TRUE);
//nFav = pdbParser->GetDataValue(bufsz);
nFav = atoi(bufsz);
if( strcmp(contx, NOT_FAVORITE_MEMBER) == 0)
{
nFav = nFav & (~nBitTrue);//对应的bit置0
}
else if( strcmp(contx, IS_FAVORITE_MEMBER) == 0)
{
nFav = nFav | nBitTrue;//对应的bit置1
}
else
{
ASSERT(FALSE);
}
sprintf(bufsz, "%u", nFav);
pdbParser->SetNodeData(PROG_NODE, offset, index_fav, bufsz, TRUE);
g_bModifyed = true;
}
CDialog::OnOK();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -