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

📄 chtrecnerodlg.cpp

📁 用VC开发的nero刻录程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	FreeAllItemInfo();
	CDialog::OnOK();
}

void CChtRecNeroDlg::OnCancel() 
{
	NeroAPIFree();
	FreeAllItemInfo();
	CDialog::OnCancel();
}

void CChtRecNeroDlg::OnButton5()
{
	if(m_pndiDeviceInfos->nsdisNumDevInfos!=1)
	{
		int i = m_cbxDevices.GetCurSel();
		NERO_SCSI_DEVICE_INFO* nsdiDevice =(NERO_SCSI_DEVICE_INFO*)m_cbxDevices.GetItemDataPtr(i);
		m_ndhDeviceHandle = NeroOpenDevice(nsdiDevice);
		if (!m_ndhDeviceHandle)
		{
			AfxMessageBox("Device could not be opened: "+(CString)nsdiDevice->nsdiDeviceName);
		}
		else
		{
			m_strMediaType= "<no media>";
			DWORD dwFlags=0;
			m_NeroCDInfo=NeroGetCDInfo (m_ndhDeviceHandle, dwFlags);
			if (NULL != m_NeroCDInfo)
			{
				char * psMedia = NeroGetTypeNameOfMedia (m_NeroCDInfo->ncdiMediaType, NULL);
				if (psMedia != NULL && psMedia[0] != '\0')
				{
					m_strMediaType=CString(psMedia);
					if(m_strMediaType=="CD-RW")
					m_btnErase.EnableWindow(true);
					NeroFreeMem (psMedia);
					
				}
				else
				{
					m_strMediaType= "<no media>";
				}
				m_strPlusValue.Format("%dM",(int)((float)m_NeroCDInfo->ncdiFreeCapacityInBlocks/359849*700));
				m_strCapValue.Format("%dM",(int)((float)m_NeroCDInfo->ncdiTotalCapacity/359849*700));
				
			}
			UpdateData(FALSE);
			NeroFreeMem (m_NeroCDInfo);
		}
		 NeroCloseDevice(m_ndhDeviceHandle);
	}
	else{m_btnBrowse.EnableWindow(false);
		AfxMessageBox("No Real Drive");}
}

void CChtRecNeroDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	HTREEITEM hItem=m_Tree.GetSelectedItem();
	//TRACE("sd %d",hItem);
	if(hItem==m_Tree.GetRootItem())
	{
		PRInfo pinfo = new RInfo;
		pinfo->isDir=TRUE;
		pinfo->FullName="";
		m_Tree.SetItemData(hItem,(DWORD)pinfo);
	}
	if(hItem)
	{
		CPoint cPoint ;
		GetCursorPos(&cPoint) ;
		CMenu menu;
		menu.LoadMenu(IDR_CONTEXTMENU);
		bool isDirectory=((PRInfo)m_Tree.GetItemData(hItem))->isDir;
		if(isDirectory==TRUE||hItem==m_Tree.GetRootItem())
		menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,cPoint.x,cPoint.y,AfxGetMainWnd());
		else
			menu.GetSubMenu(1)->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,cPoint.x,cPoint.y,AfxGetMainWnd());
		*pResult = 0;
	}
}

void CChtRecNeroDlg::OnMenuadd() 
{
	static char BASED_CODE szFilterData[] = "All Files (*.*)|*.*||";
	CFileDialog dlgOpen(TRUE, NULL, NULL, OFN_FILEMUSTEXIST |OFN_ALLOWMULTISELECT, szFilterData, this);
	if (dlgOpen.DoModal() == IDOK)
	{
		POSITION pos = dlgOpen.GetStartPosition();
		while (pos != NULL)
		{
			CString filename = dlgOpen.GetNextPathName(pos);
			HANDLE hFile;
			DWORD dwFileSize;
			hFile = CreateFile(filename, GENERIC_READ, 0, NULL, 
				OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

			if (hFile != INVALID_HANDLE_VALUE)
				//AfxMessageBox("fgh");
			dwFileSize = GetFileSize(hFile, NULL);
			m_dTotalSize+=dwFileSize;
			m_strTotalSize.Format("%ldM",m_dTotalSize/1024/1024);
			m_dFileNum++;
			UpdateData(FALSE);
			InvalidateRect(NULL,FALSE);	
			CloseHandle(hFile);
			PRInfo pinfo = new RInfo;
			pinfo->isDir=FALSE;
			pinfo->FullName=filename;
			HTREEITEM hItem=AddItem(filename, m_Tree.GetSelectedItem());
			m_Tree.SetItemData(hItem,(DWORD)pinfo);
			/*if (m_lstFileList.FindString(0, filename) == LB_ERR)
			{
				m_lstFileList.AddString(filename);
			}*/
		}
	}
	//AddItem("F:\\U-571\\B.RMVB", NULL);
}

void CChtRecNeroDlg::OnMenunew() 
{
	int foldclose = m_SmallImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
	int foldopen  = m_SmallImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
	m_Tree.SetImageList (&m_SmallImageList,LVSIL_NORMAL);
	HTREEITEM hItem=m_Tree.GetSelectedItem();
	hItem=m_Tree.InsertItem("新建文件夹", foldopen, foldclose, hItem);
	PRInfo pinfo = new RInfo;
	pinfo->isDir=TRUE;
	pinfo->FullName="";
    m_Tree.SetItemData(hItem,(DWORD)pinfo);
}

HTREEITEM CChtRecNeroDlg::AddItem(const char *path, HTREEITEM parent, bool isDir, int iconEx, int iconEx2)
{
	SHFILEINFO shinfo, shinfo_sel;

	SHGetFileInfo( path, NULL, 
				   &shinfo, 
				   sizeof(shinfo), 
				   SHGFI_DISPLAYNAME | SHGFI_ICON | SHGFI_SMALLICON);

	SHGetFileInfo( path, NULL, 
				   &shinfo_sel, 
				   sizeof(shinfo_sel), 
				   SHGFI_DISPLAYNAME |  SHGFI_ICON | SHGFI_OPENICON | SHGFI_SMALLICON);

	int icon    = iconEx!=-1 ? iconEx : m_SmallImageList.Add(shinfo.hIcon);
    int iconsel = iconEx2!=-1 ? iconEx2 : m_SmallImageList.Add(shinfo_sel.hIcon);
	m_Tree.SetImageList (&m_SmallImageList,LVSIL_NORMAL);
	//DeviceName = shinfo.szDisplayName;
	HTREEITEM hitm;
	hitm=m_Tree.InsertItem( shinfo.szDisplayName, icon+1, iconsel, parent);
	//if (isDir) m_Tree.InsertItem( "",hitm);
	return hitm;
}

void CChtRecNeroDlg::OnEndlabeleditTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
	HTREEITEM hItem=m_Tree.GetSelectedItem();
	//GetItemText(hItem);
	CString SZ;
	m_Tree.GetEditControl()->GetWindowText(SZ);
	m_Tree.SetItemText(hItem,SZ);
	*pResult = 0;
}

NERO_ISO_ITEM* CChtRecNeroDlg::DeepIntoNode(HTREEITEM hItem,NERO_ISO_ITEM*niiFatherItem)
{int i=0;
NERO_ISO_ITEM* first      =0;
NERO_ISO_ITEM* firsttemp  =0;
HTREEITEM hItemInit=hItem;
	while(hItem)
	{
		bool isDirectory=((PRInfo)m_Tree.GetItemData(hItem))->isDir;
		NERO_ISO_ITEM* pniiNewItem1 = NeroCreateIsoItem();
		memset(pniiNewItem1, 0, sizeof(NERO_ISO_ITEM));
		if (m_pniiFile == 0)
		m_pniiFile = pniiNewItem1;
		if(isDirectory==TRUE)
		{
			if(!m_Tree.GetChildItem(hItem))
			{
				CString dirname=m_Tree.GetItemText(hItem);
				pniiNewItem1->longFileName = strdup(dirname);
				pniiNewItem1->longSourceFilePath = strdup("");
				pniiNewItem1->isDirectory =TRUE;
				pniiNewItem1->isReference = FALSE;
				pniiNewItem1->unicodeFileName = NULL;
				pniiNewItem1->nextItem = NULL;
			}
			else
			{
				CString dirname=m_Tree.GetItemText(hItem);
				pniiNewItem1->longFileName = strdup(dirname);
				pniiNewItem1->longSourceFilePath = strdup("");
				pniiNewItem1->isDirectory =TRUE;
				pniiNewItem1->isReference = FALSE;
				pniiNewItem1->unicodeFileName = NULL;
				pniiNewItem1->nextItem = NULL;
				hItem=m_Tree.GetChildItem(hItem);
				pniiNewItem1->subDirFirstItem=DeepIntoNode(hItem,pniiNewItem1);
				hItem=m_Tree.GetParentItem(hItem);
			}
		}
		else
		{
			CString filename=((PRInfo)m_Tree.GetItemData(hItem))->FullName;
			char path[MAX_PATH];
			char* name;
			GetFullPathName(filename, MAX_PATH, path, &name);
			pniiNewItem1->longFileName = strdup(name);
			pniiNewItem1->longSourceFilePath = strdup(path);
			pniiNewItem1->isDirectory =FALSE;
			pniiNewItem1->isReference = FALSE;
			pniiNewItem1->unicodeFileName = NULL;
			pniiNewItem1->nextItem = NULL;
			
		}
		i++;
		if(firsttemp)
		firsttemp->nextItem=pniiNewItem1;
		firsttemp=pniiNewItem1;
		if(i==1)
		first=firsttemp;
		hItem=m_Tree.GetNextSiblingItem(hItem);
	}
	
	return first;
}

void CChtRecNeroDlg::FreeAllItemInfo()
{
	HTREEITEM hItem=m_Tree.GetRootItem();
	PRInfo info=(PRInfo)m_Tree.GetItemData(hItem);
	if(info!=NULL)
	{
		delete info;
		m_Tree.SetItemData(hItem,0);
		AfxMessageBox("root");
	}
	hItem=m_Tree.GetChildItem(hItem);
	while(hItem)
	{
		if(m_Tree.GetChildItem(hItem))
		_FreeAllItemInfo(hItem);
		info=(PRInfo)m_Tree.GetItemData(hItem);
		if(info!=NULL)
		{
			delete info;
			m_Tree.SetItemData(hItem,0);
			AfxMessageBox("subone");
		}
		hItem=m_Tree.GetNextSiblingItem(hItem);
	}
}

void CChtRecNeroDlg::_FreeAllItemInfo(HTREEITEM hItem)
{
    hItem=m_Tree.GetChildItem(hItem);
	while(hItem)
	{
		if(m_Tree.GetChildItem(hItem))
		_FreeAllItemInfo(hItem);
		PRInfo info=(PRInfo)m_Tree.GetItemData(hItem);
		if(info!=NULL)
		{
			delete info;
			m_Tree.SetItemData(hItem,0);
			AfxMessageBox("subtwo");
		}
		hItem=m_Tree.GetNextSiblingItem(hItem);
	}
}

void CChtRecNeroDlg::OnMenufidel() 
{
	HTREEITEM hItem=m_Tree.GetSelectedItem();
	bool isDirectory=((PRInfo)m_Tree.GetItemData(hItem))->isDir;
	if(isDirectory==FALSE)
	{
		CString filename=((PRInfo)m_Tree.GetItemData(hItem))->FullName;
		HANDLE hFile;
		DWORD dwFileSize;
		hFile = CreateFile(filename, GENERIC_READ, 0, NULL, 
			OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		if (hFile != INVALID_HANDLE_VALUE)
		dwFileSize = GetFileSize(hFile, NULL);
		m_dTotalSize-=dwFileSize;
		m_strTotalSize.Format("%dM",m_dTotalSize/1024/1024);
		m_dFileNum--;
		UpdateData(FALSE);
		CloseHandle(hFile);
		PRInfo info=(PRInfo)m_Tree.GetItemData(hItem);
		if(info!=NULL)
		{
			delete info;
			m_Tree.SetItemData(hItem,0);
			AfxMessageBox("signle file delete");
		}
		m_Tree.DeleteItem(hItem);
	}
	else
	{
	    if(hItem==m_Tree.GetRootItem())
			return;
		if(m_Tree.GetChildItem(hItem))
		{
			hItem=m_Tree.GetChildItem(hItem);
			while(hItem)
			{
				if(m_Tree.GetChildItem(hItem))
					CountSizeCycle(hItem);
				if(((PRInfo)m_Tree.GetItemData(hItem))->isDir==FALSE)
				{
					CString filename=((PRInfo)m_Tree.GetItemData(hItem))->FullName;
					HANDLE hFile;
					DWORD dwFileSize;
					hFile = CreateFile(filename, GENERIC_READ, 0, NULL, 
						OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
					if (hFile != INVALID_HANDLE_VALUE)
					dwFileSize = GetFileSize(hFile, NULL);
					m_dTotalSize-=dwFileSize;
					m_strTotalSize.Format("%dM",m_dTotalSize/1024/1024);
					m_dFileNum--;
					UpdateData(FALSE);
					CloseHandle(hFile);
				}
				hItem=m_Tree.GetNextSiblingItem(hItem);
			}
		}
		HTREEITEM hItem=m_Tree.GetSelectedItem();
		PRInfo info=(PRInfo)m_Tree.GetItemData(hItem);
		if(info!=NULL)
		{
			delete info;
			m_Tree.SetItemData(hItem,0);
			AfxMessageBox("folder delete");
		}
		hItem=m_Tree.GetChildItem(hItem);
		while(hItem)
		{
			if(m_Tree.GetChildItem(hItem))
			_FreeAllItemInfo(hItem);
			info=(PRInfo)m_Tree.GetItemData(hItem);
			if(info!=NULL)
			{
				delete info;
				m_Tree.SetItemData(hItem,0);
				AfxMessageBox("subone");
			}
			hItem=m_Tree.GetNextSiblingItem(hItem);
		}
		hItem=m_Tree.GetSelectedItem();
		m_Tree.DeleteItem(hItem);
	}
}

void CChtRecNeroDlg::OnMenufodel() 
{
	HTREEITEM hItem=m_Tree.GetSelectedItem();
	if(hItem==m_Tree.GetRootItem())
			return;
	if(m_Tree.GetChildItem(hItem))
	{
		hItem=m_Tree.GetChildItem(hItem);
		while(hItem)
		{
			if(m_Tree.GetChildItem(hItem))
				CountSizeCycle(hItem);
			if(((PRInfo)m_Tree.GetItemData(hItem))->isDir==FALSE)
			{
				CString filename=((PRInfo)m_Tree.GetItemData(hItem))->FullName;
				HANDLE hFile;
				DWORD dwFileSize;
				hFile = CreateFile(filename, GENERIC_READ, 0, NULL, 
					OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
				if (hFile != INVALID_HANDLE_VALUE)
				dwFileSize = GetFileSize(hFile, NULL);
				m_dTotalSize-=dwFileSize;
				m_strTotalSize.Format("%dM",m_dTotalSize/1024/1024);
				m_dFileNum--;
				UpdateData(FALSE);
				CloseHandle(hFile);
			}
			hItem=m_Tree.GetNextSiblingItem(hItem);
		}
	}
	hItem=m_Tree.GetSelectedItem();
	PRInfo info=(PRInfo)m_Tree.GetItemData(hItem);
	if(info!=NULL)
	{
		delete info;
		m_Tree.SetItemData(hItem,0);
		AfxMessageBox("folder delete");
	}
	hItem=m_Tree.GetChildItem(hItem);
	while(hItem)
	{
		if(m_Tree.GetChildItem(hItem))
		_FreeAllItemInfo(hItem);
		info=(PRInfo)m_Tree.GetItemData(hItem);
		if(info!=NULL)
		{
			delete info;
			m_Tree.SetItemData(hItem,0);
			AfxMessageBox("subone");
		}
		hItem=m_Tree.GetNextSiblingItem(hItem);
	}
	hItem=m_Tree.GetSelectedItem();
	m_Tree.DeleteItem(hItem);
}

void CChtRecNeroDlg::OnSetfocusTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	*pResult = 0;
}

BOOL CChtRecNeroDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	if(CWnd::PreTranslateMessage(pMsg))
		return TRUE;
	HTREEITEM hItem=m_Tree.GetRootItem();
	if(!m_Tree.GetChildItem(hItem))
	return 0;
	return ((m_hAccelTable!=NULL)&&
		::TranslateAccelerator(m_hWnd,m_hAccelTable,pMsg));
}

void CChtRecNeroDlg::CountSizeCycle(HTREEITEM hItem)
{
	hItem=m_Tree.GetChildItem(hItem);
	while(hItem)
	{
		if(m_Tree.GetChildItem(hItem))
			CountSizeCycle(hItem);
		if(((PRInfo)m_Tree.GetItemData(hItem))->isDir==FALSE)
		{
			CString filename=((PRInfo)m_Tree.GetItemData(hItem))->FullName;
			HANDLE hFile;
			DWORD dwFileSize;
			hFile = CreateFile(filename, GENERIC_READ, 0, NULL, 
				OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
			if (hFile != INVALID_HANDLE_VALUE)
			dwFileSize = GetFileSize(hFile, NULL);
			m_dTotalSize-=dwFileSize;
			m_strTotalSize.Format("%dM",m_dTotalSize/1024/1024);
			m_dFileNum--;
			UpdateData(FALSE);
			CloseHandle(hFile);
		}
		hItem=m_Tree.GetNextSiblingItem(hItem);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -