📄 osdlg.cpp
字号:
// 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 + -