📄 mainfrm.cpp
字号:
{
case SM_PRASEXML_END:
{
if( pChannel )
{
PGROUPNODE pNode = (PGROUPNODE) GetNewsTree()->GetItemData( GetNewsTree()->GetSelectedItem() );
if( pNode->dwData > 0 )
{
PCHANNELDATA pData = (PCHANNELDATA)pNode->dwData;
if( pData->pChannel == pChannel )
DisplayItem( pChannel );
}
GetNewsTree()->SendMessage(WM_UPDATE_CHANNEL,2,(LPARAM)pChannel);
GetNewsTree()->SendMessage(WM_UPDATE_ITEMCOUNT,0,(LPARAM)pChannel);
pRSSManager->SaveLocalCache( pChannel );
break;
}
}
case SM_DOWNLOAD_FAILED:
case SM_PRASEXML_FAILED:
{
if( pChannel )
GetNewsTree()->SendMessage(WM_UPDATE_CHANNEL,0,(LPARAM)pChannel);
}
default:
break;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////
/// 新闻频道树项选择变化消息处理函数
///////
LONG CMainFrame::OnNewsTreeItemChange(UINT wParam, LONG lParam)
{
CRSSChannel* pChannel = NULL;
PCHANNELDATA pData = NULL;
PGROUPNODE pNodeData = NULL;
if( m_WorkingChannel )
{
if( m_WorkingChannel->GetSaveTag() )
{
pRSSManager->SaveLocalCache( m_WorkingChannel );
}
m_WorkingChannel = NULL;
}
CWaitCursor wait;
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
pChannel = NULL;
if ( hItem )
{
if( !GetNewsTree()->ItemHasChildren(hItem) /*&& ( GetNewsTree()->GetParentItem(hItem) != GetNewsTree()->GetRootItem() )*/)
{
pNodeData = (PGROUPNODE)GetNewsTree()->GetItemData( hItem );
if( pNodeData->dwData > 0 )
{
pData = (PCHANNELDATA)pNodeData->dwData ;
pChannel = pData->pChannel;
m_WorkingChannel = pChannel;
if( !pData->bInit ) //还未加载本地缓冲,马上加载.
{
pRSSManager->GetReader()->LoadLocal(pChannel,pChannel->GetTitle(),pChannel->GetCacheGUID() );
pData->bInit = TRUE;
}
if( pChannel )
DisplayItem( pChannel );
}
}
else //非频道项。
{
DisplayItem(NULL);
GetHtmlFrame()->Browse( _T("about:blank") );
}
}
wait.Restore();
return 0;
}
void CMainFrame::DisplayItem(CRSSChannel *pChannel)
{
CBeeReaderView* pView = (CBeeReaderView*)GetListCtrl();
ASSERT(pView);
pView->DisplayItem(pChannel);
}
void CMainFrame::OnFileNewchannel()
{
// TODO: Add your command handler code here
CTabTreeCtrl* pTree = GetNewsTree();
ASSERT(pTree);
PGROUPNODE pParentNode = NULL;
HTREEITEM htSelect = pTree->GetSelectedItem();
if( htSelect )
{
pParentNode = (PGROUPNODE)pTree->GetItemData( htSelect );
if( pParentNode->dwData != 0 ) //如选中的是频道,则取父项。
{
htSelect = pTree->GetParentItem(htSelect);
pParentNode = (PGROUPNODE)pTree->GetItemData( htSelect );
}
}
CCreateChannelSheet sheet( pParentNode,_T("新建频道") );
sheet.DoModal();
}
void CMainFrame::OnToolsDelGroup()
{
// TODO: Add your command handler code here
}
void CMainFrame::CreateChannel(PGROUPNODE pParentNode, CRSSChannel *pChannel)
{
if( !pParentNode || !pChannel ) return;
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
PCHANNELDATA pData = new (CHANNELDATA);
pData->bInit = TRUE;
pData->CreateDate = new (CStdDate);
pData->pChannel = pChannel;
pData->szTitle = pChannel->GetTitle();
pData->szLink = pChannel->GetURL();
pData->szCache = TranformFileNameChar( pData->szLink );
/*
CString szViewTitle;
szViewTitle.Format("(%d/%d)",pChannel->GetReadedItems(),pChannel->GetItemCount());
szViewTitle = pChannel->GetTitle()+szViewTitle;
*/
PGROUPNODE pNode = pNewsGroup->Insert( pParentNode,NULL,pChannel->GetTitle(),(DWORD)pData);
if( pNode )
{
GetNewsTree()->InsertChannel( pParentNode,pNode );
}
else
delete( pData );
}
//////////////////////////////////////////////////////////////////////////
// 转换文件名中的\/:*?"<>|替换为空格符。
//
CString CMainFrame::TranformFileNameChar(CString szFileName)
{
TCHAR tch[9] = {'\\','/',':','?','*','"','<','>','|'};
for( int i=0;i<9;i++ )
szFileName.Replace( tch[i],_T(' '));
return szFileName;
}
void CMainFrame::OnUpdateRemoveChannel(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) { pCmdUI->Enable(FALSE); return; }
if( hItem == GetNewsTree()->GetRootItem() )
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
void CMainFrame::OnUpdateRemoveGroup(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) { pCmdUI->Enable(FALSE); return; }
if( hItem == GetNewsTree()->GetRootItem() )
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
void CMainFrame::OnRemoveChannel()
{
// TODO: Add your command handler code here
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
PCHANNELDATA pData;
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) return;
PGROUPNODE pNode,pNode1,pNode2;
pNode = (PGROUPNODE)GetNewsTree()->GetItemData(hItem);
ASSERT(pNode);
if( pNode->dwData == 0 )
{
if( MessageBox(_T("删除选中频道组下的频道吗?"),_T("系统提示")
,MB_YESNO|MB_ICONQUESTION) == IDYES )
{
pNode2 = pNode1 = pNode->pFirstChild;
if( pNode1 )
{
do{
if( pNode2 )
pNode2 = pNode1->pNextSibling;
if( pNode1->dwData != 0 )
{
pData = (PCHANNELDATA)pNode1->dwData;
if( pNewsGroup->ReMoveNode( pNode1,FALSE ) )
{
GetNewsTree()->DeleteItem(pData->htItem);
//通知移去频道缓冲.
CRSSChannel* pChannel = pData->pChannel;
pRSSManager->RemoveChannel(pChannel);
delete(pData);
}
}
if( pNode->pFirstChild == NULL ) break;
if( !pNode2 ) break;
pNode1 = pNode2;
if( pNode2->pNextSibling == pNode->pFirstChild )
{
pNode2 = NULL;
}
}while( pNode1 );
}
}
}
else
{
if( MessageBox(_T("删除选中的频道吗?"),_T("系统提示")
,MB_YESNO|MB_ICONQUESTION) == IDYES )
{
pData = (PCHANNELDATA)pNode->dwData;
pNewsGroup->ReMoveNode(pNode,FALSE);
GetNewsTree()->DeleteItem(pData->htItem);
//通知移去频道缓冲.
CRSSChannel* pChannel = pData->pChannel;
pRSSManager->RemoveChannel(pChannel);
delete(pData);
}
}
pNewsGroup->Save();
}
void CMainFrame::OnRemoveGroup()
{
// TODO: Add your command handler code here
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
if( MessageBox(_T("删除选中的频道组吗?"),_T("系统提示")
,MB_YESNO|MB_ICONQUESTION) == IDYES )
{
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) return;
PGROUPNODE pNode = (PGROUPNODE)GetNewsTree()->GetItemData(hItem);
if( pNode->dwData !=0 ) return;
if( bDeleteGroup )
RemoveGroup( pNode );
if( pNewsGroup->ReMoveNode( pNode,bDeleteGroup ) )
{
GetNewsTree()->DeleteItem(hItem);
pNewsGroup->Save();
}
}
}
void CMainFrame::RemoveGroup(PGROUPNODE pNode)
{
PCHANNELDATA pData;
if( !pNode ) return;
if( pNode->dwData != 0 )
{
pData = (PCHANNELDATA)pNode->dwData;
//通知移去频道缓冲.
CRSSChannel* pChannel = pData->pChannel;
pRSSManager->RemoveChannel(pChannel);
delete(pData);
}
else
{
if( pNode->pFirstChild )
{
RemoveGroup(pNode->pFirstChild);
if( pNode->pFirstChild->pNextSibling == pNode->pFirstChild ) return;
pNode = pNode->pFirstChild;
while( pNode = pNode->pNextSibling )
{
RemoveGroup(pNode);
if( pNode->pNextSibling == pNode->pParentNode->pFirstChild ) break;
}
}
}
}
void CMainFrame::OnTreeViewrssfeed()
{
// TODO: Add your command handler code here
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) return;
PGROUPNODE pNode = (PGROUPNODE)GetNewsTree()->GetItemData(hItem);
if( pNode->dwData != 0 )
{
PCHANNELDATA data = (PCHANNELDATA)pNode->dwData;
GetHtmlFrame()->Browse( NULL,data->szLink );
}
}
void CMainFrame::OnUpdateTreeViewrssfeed(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) { pCmdUI->Enable(FALSE); return;}
PGROUPNODE pNode = (PGROUPNODE)GetNewsTree()->GetItemData(hItem);
if( pNode->dwData != 0 )
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
void CMainFrame::OnUpdateChannelUpdate(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CBeeReaderApp* pApp = (CBeeReaderApp*)AfxGetApp();
ASSERT(pApp);
CNewsGroup* pNewsGroup = pApp->GetNewsGroup();
ASSERT(pNewsGroup);
HTREEITEM hItem = GetNewsTree()->GetSelectedItem();
if( hItem == NULL ) { pCmdUI->Enable(FALSE); return; }
PGROUPNODE pNode = (PGROUPNODE)GetNewsTree()->GetItemData(hItem);
if( pNode->dwData != 0 )
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -