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

📄 msgshowdlg.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MsgShowDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SF1553.h"
#include "MsgShowDlg.h"

#include <windowsx.h>

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

/////////////////////////////////////////////////////////////////////////////
// CMsgShowDlg dialog


CMsgShowDlg::CMsgShowDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMsgShowDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMsgShowDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	cmd1 = 0;
	cmd2 = 0;

}


void CMsgShowDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMsgShowDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMsgShowDlg, CDialog)
	//{{AFX_MSG_MAP(CMsgShowDlg)
	ON_BN_CLICKED(IDC_MSHOW_BT_GRD, OnMshowBtGrd)
	ON_BN_CLICKED(IDC_MSHOW_BT_GOD, OnMshowBtGod)
	ON_EN_CHANGE(IDC_MSHOW_ED_BASED, OnChangeMshowEdBased)
	ON_EN_KILLFOCUS(IDC_MSHOW_ED_BASED, OnKillfocusMshowEdBased)
	ON_EN_KILLFOCUS(IDC_MSHOW_ED_MINT, OnKillfocusMshowEdMint)
	ON_BN_CLICKED(IDC_MSHOW_CK_BCAST, OnMshowCkBcast)
	ON_BN_CLICKED(IDC_MSHOW_CK_MCODE, OnMshowCkMcode)
	ON_BN_CLICKED(IDC_MSHOW_CK_RTRT, OnMshowCkRtrt)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_DCNT0, OnSelchangeMshowCbDcnt0)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_DCNT1, OnSelchangeMshowCbDcnt1)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_RORT0, OnSelchangeMshowCbRort0)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_RORT1, OnSelchangeMshowCbRort1)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_RTADDR0, OnSelchangeMshowCbRtaddr0)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_RTADDR1, OnSelchangeMshowCbRtaddr1)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_SAADDR0, OnSelchangeMshowCbSaaddr0)
	ON_CBN_SELCHANGE(IDC_MSHOW_CB_SAADDR1, OnSelchangeMshowCbSaaddr1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMsgShowDlg message handlers

BOOL CMsgShowDlg::OnInitDialog() 
{
	INT i = 0;
	CHAR c[80];
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	////////////////////////////////////////////////////
	//	Init GUI
	////////////////////////////////
	//	Set default showing
	//
	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MNAME), TEXT(""));

	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD0), TEXT("0000"));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0));
	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD1), TEXT("0000"));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR1));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1));
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1));

	for (i = 0; i < 32; i++)
	{
		itoa(i, c, 10);
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0), TEXT(c));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR1), TEXT(c));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0), TEXT(c));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1), TEXT(c));

		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0), TEXT(c));
		ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1), TEXT(c));

		::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), TEXT("0"));
	}

	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), TEXT("接收"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), TEXT("发送"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1), TEXT("接收"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1), TEXT("发送"));
	
	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL), TEXT("通道[A]"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL), TEXT("通道[B]"));

	ComboBox_ResetContent(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTYCNT));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTYCNT), TEXT("1"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTYCNT), TEXT("2"));
	ComboBox_AddString(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTYCNT), TEXT("3"));

	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MINT), TEXT("0"));

	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_BASED), TEXT("0"));
	
	//	Limit edit control Text length
	//
	Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MINT), 10);
	Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MNAME), 20);
	for (i=0; i<32; i++)
	{
		Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), 4);
	}
	Edit_LimitText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_BASED), 4);

	//	disVisible RT2
	//
	SetRT2Visible(FALSE);
	ResumeMessage(); // resume message


	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



void CMsgShowDlg::ResumeMessage()
{
	char c[80];
	int i=0, j=0;
	BYTE msgtype = g_TempMsg.msg.MSGFormat;

	//	Message Name
	//
	if (strlen(g_TempMsg.msgname)>0)
	{
		::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MNAME), g_TempMsg.msgname);
	}

	//	Message body
	//
	
	// Channel A/B
	if (g_TempMsg.msg.ChannelSelect==0)
	{
		// channel B selected
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL), 1);
	}
	else
	{
		// channel A selected
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_CHSEL), 0);
	}

	if (g_TempMsg.msg.RetryEnable) // retry enbale
	{
		Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_RTYEN), BST_CHECKED);
	}
	else
	{
		Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_RTYEN), BST_UNCHECKED);
	}


	// Time to next message
	ultoa(g_TempMsg.msg.InterMSGGapTime, c, 10);
	::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_MINT), c);

	// Message Format
	if (msgtype == MSGTYPE_BC_RT)
	{
		Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_MCODE), BST_UNCHECKED); // Mode Code check box
		Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_RTRT), BST_UNCHECKED); // RT to RT check box
		Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST), BST_UNCHECKED); // Broadcast check box

		cmd1 = g_TempMsg.msg.MSGBlock[0]; // retrieve Command Word
		
		this->SetRT2Visible(FALSE); // RT2

		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0), ::OwnRTAddr(cmd1)); // RT Addr
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), ::OwnTR(cmd1)); // T/R
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0), ::OwnSubAddr(cmd1)); // Sub Addr
		ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0), ::OwnWordCount(cmd1)); // Word Count
		// GUI automatic refresh Command Word

		// T/R
		j = ::OwnTR(cmd1);
		if (j==0) // R
		{
			//	Data Configure
			j = ::OwnWordCount(cmd1);
			if (j!=0)
			{
				for (i=0; i<32; i++)
				{
					if (i<j)
					{
						::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), TRUE);
					}
					else
					{
						::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), FALSE);
					}
				}
			}
			else
			{
				// receive 32 data
			}
		}
		else // T
		{
			//	Data Configure
			for (i=0; i<32; i++)
			{
				::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), FALSE);
			}
		}
	}
	else
	{
		if ((msgtype&FMSG_MC) == FMSG_MC) // Mode Code
		{
			Button_SetCheck(::GetDlgItem(m_hWnd, IDC_MSHOW_CK_MCODE), BST_CHECKED);
			cmd1 = g_TempMsg.msg.MSGBlock[0]; // retrieve Command Word
			SetRT2Visible(FALSE); // RT2

			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0), ::OwnRTAddr(cmd1)); // RT Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), ::OwnTR(cmd1)); // T/R
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0), ::OwnSubAddr(cmd1)); // Sub Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0), ::OwnModeCode(cmd1)); // Mode Code
			// GUI automatic refresh Command Word
			
			//	Data Configure
			for (i=0; i<32; i++)
			{
				::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), FALSE);
			}

			j = ::OwnModeCode(cmd1); // retrieve mode code

			if ((msgtype&FMSG_BRDCST) == FMSG_BRDCST) // Broadcast | Mode Code
			{
				switch (j)
				{
					// no data | broadcast | mode code
					//case 0: // dync bus control
					case 1: // sync (no data)
					//case 2: // transmit last status word (no data)
					case 3: // initialize self-test
					case 4: // transmit shut-down
					case 5: // override shut-down
					case 6: // inhibit terminal flag bits
					case 7: // override inhibit terminal flag bits
					case 8: // reset terminal
						break;

					// with data | broadcast | mode code
					//case 16: // transmit vector word
					case 17: // sync (with data)
					//case 18: // transmit last command word (with data)
					//case 19: // transmit sefl-test word
					case 20: // selected transmitor shut-down
					case 21: // inhibit selected transmitor shut-down
						::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0), TRUE);
						break;
					default: // reserved
						break;
				}
			}
			else
			{
				switch (j)
				{
					// no data | mode code
					case 0: // dync bus control
					case 1: // sync (no data)
					case 2: // transmit last status word (no data)
					case 3: // initialize self-test
					case 4: // transmit shut-down
					case 5: // override shut-down
					case 6: // inhibit terminal flag bits
					case 7: // override inhibit terminal flag bits
					case 8: // reset terminal
						break;

					// with data | mode code
					//case 16: // transmit vector word
					case 17: // sync (with data)
					case 18: // transmit last command word (with data)
					//case 19: // transmit sefl-test word
					case 20: // selected transmitor shut-down
					case 21: // inhibit selected transmitor shut-down
						::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0), TRUE);
						break;

					default: // reserved
						break;
				}
			}
		}

		if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT) /// RT-RT
		{
			Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_RTRT), BST_CHECKED);

			cmd1 = g_TempMsg.msg.MSGBlock[0]; // retrieve Command Word 1
			cmd2 = g_TempMsg.msg.MSGBlock[1]; // retrieve Command Word 2
		
			this->SetRT2Visible(TRUE); // RT2

			// RT1
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0), ::OwnRTAddr(cmd1)); // RT Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), ::OwnTR(cmd1)); // T/R
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0), ::OwnSubAddr(cmd1)); // Sub Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0), ::OwnWordCount(cmd1)); // Word Count
			// RT2
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR1), ::OwnRTAddr(cmd2)); // RT Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1), ::OwnTR(cmd2)); // T/R
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1), ::OwnSubAddr(cmd2)); // Sub Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1), ::OwnWordCount(cmd2)); // Word Count
			// GUI automatic refresh Command Word

			//	Data Configure
			for (i=0; i<32; i++)
			{
				::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), FALSE);
			}

			this->SetCmdWord(cmd2, 1);
		}

		if ((msgtype&FMSG_BRDCST) == FMSG_BRDCST) // Broadcast
		{
			Button_SetCheck(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CK_BCAST), BST_CHECKED);

			cmd1 = g_TempMsg.msg.MSGBlock[0]; // retrieve Command Word 1
		
			// RT1
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR0), ::OwnRTAddr(cmd1)); // RT Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT0), ::OwnTR(cmd1)); // T/R
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR0), ::OwnSubAddr(cmd1)); // Sub Addr
			ComboBox_SetCurSel(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT0), ::OwnWordCount(cmd1)); // Word Count

			if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT) /// RT-RT
			{
				// processed.
			}
			else // BC-RT | RT-BC
			{
				if ((msgtype&FMSG_MC) != FMSG_MC) // not Mode Code
				{
					if ((::OwnTR(cmd1))==0)
					{
						j = ::OwnWordCount(cmd1);
						if (j!=0)
						{
							for (i=0; i<32; i++)
							{
								if (i<j)
								{
									::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), TRUE);
								}
								else
								{
									::EnableWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), FALSE);
								}
							}
						}
						else
						{
							// receive 32 data
						}
					}
				}
				else
				{
					// processed.
				}
			}
		}
	} // end of if (msgtype==MSGTYPE_BC_RT)

	// set command word
	SetCmdWord(cmd1, 0);

	// set data configure
	if ((msgtype&FMSG_RT_RT) == FMSG_RT_RT)
	{
		for (i = 0; i < (g_TempMsg.blocklen - 4); i++)
		{
			sprintf(c, "%04x", g_TempMsg.msg.MSGBlock[i+4]);
			strupr(c);
			::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c);
		}
	}
	else
	{
		for (i = 0; i < g_TempMsg.blocklen - 1; i++)
		{
			sprintf(c, "%04x", g_TempMsg.msg.MSGBlock[i+1]);
			strupr(c);
			::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c);
		}
	}

}

