📄 dlg.cpp
字号:
// Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "MyLEX.h"
#include "Dlg.h"
#include ".\dlg.h"
// CDlg 对话框
extern CString content1;
IMPLEMENT_DYNAMIC(CDlg, CDialog)
CDlg::CDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDlg::IDD, pParent)
{
pos=0;
}
CDlg::~CDlg()
{
}
void CDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_list);
}
BEGIN_MESSAGE_MAP(CDlg, CDialog)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_LBN_SELCHANGE(IDC_LIST1, OnLbnSelchangeList1)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// CDlg 消息处理程序
BOOL CDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect rect;
::GetWindowRect(::GetDesktopWindow(),rect);
SetWindowPos(&wndTop,0,0,rect.right,rect.bottom,SWP_DRAWFRAME);
m_list.SetCurSel(0);
int j=0;CString s;
int ll=content1.GetLength();
m_list.ResetContent();
while(j<ll)
{
while(j<ll&&content1.GetAt(j)!='\r'&&content1.GetAt(j)!='\n')
{
s+=content1.GetAt(j);
j++;
}
if(s!="")
m_list.AddString(s);
s="";j++;
}
brush1=new CBrush(RGB(0,255,0));
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void CDlg::drawTree(TreeNode* root,LONG left,LONG right,CDC* dc,int f)
{
if(!root->list.length)
{
int i=0;
int len=1;
LONG p1=(right+left)/2;
LONG p2=left+((2*i+1)*(right-left))/(2*len);
dc->SetBkMode(TRANSPARENT);
CSize size;
size=dc->GetTextExtent(root->name);
CBrush *brush,*pOldBrush;
brush=new CBrush(RGB(0,255,0));
pOldBrush=dc->SelectObject(brush);
dc->Ellipse(p1-size.cx/2,f*60-10,p1+size.cx/2,f*60+10);
dc->SelectObject(pOldBrush);
dc->TextOut(p1-size.cx/2,f*60-size.cy/2,root->name);
return ;
}
else
{
int len=root->list.length;
for(int i=0;i<len;i++)
{
LONG p1,p2;
if(i+1<len&&root->list.Find(i+2)->list.length==1&&root->list.Find(i+2)->list.Find(1)->list.length==0
&&i>0&&root->list.Find(i)->list.length==1&&root->list.Find(i)->list.Find(1)->list.length==0
&&root->list.Find(i+1)->list.length==1&&f<6)
{
p1=(right+left)/2;
p2=left+((2*i+1)*(right-left))/(2*len);
dc->MoveTo(p1,60*f);
dc->LineTo(p2,60*(f+1));
dc->SetBkMode(TRANSPARENT);
CSize size;
size=dc->GetTextExtent(root->name);
CBrush *brush,*pOldBrush;
brush=new CBrush(RGB(0,255,0));
pOldBrush=dc->SelectObject(brush);
dc->Ellipse(p1-size.cx/2,f*60-10,p1+size.cx/2,f*60+10);
dc->SelectObject(pOldBrush);
dc->TextOut(p1-size.cx/2,f*60-size.cy/2,root->name);
drawTree(root->list.Find(i+1),left,right,dc,f+1);
}
else if(i+1<len&&root->list.Find(i+2)->list.length==1&&root->list.Find(i+2)->list.Find(1)->list.length==0
&&root->list.Find(i+1)->list.length==1&&f<6)
{
p1=(right+left)/2;
p2=left+((i+1)*(right-left))/len;
dc->MoveTo(p1,60*f);
dc->LineTo(p2,60*(f+1));
dc->SetBkMode(TRANSPARENT);
CSize size;
size=dc->GetTextExtent(root->name);
CBrush *brush,*pOldBrush;
brush=new CBrush(RGB(0,255,0));
pOldBrush=dc->SelectObject(brush);
dc->Ellipse(p1-size.cx/2,f*60-10,p1+size.cx/2,f*60+10);
dc->SelectObject(pOldBrush);
dc->TextOut(p1-size.cx/2,f*60-size.cy/2,root->name);
drawTree(root->list.Find(i+1),p2-(right-left)/len,p2+(right-left)/len,dc,f+1);
}
else if(i>0&&root->list.Find(i)->list.length==1&&root->list.Find(i)->list.Find(1)->list.length==0
&&root->list.Find(i+1)->list.length==1&&f<6)
{
p1=(right+left)/2;
p2=left+(i*(right-left))/(2*len);
dc->MoveTo(p1,60*f);
dc->LineTo(p2,60*(f+1));
dc->SetBkMode(TRANSPARENT);
CSize size;
size=dc->GetTextExtent(root->name);
CBrush *brush,*pOldBrush;
brush=new CBrush(RGB(0,255,0));
pOldBrush=dc->SelectObject(brush);
dc->Ellipse(p1-size.cx/2,f*60-10,p1+size.cx/2,f*60+10);
dc->SelectObject(pOldBrush);
dc->TextOut(p1-size.cx/2,f*60-size.cy/2,root->name);
drawTree(root->list.Find(i+1),p2-(right-left)/len,p2-(right-left)/len,dc,f+1);
}
else
{
p1=(right+left)/2;
p2=left+((2*i+1)*(right-left))/(2*len);
dc->MoveTo(p1,60*f);
dc->LineTo(p2,60*(f+1));
dc->SetBkMode(TRANSPARENT);
CSize size;
size=dc->GetTextExtent(root->name);
CBrush *brush,*pOldBrush;
brush=new CBrush(RGB(0,255,0));
pOldBrush=dc->SelectObject(brush);
dc->Ellipse(p1-size.cx/2,f*60-10,p1+size.cx/2,f*60+10);
dc->SelectObject(pOldBrush);
dc->TextOut(p1-size.cx/2,f*60-size.cy/2,root->name);
drawTree(root->list.Find(i+1),p2-(right-left)/(2*len)-25,p2+(right-left)/(2*len)+25,dc,f+1);
}
}
}
}
void CDlg::OnPaint()
{
CPaintDC dc(this);
CRect rect;
::GetWindowRect(::GetDesktopWindow(),rect);
// GetWindowRect(&rect);
extern List<TreeNode*> P;
CPen*pen,*pOldPen;
pen=new CPen(PS_SOLID, 2, RGB(255,0,0));
pOldPen=dc.SelectObject(pen);
if(P.length)
{
drawTree(P.Find(pos+1),rect.left,rect.right,&dc,1);
}
dc.SelectObject(pOldPen);
// device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
}
void CDlg::OnBnClickedButton1()
{
pos++;
extern List<TreeNode*> P;
pos=pos%(P.length);
m_list.SetCurSel(pos);
m_list.Invalidate();
Invalidate();
}
void CDlg::OnLbnSelchangeList1()
{
pos=m_list.GetCurSel();
extern List<TreeNode*> P;
pos=pos%(P.length);
Invalidate();
}
HBRUSH CDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if(nCtlColor==CTLCOLOR_LISTBOX||CTLCOLOR_EDIT||CTLCOLOR_MSGBOX)
{
pDC->SetTextColor(RGB(255, 0, 0));
hbr=(HBRUSH)brush1;
//pDC->SetBkColor(RGB(0,255,255));
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -