亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? view.cpp

?? 網(wǎng)絡(luò)通信方面的代碼書非常經(jīng)典歡迎大家下載并學(xué)習(xí)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*
	View.cpp : implementation of the CSnaggerView class

	Implements the view class which is responsible for most of the user
	interface presentation.

	Author: Steven E. Sipe
*/

#include "stdafx.h"

#include <afxadv.h>

#include <io.h>
#include <direct.h>

#include "SiteSnag.h"
#include "Document.h"
#include "View.h"
#include "urldlg.h"
#include "options.h"
#include "progress.h"
#include "wait.h"
#include "project.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

const CString g_strProjDir = "Projects\\";

/////////////////////////////////////////////////////////////////////////////
// CSnaggerView

IMPLEMENT_DYNCREATE(CSnaggerView, CView)

BEGIN_MESSAGE_MAP(CSnaggerView, CView)
	//{{AFX_MSG_MAP(CSnaggerView)
	ON_WM_SIZE()
	ON_NOTIFY(NM_DBLCLK, IDC_TREE, OnDblclkTree)
	ON_COMMAND(ID_STOP, OnStop)
	ON_UPDATE_COMMAND_UI(ID_STOP, OnUpdateStop)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPTIONS, OnUpdateFileOptions)
	ON_UPDATE_COMMAND_UI(ID_FILE_REMOVEALL, OnUpdateFileRemoveall)
	ON_UPDATE_COMMAND_UI(ID_APP_EXIT, OnUpdateAppExit)
	ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
	ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
	ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_RENAME, OnFileRename)
	ON_UPDATE_COMMAND_UI(ID_FILE_RENAME, OnUpdateFileRename)
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
	ON_UPDATE_COMMAND_UI(ID_FILE_CLOSE, OnUpdateFileClose)
	ON_COMMAND(ID_SITEINPUT, OnSiteinput)
	ON_COMMAND(ID_PARA, OnPara)
	ON_COMMAND(ID_DELETE, OnDelete)
	ON_COMMAND(ID_RENAME, OnRename)
	//}}AFX_MSG_MAP
	ON_MESSAGE(UM_END_WAIT,OnHandleEndWait)
	ON_MESSAGE(UM_SHOW_PROMPT,OnShowPrompt)
	ON_UPDATE_COMMAND_UI_RANGE(ID_FILE_MRU_FIRST, ID_FILE_MRU_LAST, OnUpdateFileMRU)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSnaggerView construction/destruction

// Constructor
CSnaggerView::CSnaggerView()
{
	m_pProgress = NULL;
	m_pWait = NULL;
	m_bSnagging = FALSE;
}

// Destructor
CSnaggerView::~CSnaggerView()
{
	delete m_pProgress;
}

// Called to modify window creation characteristics
BOOL CSnaggerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSnaggerView drawing

// Draws the view -- not used
void CSnaggerView::OnDraw(CDC* pDC)
{
}

/////////////////////////////////////////////////////////////////////////////
// CSnaggerView diagnostics

#ifdef _DEBUG
void CSnaggerView::AssertValid() const
{
	CView::AssertValid();
}

void CSnaggerView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CSnaggerDoc* CSnaggerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSnaggerDoc)));
	return (CSnaggerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSnaggerView message handlers

// Called when a new view is created -- for SDI applications this is called
// multiple times.  Therefore, we set a static flag and create the tree
// control the first time the view is initialized.
void CSnaggerView::OnInitialUpdate() 
{
	static BOOL bFirstTime = TRUE;

	CView::OnInitialUpdate();

	// Is this the first time?
	if(bFirstTime)
	{
		// Yes, create the tree control
		CRect rc;
		GetClientRect(&rc);
		m_Tree.Create(TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT|WS_VISIBLE,
							rc,this,IDC_TREE);
		bFirstTime = FALSE;

		// Cyan is the transparent color in this bitmap
		m_ImageList.Create(IDB_TREE,16,1,RGB(0,128,128));
		m_Tree.SetImageList(&m_ImageList,TVSIL_NORMAL);

		// Create the child progress window too
		CRect rcProg;
		m_pProgress = new CProgress(this);
		m_pProgress->GetClientRect(rcProg);
		m_pProgress->MoveWindow(rc.left,rc.bottom-rcProg.Height(),
							rc.Width(),rcProg.Height());
		m_pProgress->ShowWindow(SW_SHOWNORMAL);
		m_pProgress->UpdateWindow();
	}
}

// Intializes the tree control by removing all of the items and adding
// TOC, Multimedia and page items based on the current option settings
void CSnaggerView::InitTree(CString& strSite)
{
	CSnaggerDoc* pDoc = GetDocument();

	// Initialize the tree
	m_htreeRoot = m_htreeMedia = m_htreePages = 0;
	m_Tree.DeleteAllItems();

	// Add the main node types based on the options settings
	m_htreeRoot = m_Tree.AddRootItem(strSite,0);
	if(pDoc->GetOptions()->bContents)
		m_htreeContents = m_Tree.AddChildItem("SiteSnagger Table of Contents",
						m_htreeRoot,CTree::TOC_NODE);
	if(pDoc->GetOptions()->bMultimedia)
		m_htreeMedia = m_Tree.AddChildItem("Multimedia",m_htreeRoot,
						CTree::MEDIA_NODE);
	m_htreePages = m_Tree.AddChildItem("Pages",m_htreeRoot,
						CTree::PAGES_NODE);
}

// Returns a list of all of the child items under the specified node.  This
// is used during serialization
void CSnaggerView::GetChildren(HTREEITEM htreeParent, CStringArray& arrstrEntries)
{
	int nIndex = 0;

	// Empty the list
	arrstrEntries.RemoveAll();
	if(htreeParent == NULL) return;

	// Iterate through the list of child items
	HTREEITEM htreeItem = m_Tree.GetNextItem(htreeParent,TVGN_CHILD);

	while(htreeItem)
	{
		arrstrEntries.Add(m_Tree.GetItemText(htreeItem));
		htreeItem = m_Tree.GetNextSiblingItem(htreeItem);
		nIndex++;
	}
}

// Adds the list of child items to the specified node
void CSnaggerView::AddChildren(HTREEITEM htreeParent, CStringArray& arrstrEntries,
									int nPageType)
{
	if(htreeParent == NULL) return;
	BOOL bPageAdjust = (nPageType == CTree::PAGE_NODE);

	// Add each of the items to the tree
	for(int i = 0; i < arrstrEntries.GetSize(); i++)
	{
		if(bPageAdjust)
		{
			if(arrstrEntries[i].Left(4) == "http")
				nPageType = CTree::OFFSITE_PAGE_NODE;
			else nPageType = CTree::PAGE_NODE;
		}
		else nPageType = CTree::GetMediaType(arrstrEntries[i]);

		m_Tree.AddChildItem(arrstrEntries[i],htreeParent,nPageType);
	}
}

// Removes everything from the tree control
void CSnaggerView::ClearTree() 
{ 
	if(::IsWindow(m_Tree.GetSafeHwnd()))
		m_Tree.DeleteAllItems(); 

	m_htreeRoot =  NULL;
	m_htreeContents =  NULL;
	m_htreeMedia =  NULL;
	m_htreePages = NULL;
}

// Handles storing or loading the contents of the tree control
void CSnaggerView::SerializeTree(CArchive& ar)
{
	CString strSite;
	CSnaggerDoc* pDoc = (CSnaggerDoc *) ar.m_pDocument;
	CStringArray arrstrEntries;

	// Storing??
	if(ar.IsStoring())
	{
		// Get the site name
		strSite = pDoc->GetStartPage();
		ar << strSite;

		// Contents
		GetChildren(m_htreeContents,arrstrEntries);
		arrstrEntries.Serialize(ar);

		// Media
		GetChildren(m_htreeMedia,arrstrEntries);
		arrstrEntries.Serialize(ar);

		// Pages
		GetChildren(m_htreePages,arrstrEntries);
		arrstrEntries.Serialize(ar);
	}
	else
	{
		// Get the site
		ar >> strSite;
		pDoc->SetStartPage(strSite);

		// Initialize an empty tree
		if(!strSite.IsEmpty())
			InitTree(strSite);

		// Contents
		arrstrEntries.Serialize(ar);
		AddChildren(m_htreeContents,arrstrEntries,CTree::TOC_PAGE_NODE);

		// Media
		arrstrEntries.Serialize(ar);
		AddChildren(m_htreeMedia,arrstrEntries,CTree::IMAGE_NODE);

		// Pages
		arrstrEntries.Serialize(ar);
		AddChildren(m_htreePages,arrstrEntries,CTree::PAGE_NODE);
	}
}

// Adds media to the tree
HTREEITEM CSnaggerView::AddTreeMedia(CString strMedia, int nMediaType)
{
	return m_Tree.AddChildItem(strMedia,m_htreeMedia,nMediaType);
}

// Adds a page to the tree
HTREEITEM CSnaggerView::AddTreePage(CString& strPage, BOOL bOffsite)
{
	int nPageType = bOffsite?CTree::OFFSITE_PAGE_NODE:
							 CTree::PAGE_NODE;

	return m_Tree.AddChildItem(strPage,m_htreePages,nPageType);
}

// Adds a TOC page to the tree
HTREEITEM CSnaggerView::AddTreeContent(CString& strPage)
{
	return m_Tree.AddChildItem(strPage,m_htreeContents,CTree::TOC_PAGE_NODE);
}

// Displays the please wait message box

// Handles the please wait termination message
LONG CSnaggerView::OnHandleEndWait(WPARAM,LPARAM)
{
	if(m_pWait)
	{
		m_pWait->DestroyWindow();
		delete m_pWait;
		m_pWait = NULL;
	}

	return(0L);
}

// Ends the please wait message by posting a message -- this is done because
// the please wait message is ended from another thread so we can't call the
// DestroyWindow() directly
void CSnaggerView::EndWait()
{
	SendMessage(UM_END_WAIT);
}

// Handles resize of the view -- also resizes the child statistics window
void CSnaggerView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);

	CRect rcProg, rc;

	// Is the stats window there yet??
	if(m_pProgress)
	{
		// Yep...resize it and the tree control
		m_pProgress->GetWindowRect(rcProg);
		m_pProgress->MoveWindow(0,cy-rcProg.Height(),cx,rcProg.Height());
		m_Tree.MoveWindow(0,0,cx,cy-rcProg.Height());
	}
}

// Handles the double-click message for the tree control -- invokes the appropriate
// handler based on the object type
void CSnaggerView::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// Get the URL and open it in the web browser
	CPoint pt;
	UINT uFlags = TVHT_ONITEMLABEL; 
	CString strText;

	GetCursorPos(&pt);
	m_Tree.ScreenToClient(&pt);

	HTREEITEM htreeItem = m_Tree.HitTest(pt,&uFlags);

	// Make sure it's not just a category entry that the user clicked on
	if(htreeItem && htreeItem != m_htreeRoot && htreeItem != m_htreeContents && 
				htreeItem != m_htreeMedia && htreeItem != m_htreePages)
	{
		// It's a valid file so get its name
		strText = m_Tree.GetItemText(htreeItem);
		int nIndex = strText.ReverseFind('(');
		if(nIndex >= 0)
		{
			strText = strText.Mid(nIndex+1);
			strText = strText.Left(strText.GetLength()-1);
		}

		CSnaggerDoc *pDoc = GetDocument();

		// Don't pre-pend the path for an EMAIL entry
		if(strText.Left(7) != "mailto:")
			strText = pDoc->GetDirectory()+strText;

		// Let the shell invoke the proper handler for this file
		ShellExecute(NULL,"open",strText,NULL,NULL,SW_SHOWNORMAL);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天影视网天天综合色在线播放 | 色香蕉成人二区免费| 91黄色小视频| 久久久久国产成人精品亚洲午夜| 亚洲人快播电影网| 韩国女主播一区| 欧洲精品在线观看| 国产精品久久三| 韩国精品主播一区二区在线观看| 在线欧美一区二区| 欧美经典一区二区| 日韩va欧美va亚洲va久久| 97久久久精品综合88久久| 精品对白一区国产伦| 亚洲大尺度视频在线观看| 成人激情视频网站| 久久久久国产精品厨房| 日av在线不卡| 欧美日韩国产综合一区二区 | 欧美日韩在线播放三区四区| 国产午夜精品理论片a级大结局 | 色哟哟一区二区| 中文在线资源观看网站视频免费不卡| 免费观看日韩av| 欧美日本国产视频| 国产尤物一区二区在线| 欧美一区二区在线不卡| 污片在线观看一区二区 | 久久国产精品第一页| 欧美日韩不卡一区| 亚洲电影第三页| 在线观看区一区二| 亚洲午夜久久久久久久久电影网 | 午夜久久久影院| 欧美日韩视频第一区| 一区二区三区四区不卡在线| 99这里都是精品| 亚洲图片你懂的| 一本到不卡免费一区二区| 亚洲日本免费电影| 色婷婷一区二区| 亚洲国产精品天堂| 欧美日本视频在线| 奇米亚洲午夜久久精品| 日韩一区二区不卡| 国产一区二区看久久| 久久精品夜色噜噜亚洲aⅴ| 福利一区在线观看| 樱桃国产成人精品视频| 欧美日韩中字一区| 蜜臂av日日欢夜夜爽一区| 欧美成人三级在线| 懂色av噜噜一区二区三区av| 国产精品超碰97尤物18| 在线一区二区三区四区| 午夜婷婷国产麻豆精品| 欧美大白屁股肥臀xxxxxx| 国产精品1024久久| 一区二区三区在线不卡| 5858s免费视频成人| 韩国精品在线观看| 亚洲欧美欧美一区二区三区| 日韩一区在线看| 欧美日韩免费观看一区三区| 精品一区二区三区日韩| 中文字幕日韩av资源站| 欧美一区二区三区视频免费播放 | 国产呦萝稀缺另类资源| 国产精品久久久久久久久久久免费看| 色先锋资源久久综合| 日本视频免费一区| 中文字幕一区二区三区色视频| 欧美性三三影院| 国产福利一区二区三区| 亚洲与欧洲av电影| 久久久久久久免费视频了| 日本韩国欧美一区| 久久99国内精品| 一区二区视频在线| 久久久www成人免费毛片麻豆 | 中文字幕日韩av资源站| 91精品啪在线观看国产60岁| 国产成人一区在线| 视频在线观看91| 亚洲视频小说图片| 久久亚洲一区二区三区四区| 在线看国产一区| 国产91清纯白嫩初高中在线观看 | 亚洲夂夂婷婷色拍ww47| 久久婷婷国产综合精品青草 | 亚洲一区二区三区四区在线观看| 日韩三级高清在线| 欧美日韩一区二区三区视频| 成人深夜福利app| 激情六月婷婷久久| 日本午夜一本久久久综合| 一区二区免费在线播放| 国产精品久久久久三级| 亚洲精品在线免费播放| 91精品国产一区二区三区蜜臀 | 国产精品无圣光一区二区| 日韩一区二区在线看| 色婷婷激情综合| fc2成人免费人成在线观看播放| 免费观看30秒视频久久| 亚洲国产日韩一区二区| 一区二区三区欧美| 亚洲视频1区2区| 日韩一区在线播放| 国产精品国产三级国产三级人妇 | 欧美国产精品一区二区三区| 欧美一卡二卡在线观看| 欧美日本在线播放| 欧美日韩一区二区三区免费看| 91啪在线观看| 91视视频在线观看入口直接观看www | 日韩一区二区免费在线电影| 欧美日韩一区二区在线观看视频 | 天天av天天翘天天综合网| 亚洲精品国产精华液| 亚洲啪啪综合av一区二区三区| 中文字幕va一区二区三区| 国产亚洲精品中文字幕| 国产亚洲va综合人人澡精品 | 欧美久久久久久久久久| 欧美日韩国产首页| 欧美一区二区三区视频免费播放| 91精品国产一区二区三区| 欧美一卡二卡三卡四卡| 日韩欧美久久久| 久久久午夜精品| 亚洲国产精品成人综合| 国产精品久久久久久户外露出| 国产精品久久久久久久久久免费看| 国产精品久线观看视频| 亚洲欧美日韩在线不卡| 亚洲一区影音先锋| 天天综合日日夜夜精品| 麻豆精品一二三| 国产成人免费9x9x人网站视频| 东方aⅴ免费观看久久av| av成人动漫在线观看| 色偷偷久久人人79超碰人人澡| 欧美视频三区在线播放| 日韩欧美一区二区免费| 久久精品视频在线免费观看| 最近中文字幕一区二区三区| 亚洲妇女屁股眼交7| 久久 天天综合| 99精品久久只有精品| 欧美日韩美少妇| 日韩欧美国产精品| 17c精品麻豆一区二区免费| 亚洲一区二区在线免费观看视频| 男女男精品视频网| 99国产精品国产精品毛片| 亚洲综合成人在线| 琪琪久久久久日韩精品| 成人黄色片在线观看| 91.麻豆视频| 亚洲欧美在线高清| 免费成人av在线播放| 成人精品电影在线观看| 91精品国产品国语在线不卡| 国产精品嫩草影院av蜜臀| 水野朝阳av一区二区三区| 成人中文字幕合集| 日韩一区二区免费视频| 亚洲色图视频网| 狠狠色丁香婷综合久久| 在线观看视频一区二区欧美日韩| 久久夜色精品国产噜噜av| 亚洲成人黄色小说| 成人av在线网| 久久亚洲精品小早川怜子| 夜夜嗨av一区二区三区中文字幕 | 不卡电影免费在线播放一区| 日韩三级av在线播放| 一区二区在线观看免费| 国产成人在线视频网址| 欧美大片在线观看| 亚洲一区二区av电影| 99久久亚洲一区二区三区青草| 亚洲精品一区二区三区影院| 亚洲午夜激情av| 91高清视频免费看| 国产精品成人免费在线| 丁香婷婷综合色啪| 日韩激情一区二区| 99精品热视频| 国产精品久久久久久亚洲毛片 | 五月天久久比比资源色| 色嗨嗨av一区二区三区| 亚洲天堂中文字幕| 暴力调教一区二区三区| 中文字幕第一区综合| 国产精品自拍三区| 久久人人97超碰com| 极品少妇一区二区| 久久综合久久鬼色中文字|