void CMsgShowDlg::SetRT2Visible(BOOL Enabled)
{
	if (Enabled)
	{
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD1), SW_SHOW);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR1), SW_SHOW);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1), SW_SHOW);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1), SW_SHOW);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1), SW_SHOW);
	}
	else
	{
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD1), SW_HIDE);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RTADDR1), SW_HIDE);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_RORT1), SW_HIDE);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_SAADDR1), SW_HIDE);
		::ShowWindow(::GetDlgItem(this->m_hWnd, IDC_MSHOW_CB_DCNT1), SW_HIDE);
	}


}

void CMsgShowDlg::SetCmdWord(unsigned short val, unsigned char id)
{
	char c[80];
	sprintf(c, "%04x", val);
	if (id==0)
	{
		::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD0), TEXT(c));
	}
	else
	{
		::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_CMD1), TEXT(c));
	}
}

void CMsgShowDlg::OnMshowBtGrd() 
{
	// TODO: Add your control notification handler code here
		int i=0, j=0;
	char c[80];
	WORD wd=0;
	
	for (i=0; i<32; i++)
	{
		if (::IsWindowEnabled(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i)))
		{
			j++;
		}
		else
		{
			i=32;
		}
	}

	if (j>0)
	{
		for (i=0; i<j; i++)
		{
			wd = (WORD)rand();
			sprintf(c, "%04x", wd);
			strupr(c);
			::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c);
		}
	}

	
}

void CMsgShowDlg::OnMshowBtGod() 
{
	// TODO: Add your control notification handler code here
		int i=0, j=0;
	char c[80];
	WORD wd=0;
	
	for (i=0; i<32; i++)
	{
		if (::IsWindowEnabled(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i)))
		{
			j++;
		}
		else
		{
			i=32;
		}
	}

	if (j>0)
	{
		::GetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_BASED), c, sizeof(c));
		wd = (WORD)::HEXS(c);
		for (i=0; i<j; i++)
		{
			sprintf(c, "%04x", wd);
			strupr(c);
			::SetWindowText(::GetDlgItem(this->m_hWnd, IDC_MSHOW_ED_DATA0+i), c);
			wd++;
		}
	}

	
}


void CMsgShowDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	msgChangeType = MSGCTYPE_NONE;

	CDialog::OnCancel();
}

⌨️ 快捷键说明

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