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

📄 osdlg.cpp

📁 操作系统课程设计 文件管理 希望对大家有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// OSDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "OS.h"
#include "OSDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 对话框数据
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// COSDlg 对话框




COSDlg::COSDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COSDlg::IDD, pParent)	
	, dizhi(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void COSDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TREE1, tree);
	DDX_Control(pDX, IDC_LIS, list);

	
	DDX_Text(pDX, IDC_dizhi, dizhi);
}

BEGIN_MESSAGE_MAP(COSDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
	ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &COSDlg::OnTvnSelchangedTree)
	ON_BN_CLICKED(IDC_TURN, &COSDlg::OnBnClickedTurn)
	ON_COMMAND(ID_32771, &COSDlg::On32771)
	ON_BN_CLICKED(IDOK, &COSDlg::OnBnClickedOk)
	ON_COMMAND(ID_32773, &COSDlg::Onwenjj)
	ON_COMMAND(ID_32776, &COSDlg::Ondetele)
	ON_COMMAND(ID_32777, &COSDlg::Oncut)
	ON_COMMAND(ID_v, &COSDlg::Onv)
	ON_COMMAND(ID_copy, &COSDlg::Oncopy)	
	ON_COMMAND(ID_32781, &COSDlg::On32781)
	
	ON_NOTIFY(NM_DBLCLK, IDC_LIS, &COSDlg::OnNMDblclkLis)
	
	ON_NOTIFY(NM_CLICK, IDC_LIS, &COSDlg::OnNMClickLis)
	ON_COMMAND(ID_32783, &COSDlg::Onback)
	ON_COMMAND(ID_32782, &COSDlg::Onhelp)
END_MESSAGE_MAP()


// COSDlg 消息处理程序

BOOL COSDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);	// 设置小图标
	selname=_T("XYZ");	
    root=new folder;
	fold=new folder;
	root->child=fold;
	root->brother=NULL;
	root->father=NULL;
	root->files=NULL;
	root->name=_T("");
	fold->name=_T("XXX");
	fold->files=new file;
	  fold->files->name=_T("XXX.xyz");
	  fold->files->context=_T("xxxxxx");
	  fold->files->kind=1;
	  fold->files->prep=NULL;
	  fold->files->size=6;
	  fold->files->next=new file;
	     fold->files->next->prep=fold->files;
	     fold->files->next->context=_T("YYYYY");
	     fold->files->next->kind=0;
	     fold->files->next->name=_T("YYY.xyz");
	     fold->files->next->size=5;
	     fold->files->next->next=NULL;
	fold->father=root;
	fold->kind=11;
	fold->brother=new folder;
	  fold->brother->name=_T("ZZZ");
	  fold->brother->child=NULL;
	  fold->brother->father=root;
	  fold->brother->files=NULL;
	  fold->brother->brother=NULL;
	  fold->brother->kind=11;
	fold->child=new folder;
	  fold->child->name=_T("YYY");
	  fold->child->father=fold;
	  fold->child->child=NULL;
	  fold->child->files=NULL;
	  fold->child->kind=11;
	  fold->child->brother=new folder;
	    fold->child->brother->name=_T("XXY");
	    fold->child->brother->brother=NULL;
	    fold->child->brother->child=NULL;	    
	    fold->child->brother->father=fold;
	    fold->child->brother->files=NULL;
		fold->child->brother->kind=11;	
  flist[0]=root;
	m_theImageList.Create(IDB_TREE_BITMAP,16,1,RGB(0,255,0));//创建图像列表
	list_list.Create(IDB_listim,37,1,RGB(0,255,0));
	tree.SetImageList(&m_theImageList,TVSIL_NORMAL);//树形控件载入位图
	list.SetImageList(&list_list,LVSIL_NORMAL);
	list.SetBkColor(RGB(0,255,255));
	tree.SetBkColor(RGB(0,255,0));
	activeItem=NULL;	
	createtree();	
	tree.Select(xyz,TVGN_CARET);
	tree.SetItemImage(xyz,3,3);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void COSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void COSDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR COSDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


