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

📄 feiruocodedlg.cpp

📁 实现费偌
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// FeiruoCodeDlg.cpp : implementation file
//

#include "stdafx.h"
#include "FeiruoCode.h"
#include "FeiruoCodeDlg.h"

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

static Result result[8];
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

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

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

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

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

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFeiruoCodeDlg dialog

CFeiruoCodeDlg::CFeiruoCodeDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CFeiruoCodeDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFeiruoCodeDlg)
	m_symbol1 = 1;
	m_symbol2 = 2;
	m_symbol3 = 3;
	m_symbol4 = 4;
	m_symbol5 = 5;
	m_symbol8 = 8;
	m_symbol7 = 7;
	m_symbol6 = 6;
	m_dPXinxiLiang1 = 0.0;
	m_dPXinxiLiang2 = 0.0;
	m_dPXinxiLiang3 = 0.0;
	m_dPXinxiLiang4 = 0.0;
	m_dPXinxiLiang5 = 0.0;
	m_dPXinxiLiang6 = 0.0;
	m_dPXinxiLiang7 = 0.0;
	m_dPXinxiLiang8 = 0.0;
	m_dProbabilty1 = 0.0;
	m_dProbabilty2 = 0.0;
	m_dProbabilty3 = 0.0;
	m_dProbabilty4 = 0.0;
	m_dProbabilty5 = 0.0;
	m_dProbabilty6 = 0.0;
	m_dProbabilty7 = 0.0;
	m_dProbabilty8 = 0.0;
	m_strAfterCode = _T("");
	m_strBeforeCode = _T("");
	m_dFeinuoAvgCodeLen = 0.0;
	m_strFeinuoBinaryCode1 = _T("");
	m_strFeinuoBinaryCode2 = _T("");
	m_strFeinuoBinaryCode3 = _T("");
	m_strFeinuoBinaryCode4 = _T("");
	m_strFeinuoBinaryCode5 = _T("");
	m_strFeinuoBinaryCode6 = _T("");
	m_strFeinuoBinaryCode7 = _T("");
	m_strFeinuoBinaryCode8 = _T("");
	m_dFeinuoCodeEff = 0.0;
	m_FeinuoCodeLen1 = 0;
	m_FeinuoCodeLen2 = 0;
	m_FeinuoCodeLen3 = 0;
	m_FeinuoCodeLen4 = 0;
	m_FeinuoCodeLen5 = 0;
	m_FeinuoCodeLen6 = 0;
	m_FeinuoCodeLen7 = 0;
	m_FeinuoCodeLen8 = 0;
	m_dHafuAvgCodeLen = 0.0;
	m_strHafuBinaryCode1 = _T("");
	m_strHafuBinaryCode2 = _T("");
	m_strHafuBinaryCode3 = _T("");
	m_strHafuBinaryCode4 = _T("");
	m_strHafuBinaryCode5 = _T("");
	m_strHafuBinaryCode6 = _T("");
	m_strHafuBinaryCode7 = _T("");
	m_strHafuBinaryCode8 = _T("");
	m_dHafuCodeEff = 0.0;
	m_HafuCodeLen1 = 0;
	m_HafuCodeLen2 = 0;
	m_HafuCodeLen3 = 0;
	m_HafuCodeLen4 = 0;
	m_HafuCodeLen5 = 0;
	m_HafuCodeLen6 = 0;
	m_HafuCodeLen7 = 0;
	m_HafuCodeLen8 = 0;
	m_dShanooAvgCodeLen = 0.0;
	m_strShanooBinaryCode1 = _T("");
	m_strShanooBinaryCode2 = _T("");
	m_strShanooBinaryCode3 = _T("");
	m_strShanooBinaryCode4 = _T("");
	m_strShanooBinaryCode5 = _T("");
	m_strShanooBinaryCode6 = _T("");
	m_strShanooBinaryCode7 = _T("");
	m_strShanooBinaryCode8 = _T("");
	m_dShanoocodeEff = 0.0;
	m_ShanooCodeLen1 = 0;
	m_ShanooCodeLen2 = 0;
	m_ShanooCodeLen3 = 0;
	m_ShanooCodeLen4 = 0;
	m_ShanooCodeLen5 = 0;
	m_ShanooCodeLen6 = 0;
	m_ShanooCodeLen7 = 0;
	m_ShanooCodeLen8 = 0;
	m_dShanooPSum1 = 0.0;
	m_dShanooPSum2 = 0.0;
	m_dShanooPSum3 = 0.0;
	m_dShanooPSum4 = 0.0;
	m_dShanooPSum5 = 0.0;
	m_dShanooPSum6 = 0.0;
	m_dShanooPSum7 = 0.0;
	m_dShanooPSum8 = 0.0;
	m_dSorceShang = 0.0;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFeiruoCodeDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFeiruoCodeDlg)
	DDX_Text(pDX, IDC_ESYMBOL1, m_symbol1);
	DDX_Text(pDX, IDC_ESYMBOL2, m_symbol2);
	DDX_Text(pDX, IDC_ESYMBOL3, m_symbol3);
	DDX_Text(pDX, IDC_ESYMBOL4, m_symbol4);
	DDX_Text(pDX, IDC_ESYMBOL5, m_symbol5);
	DDX_Text(pDX, IDC_ESYMBOL8, m_symbol8);
	DDX_Text(pDX, IDC_ESYMBOL7, m_symbol7);
	DDX_Text(pDX, IDC_ESYMBOL6, m_symbol6);
	DDX_Text(pDX, IDC_EPINXILIANG1, m_dPXinxiLiang1);
	DDX_Text(pDX, IDC_EPINXILIANG2, m_dPXinxiLiang2);
	DDX_Text(pDX, IDC_EPINXILIANG3, m_dPXinxiLiang3);
	DDX_Text(pDX, IDC_EPINXILIANG4, m_dPXinxiLiang4);
	DDX_Text(pDX, IDC_EPINXILIANG5, m_dPXinxiLiang5);
	DDX_Text(pDX, IDC_EPINXILIANG6, m_dPXinxiLiang6);
	DDX_Text(pDX, IDC_EPINXILIANG7, m_dPXinxiLiang7);
	DDX_Text(pDX, IDC_EPINXILIANG8, m_dPXinxiLiang8);
	DDX_Text(pDX, IDC_EPROBABILTY1, m_dProbabilty1);
	DDX_Text(pDX, IDC_EPROBABILTY2, m_dProbabilty2);
	DDX_Text(pDX, IDC_EPROBABILTY3, m_dProbabilty3);
	DDX_Text(pDX, IDC_EPROBABILTY4, m_dProbabilty4);
	DDX_Text(pDX, IDC_EPROBABILTY5, m_dProbabilty5);
	DDX_Text(pDX, IDC_EPROBABILTY6, m_dProbabilty6);
	DDX_Text(pDX, IDC_EPROBABILTY7, m_dProbabilty7);
	DDX_Text(pDX, IDC_EPROBABILTY8, m_dProbabilty8);
	DDX_Text(pDX, IDC_EAFTERCODE, m_strAfterCode);
	DDX_Text(pDX, IDC_EBEFORECODE, m_strBeforeCode);
	DDX_Text(pDX, IDC_EFEINUOAVGCODELGN, m_dFeinuoAvgCodeLen);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE1, m_strFeinuoBinaryCode1);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE2, m_strFeinuoBinaryCode2);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE3, m_strFeinuoBinaryCode3);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE4, m_strFeinuoBinaryCode4);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE5, m_strFeinuoBinaryCode5);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE6, m_strFeinuoBinaryCode6);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE7, m_strFeinuoBinaryCode7);
	DDX_Text(pDX, IDC_EFEINUOBINARYCODE8, m_strFeinuoBinaryCode8);
	DDX_Text(pDX, IDC_EFEINUOCODEEFFICIENT, m_dFeinuoCodeEff);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH1, m_FeinuoCodeLen1);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH2, m_FeinuoCodeLen2);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH3, m_FeinuoCodeLen3);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH4, m_FeinuoCodeLen4);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH5, m_FeinuoCodeLen5);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH6, m_FeinuoCodeLen6);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH7, m_FeinuoCodeLen7);
	DDX_Text(pDX, IDC_EFEINUOCODELENGTH8, m_FeinuoCodeLen8);
	DDX_Text(pDX, IDC_EHAFUAVGCODELGN, m_dHafuAvgCodeLen);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE1, m_strHafuBinaryCode1);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE2, m_strHafuBinaryCode2);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE3, m_strHafuBinaryCode3);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE4, m_strHafuBinaryCode4);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE5, m_strHafuBinaryCode5);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE6, m_strHafuBinaryCode6);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE7, m_strHafuBinaryCode7);
	DDX_Text(pDX, IDC_EHAFUBINARYCODE8, m_strHafuBinaryCode8);
	DDX_Text(pDX, IDC_EHAFUCODEEFFICIENT, m_dHafuCodeEff);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH1, m_HafuCodeLen1);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH2, m_HafuCodeLen2);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH3, m_HafuCodeLen3);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH4, m_HafuCodeLen4);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH5, m_HafuCodeLen5);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH6, m_HafuCodeLen6);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH7, m_HafuCodeLen7);
	DDX_Text(pDX, IDC_EHAFUCODELENGTH8, m_HafuCodeLen8);
	DDX_Text(pDX, IDC_ESHANOOAVGCODELGN, m_dShanooAvgCodeLen);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE1, m_strShanooBinaryCode1);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE2, m_strShanooBinaryCode2);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE3, m_strShanooBinaryCode3);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE4, m_strShanooBinaryCode4);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE5, m_strShanooBinaryCode5);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE6, m_strShanooBinaryCode6);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE7, m_strShanooBinaryCode7);
	DDX_Text(pDX, IDC_ESHANOOBINARYCODE8, m_strShanooBinaryCode8);
	DDX_Text(pDX, IDC_ESHANOOCODEEFFICIENT, m_dShanoocodeEff);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH1, m_ShanooCodeLen1);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH2, m_ShanooCodeLen2);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH3, m_ShanooCodeLen3);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH4, m_ShanooCodeLen4);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH5, m_ShanooCodeLen5);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH6, m_ShanooCodeLen6);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH7, m_ShanooCodeLen7);
	DDX_Text(pDX, IDC_ESHANOOCODELENGTH8, m_ShanooCodeLen8);
	DDX_Text(pDX, IDC_ESHANOOPSUM1, m_dShanooPSum1);
	DDX_Text(pDX, IDC_ESHANOOPSUM2, m_dShanooPSum2);
	DDX_Text(pDX, IDC_ESHANOOPSUM3, m_dShanooPSum3);
	DDX_Text(pDX, IDC_ESHANOOPSUM4, m_dShanooPSum4);
	DDX_Text(pDX, IDC_ESHANOOPSUM5, m_dShanooPSum5);
	DDX_Text(pDX, IDC_ESHANOOPSUM6, m_dShanooPSum6);
	DDX_Text(pDX, IDC_ESHANOOPSUM7, m_dShanooPSum7);
	DDX_Text(pDX, IDC_ESHANOOPSUM8, m_dShanooPSum8);
	DDX_Text(pDX, IDC_ESORCESHANG, m_dSorceShang);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFeiruoCodeDlg, CDialog)
	//{{AFX_MSG_MAP(CFeiruoCodeDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BAUTODISTUBTE, OnBautodistubte)
	ON_BN_CLICKED(IDC_BBEGINCODE, OnBbegincode)
	ON_BN_CLICKED(IDC_BHELP, OnBhelp)
	ON_BN_CLICKED(IDC_BCLEAR, OnBclear)
	ON_BN_CLICKED(IDC_BABOUT, OnBabout)
	ON_BN_CLICKED(IDC_BEXIT, OnBexit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFeiruoCodeDlg message handlers

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

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	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);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

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

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CFeiruoCodeDlg::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	CRect rect;
	GetClientRect(&rect);
	CBrush* br=new CBrush(RGB(253,208,253));
	if(br)
	{
		dc.FillRect(&rect,br);
		delete br;
	}
	
	if (IsIconic())
	{
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
	
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CFeiruoCodeDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

//自动分配按钮
void CFeiruoCodeDlg::OnBautodistubte() 
{
	// TODO: Add your control notification handler code here
	OnBclear();

	//获取随机数
	srand((unsigned)time(NULL));//随机数种子,用来保证每次取得随机数都不同
	int i;
	int data[100];
	for(i=0;i<100;i++)
		data[i]=rand()%8+1;
	
	//将所获得的随机数在编辑框中显示出来
	char buf[100];
	for(i=0;i<100;i++)
	{
		_itoa(data[i],buf,10);
		m_strBeforeCode=m_strBeforeCode+buf;
	}
	UpdateData(false);
}

//实现费诺编码算法的递归调用
int CFeiruoCodeDlg::feinuocode(int low,int high)
{
	int m=low,n=high;
	int i;

	if(m==n)
		return 1;
	else if(m+1==n)
	{
		feinuobinarycode[m]+="0";
		feinuobinarycode[n]+="1";
		feinuocodelen[m]+=1;
		feinuocodelen[n]+=1;
		return 1;
	}
	//将概率分成两组
	else
	{
		double sum0=0,sum1=0,sum2=0;
		for(i=m;i<=n;i++)
			sum0+=probablity[i];
		do
		{
			sum1+=probablity[m];
			sum2=sum1+probablity[m+1];
			m++;
		}while((fabs(sum1/sum0-0.5))>(fabs(sum2/sum0-0.5)));
		for(i=low;i<m;i++)
		{
			feinuobinarycode[i]+="0";
			feinuocodelen[i]+=1;
		}
		for(i=m;i<=n;i++)
		{
			feinuobinarycode[i]+="1";
			feinuocodelen[i]+=1;
		}
	}
	//递归调用此函数
	feinuocode(low,m-1);
	feinuocode(m,high);
	return 1;
}

//实现哈夫曼编码算法的递归调用
void CFeiruoCodeDlg::HafuCode()
{
	class InputArray Array[8];
	double temp=0;
	double probSum=0;//两个最小概率之和
	int i,j,k;

	//初始化Array中的值
	for(i=0;i<8;i++)
	{
		Array[i].symbol=(char)symbol[i];
		Array[i].probality=probablity[i];
	}
	Node * p;
	for(i=0;i<8;i++)
	{
		p=(Node *)malloc(sizeof(Node));
		Array[i].addr=p;
		p->pLeft=NULL;
		p->pRight=NULL;
		p->symbol=(char)i;
	}

	int depth=0;//用于记录Hafu编码算法做了几次
	Node *pLeft,*pRight;
	while(probSum<1)
	{
		probSum=Array[7-depth].probality+Array[7-depth-1].probality;
		pLeft=Array[7-depth].addr;
		pRight=Array[7-depth-1].addr;
		j=0;
		Array[7-depth].probality=Array[7-depth-1].probality=0;
		
		//若所加的概率之和与剩下的每个符号的概率相比较,若小于则继续比较
		while(probSum<Array[j].probality)
			j++;
		//否则的话,就将其下所有的符号概率都向下移一位
		if(j<(7-depth-1))
		{
			for(k=7-depth-2;k>=j;k--)
			{
				Array[k+1].symbol=Array[k].symbol;
				Array[k+1].addr=Array[k].addr;
				Array[k+1].probality=Array[k].probality;
			}
		}
		Array[j].symbol=(char)depth;
		p=(Node *)malloc(sizeof(Node));
		Array[j].addr=p;
		Array[j].probality=probSum;
		p->pLeft=pLeft;
		p->pRight=pRight;
		p->symbol=Array[j].symbol;
		depth++;
	}
	p=Array[0].addr;
	Traverse(p,-1);
	CString strTemp;
	for(i=0;i<8;i++)
	{
		for(j=0;j<=result[i].codelen;j++)
		{
			strTemp=result[i].binarycode[j];
			Hafubinarycode[i]+=strTemp;
		}
		strTemp="";
		Hafucodelen[i]=result[i].codelen+1;
	}
}
//遍历二叉树,取得码长及码字
void CFeiruoCodeDlg::Traverse(Node *Tree, int depth)
{
	static char binarycode[8];
	static int value;
	if(Tree->pRight!=NULL)
	{
		depth++;
		binarycode[depth]='0';
		Traverse(Tree->pRight,depth);
		binarycode[depth]='1';
		Traverse(Tree->pLeft,depth);
		depth--;
	}
	else
	{
		value=Tree->symbol;
		result[value].symbol=Tree->symbol;
		result[value].codelen=depth;
		for(int j=0;j<=depth;j++)
			result[value].binarycode[j]=binarycode[j];
	}
}

//开始编码按钮操作
void CFeiruoCodeDlg::OnBbegincode() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	double sum[8];
	int i,j;
	for(i=0;i<8;i++)
	{
		sum[i]=0.0;
		symbol[i]=i+1;
	}
	
	//计算各个符号出现的次数
	for(i=0;i<100;i++)
	{
		if(m_strBeforeCode.GetAt(i)=='1')
			sum[0]++;
		if(m_strBeforeCode.GetAt(i)=='2')

⌨️ 快捷键说明

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