⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 beereader source code
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	{
	  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 + -