void COSDlg::OnTvnSelchangedTree(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码	
	HTREEITEM SelItem;
	SelItem=tree.GetSelectedItem();//获取选中的子项
	DWORD m;
	tree_list=-1;
	m=tree.GetItemData(SelItem);//读取子项的值	
	if(m)tree.SetItemImage(SelItem,1,1);
	else tree.SetItemImage(SelItem,3,3);//当前活动子项更改图标
    if(activeItem!=xyz)tree.SetItemImage(activeItem,0,0);//先前活动子项更改图标	
	else tree.SetItemImage(activeItem,2,2);
	activeItem=SelItem;	
	CString ss;
	int j=0;
	if(flist[m]!=NULL)
	{
		list.DeleteAllItems();//删除所有列表项
		folder*ff=flist[m]->father;
		ss=flist[m]->name;
		while(ff!=NULL&&ff!=root)
		{
			ss=ff->name+_T("\\")+ss;ff=ff->father;
		}
		dizhi=_T("XYZ:\\\\")+ss;
		UpdateData(0);
		ff=flist[m]->child;
		while(ff!=NULL)
		{	
			
			ss=ff->name;			
			list.InsertItem(j,ss);
			list.SetItemData(j,m);		
			j++;
			ff=ff->brother;
		}
	}
	if(flist[m]->files!=NULL)
	{
		file *ff=flist[m]->files;		
		while(ff!=NULL)
		{		
			ss=ff->name;			
			list.InsertItem(j,ss);
			list.SetItemData(j,m);
			j++;
			ff=ff->next;
		}
	}

	*pResult = 0;
}

void COSDlg::createtree()
{
	
	int flag=3;
	HTREEITEM  Tr,Ttemp;//树形控件的根项
	folder *Ftemp;	
	for(int i=1;i<=100;i++)flist[i]=NULL;
	fpt=1;
	tree.DeleteAllItems();
	tree.SetImageList(&m_theImageList,TVSIL_NORMAL);//树形控件载入位图
	xyz=tree.InsertItem(_T("XYZ"),3,3,NULL);//插入父项    
	tree.SetItemData(xyz,(DWORD)0);//给父项设值
	if(_T("XYZ")==selname)activeItem=xyz;
	if(root->child==NULL)return;
	Ftemp=root->child;
	Tr=tree.InsertItem(Ftemp->name,0,0,xyz);
	flist[fpt]=Ftemp;
	if(Ftemp->name==selname)activeItem=Tr;
	tree.SetItemData(Tr,(DWORD)fpt++);	
	Ttemp=Tr;
	while(1)
	{		
		while(Ftemp->child!=NULL&&flag)
		{
			Ftemp=Ftemp->child;
			Ttemp=tree.InsertItem(Ftemp->name,0,0,Tr);
			flist[fpt]=Ftemp;
			if(Ftemp->name==selname)activeItem=Ttemp;
			tree.SetItemData(Ttemp,(DWORD)fpt++);
			Tr=Ttemp;/**/
		}
		if(Ftemp->brother!=NULL)
		{
			Ftemp=Ftemp->brother;
			Ttemp=tree.InsertItem(Ftemp->name,0,0,tree.GetParentItem(Tr));
			flist[fpt]=Ftemp;
			if(Ftemp->name==selname)activeItem=Ttemp;
			tree.SetItemData(Ttemp,(DWORD)fpt++);
			Tr=Ttemp;
			flag=1;
		}
		else
		{
			Ftemp=Ftemp->father;
			if(Ftemp==NULL)return;
			Ttemp=tree.GetParentItem(Ttemp);
			Tr=Ttemp;
			flag=0;
		}
	}
}

void COSDlg::OnBnClickedTurn()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(1);
	CString sss=dizhi+_T("#");
    HTREEITEM  temp;
	temp=tree.GetChildItem(xyz);
	if(sss.GetLength()>7)
	{
		sss=sss.Right(sss.GetLength()-6);
		CString tem=_T(" ");
		
		while(1)
		{
			
			CString s=sss.Left(1);
			
		while(s!="\\"&&s!="#")
		{
			tem+=s;
			sss=sss.Right(sss.GetLength()-1);
			s=sss.Left(1);
		}
		tem=tem.Right(tem.GetLength()-1);
		while(temp!=NULL&&tem.GetLength())
		{
			if(tree.GetItemText(temp)==tem)
			{
				if(s!="#"){temp=tree.GetChildItem(temp);break;}
				else 
				{
					tree.Select(temp,TVGN_CARET);					
					return;
				}
			}
			else temp=tree.GetNextSiblingItem(temp);
		}
		if(s=="#"||temp==NULL)return;
		sss=sss.Right(sss.GetLength()-1);
		tem=_T(" ");
		}
	}
	else 
	{
		tree.Select(xyz,TVGN_CARET);		
		tree.SetItemImage(xyz,3,3);
	}
}

void COSDlg::create()
{
begain:
	int flag=1,cxc=0;int kind;CString nam;
	kind=xc%2;
	HTREEITEM tem=tree.GetSelectedItem();
	DWORD x=tree.GetItemData(tem);

⌨️ 快捷键说明

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