📄 mainfrm.cpp
字号:
pDoc->m_pSettings->m_crXmitSentTextColor,
pDoc->m_pSettings->m_crRcvBackColor );
}
}
///////////////////////////////////////////////////////////////
void CMainFrame::OnXmitfont()
{
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CClientDC dc(NULL);
LOGFONT lf = pDoc->m_pSettings->m_lfXmitFont;
lf.lfHeight = -::MulDiv(-lf.lfHeight, dc.GetDeviceCaps(LOGPIXELSY), 72);
CFontDialog dlg(&lf);
dlg.m_cf.rgbColors = pDoc->m_pSettings->m_crXmitTextColor;
if (dlg.DoModal() == IDOK)
{
lf.lfHeight = -::MulDiv(-lf.lfHeight, 72, dc.GetDeviceCaps(LOGPIXELSY));
pDoc->m_pSettings->m_crXmitTextColor = dlg.GetColor();
pDoc->m_pSettings->m_lfXmitFont = lf;
pDoc->m_pXmitEdit->SetCharFormat(pDoc->m_pSettings->m_lfXmitFont,
pDoc->m_pSettings->m_lfXmitSentFont,
pDoc->m_pSettings->m_crXmitTextColor,
pDoc->m_pSettings->m_crXmitSentTextColor,
pDoc->m_pSettings->m_crXmitBackColor);
}
}
///////////////////////////////////////////////////////////////
void CMainFrame::OnXmitsentfont()
{
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CClientDC dc(NULL);
LOGFONT lf = pDoc->m_pSettings->m_lfXmitSentFont;
lf.lfHeight = -::MulDiv(-lf.lfHeight, dc.GetDeviceCaps(LOGPIXELSY), 72);
CFontDialog dlg(&lf);
dlg.m_cf.rgbColors = pDoc->m_pSettings->m_crXmitSentTextColor;
if (dlg.DoModal() == IDOK)
{
lf.lfHeight = -::MulDiv(-lf.lfHeight, 72, dc.GetDeviceCaps(LOGPIXELSY));
pDoc->m_pSettings->m_crXmitSentTextColor = dlg.GetColor();
pDoc->m_pSettings->m_lfXmitSentFont = lf;
pDoc->m_pXmitEdit->SetCharFormat(pDoc->m_pSettings->m_lfXmitFont,
pDoc->m_pSettings->m_lfXmitSentFont,
pDoc->m_pSettings->m_crXmitTextColor,
pDoc->m_pSettings->m_crXmitSentTextColor,
pDoc->m_pSettings->m_crXmitBackColor);
pDoc->m_pRcvEdit->SetCharFormat(pDoc->m_pSettings->m_lfRcvFont,
pDoc->m_pSettings->m_lfXmitFont,
pDoc->m_pSettings->m_crRcvTextColor,
pDoc->m_pSettings->m_crXmitSentTextColor,
pDoc->m_pSettings->m_crRcvBackColor );
}
}
///////////////////////////////////////////////////////////////
void CMainFrame::OnXmitbackcolor()
{
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CColorDialog dlgColor(pDoc->m_pSettings->m_crXmitBackColor, CC_RGBINIT);
if (dlgColor.DoModal() == IDOK)
{
pDoc->m_pSettings->m_crXmitBackColor = dlgColor.GetColor();
pDoc->m_pXmitEdit->SetBackgroundColor( FALSE, pDoc->m_pSettings->m_crXmitBackColor );
}
}
///////////////////////////////////////////////////////////////
// called during idle time to update the status bar
///////////////////////////////////////////////////////////////
void CMainFrame::OnUpdateStatus(CCmdUI* pCmdUI)
{
CString sBuf;
UINT nID, nStyle;
int nWidth, nIndex;
CSize szExtent;
CClientDC dc(&m_wndStatusBar);
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CFont* pOldFont = dc.SelectObject(m_wndStatusBar.GetFont());
// Update status pane 1
sBuf = _T(" No IMD Reading ");
szExtent = dc.GetTextExtent(sBuf, sBuf.GetLength() );
if(pDoc->m_IMDRdy)
{
if(pDoc->m_IMD < 0 )
sBuf.Format(_T(" IMD = %d "), -pDoc->m_IMD);
else
sBuf.Format(_T(" IMD > %d "), pDoc->m_IMD);
}
nIndex = m_wndStatusBar.CommandToIndex(IDS_STATUSBAR1);
m_wndStatusBar.GetPaneInfo(nIndex, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
m_wndStatusBar.SetPaneText(nIndex, sBuf);
// Update status pane 2
sBuf.Format("Clk ppm=%d", pDoc->m_ClkError);
nIndex = m_wndStatusBar.CommandToIndex(IDS_STATUSBAR2);
// szExtent = dc.GetTextExtent(sBuf, sBuf.GetLength() );
m_wndStatusBar.GetPaneInfo(nIndex, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
m_wndStatusBar.SetPaneText(nIndex, sBuf);
// Update status pane 3
nIndex = m_wndStatusBar.CommandToIndex(IDS_STATUSBAR3);
if(pDoc->m_FilePercentDone >= 0 )
{
sBuf.Format(" Percent Complete = %d%% ", pDoc->m_FilePercentDone);
szExtent = dc.GetTextExtent(sBuf, sBuf.GetLength() );
}
else
{
sBuf = _T(" Wave Files Off ");
}
m_wndStatusBar.GetPaneInfo(nIndex, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
m_wndStatusBar.SetPaneText(nIndex, sBuf);
// Update time/date pane 4
CTime time = CTime::GetCurrentTime();
if( pDoc->m_pSettings->m_UseLocalTime)
sBuf = time.Format(_T(" %#d %b %Y %#I:%M:%S %p "));
else
sBuf = time.FormatGmt(_T(" %#d %b %Y %#H:%M:%S UTC "));
nIndex = m_wndStatusBar.CommandToIndex(ID_INDICATOR_STATUS);
szExtent = dc.GetTextExtent(sBuf, sBuf.GetLength() );
m_wndStatusBar.GetPaneInfo(nIndex, nID, nStyle, nWidth);
m_wndStatusBar.SetPaneInfo(nIndex, nID, nStyle, szExtent.cx);
m_wndStatusBar.SetPaneText(nIndex, sBuf);
dc.SelectObject(pOldFont); //restore font
pCmdUI->Enable(TRUE);
}
///////////////////////////////////////////////////////////////
void CMainFrame::OnSetup()
{
BOOL SatMode;
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CWinPSKView* pView = (CWinPSKView*)GetActiveView();
ASSERT_VALID(pView);
CSetDlg dlg;
dlg.m_pDoc = pDoc;
dlg.m_sCallSign = pDoc->m_pSettings->m_sMyCall;
dlg.m_UseSlash = pDoc->m_pSettings->m_UseSlash;
dlg.m_PTTPort = pDoc->m_pSettings->m_PTTPort;
dlg.m_ClockAdj = pDoc->m_pSettings->m_ClockAdj;
dlg.m_UseLSB = pDoc->m_pSettings->m_UseLSB;
dlg.m_UseLocalTime = pDoc->m_pSettings->m_UseLocalTime;
dlg.m_EchoTXText = pDoc->m_pSettings->m_EchoTXText;
dlg.m_FreqMin = pDoc->m_pSettings->m_FreqMin;
dlg.m_FreqMax = pDoc->m_pSettings->m_FreqMax;
dlg.m_AFCLimit = pDoc->m_pSettings->m_AFCLimit;
dlg.m_SquelchSpeed = pDoc->m_pSettings->m_SquelchSpeed;
dlg.m_SoundcardNum = pDoc->m_pSettings->m_SoundcardNum+1;
dlg.m_PALPathName = pDoc->m_pSettings->m_PALPathName;
if (dlg.DoModal() == IDOK)
{
pDoc->m_pSettings->m_sMyCall = dlg.m_sCallSign;
pDoc->m_CWIdString = _T("de ") + dlg.m_sCallSign;
fnSetCWIDString((PCHAR)(LPCTSTR)pDoc->m_CWIdString );
CString str;
str = _T("WinPSK 2.13 -- ") + dlg.m_sCallSign;
AfxGetMainWnd()->SetWindowText( str );
pDoc->m_pSettings->m_UseSlash = dlg.m_UseSlash;
pDoc->m_pRcvEdit->SetZeroCharDisplay(pDoc->m_pSettings->m_UseSlash);
pDoc->m_pSettings->m_UseLSB = dlg.m_UseLSB;
pDoc->m_pSettings->m_UseLocalTime = dlg.m_UseLocalTime;
pDoc->m_pSettings->m_EchoTXText = dlg.m_EchoTXText;
pDoc->m_pSettings->m_FreqMin = dlg.m_FreqMin;
pDoc->m_pSettings->m_FreqMax = dlg.m_FreqMax;
pDoc->m_pSettings->m_AFCLimit = dlg.m_AFCLimit;
pDoc->m_pSettings->m_SquelchSpeed = dlg.m_SquelchSpeed;
pDoc->m_pSettings->m_PTTPort = dlg.m_PTTPort;
pDoc->m_pSettings->m_PALPathName = dlg.m_PALPathName;
pDoc->m_pSettings->m_SoundcardNum = dlg.m_SoundcardNum - 1;
if(pDoc->m_pSettings->m_UseLSB)
pView->m_QPSKCtrl.SetWindowText(_T("QPSK (lsb)"));
else
pView->m_QPSKCtrl.SetWindowText(_T("QPSK (usb)"));
INT tmp = 0;
if(pDoc->m_pSettings->m_PSK63Mode)
tmp |= PSK63MODE;
if( pDoc->m_pSettings->m_ModType == BPSK_MODE )
{
fnSetRXPSKMode( BPSK_MODE|tmp, RX_CHAN);
}
else
{
if(pDoc->m_pSettings->m_UseLSB)
fnSetRXPSKMode( IQPSK_MODE|tmp, RX_CHAN);
else
fnSetRXPSKMode( QPSK_MODE|tmp, RX_CHAN);
}
if( pDoc->m_pSettings->m_ClockAdj != dlg.m_ClockAdj )
{
pDoc->m_pSettings->m_ClockAdj = dlg.m_ClockAdj;
fnSetClockErrorAdjustment(pDoc->m_pSettings->m_ClockAdj);
}
pView->m_pCPlotData->SetZoom( pDoc->m_pSettings->
m_PlotViewState[pDoc->m_pSettings->m_TabSel].zoom,TRUE,
pDoc->m_pSettings->m_FreqMin,
pDoc->m_pSettings->m_FreqMax );
pView->UpdatePlotInfo(PLOT_CHNG_ZOOM);
SatMode = pDoc->m_SatMode;
if( pDoc->m_pSettings->m_AFCLimit == 3000)
pDoc->m_SatMode = TRUE;
else
pDoc->m_SatMode = FALSE;
if(SatMode != pDoc->m_SatMode)
pView->StopDLL();
}
if(pDoc->m_pSettings->m_PTTPort)
fnSetComPort(pDoc->m_pSettings->m_PTTPort, 3);
else
fnSetComPort(0, 0);
if(pDoc->m_pSettings->m_UseAFC)
{
fnSetAFCLimit(pDoc->m_pSettings->m_AFCLimit, RX_CHAN);
}
}
////////////////////////////////////////////////////
// Invoke Window's mixer control for Rx audio level adjustment
void CMainFrame::OnRxlvlsetup()
{
::WinExec(_T("SndVol32.exe /r"), SW_SHOW);
}
////////////////////////////////////////////////////
// Invoke Window's mixer control for Tx audio level adjustment
void CMainFrame::OnTxlvlsetup()
{
::WinExec(_T("SndVol32.exe /p"), SW_SHOW);
}
void CMainFrame::OnSendfile()
{
// handler code here for getting text filename
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CString sFilter = _T("Text Files (*.txt)|*.txt||");
CString str;
CFileDialog DlgInfile( TRUE, _T("txt"), pDoc->m_pSettings->m_PathName,
OFN_LONGNAMES|OFN_NOCHANGEDIR|OFN_HIDEREADONLY,
(LPCTSTR)sFilter, this );
if( DlgInfile.DoModal() == IDOK)
{
pDoc->m_pSettings->m_PathName = DlgInfile.GetPathName();
if(ReadFile( str, pDoc->m_pSettings->m_PathName))
{
pDoc->m_pXmitEdit->InsertCString( str );
}
}
}
/////////////////////////////////////////////////////////////////////////////
// Reads "PathName" file into CString str
// returns FALSE if any errors, TRUE if OK
/////////////////////////////////////////////////////////////////////////////
BOOL CMainFrame::ReadFile(CString &str, CString PathName)
{
CFile cFile;
PBYTE pBuf = NULL;
BOOL retval = FALSE;
if( cFile.Open( PathName, CFile::modeRead) )
{
DWORD length = cFile.GetLength();
if(length >= FILE_TEXT_LIMIT)
length = FILE_TEXT_LIMIT-1;
pBuf = new BYTE[FILE_TEXT_LIMIT+1];
if( cFile.Read( pBuf, length) == length )
{
pBuf[length] = 0;
str = pBuf;
retval = TRUE;
}
if( pBuf )
delete pBuf;
}
return retval;
}
void CMainFrame::OnSelwavefiles()
{
CWaveDlg dlg;
CWinPSKDoc* pDoc = (CWinPSKDoc*)CMainFrame::GetActiveDocument();
ASSERT_VALID(pDoc);
CWinPSKView* pView = (CWinPSKView*)GetActiveView();
ASSERT_VALID(pView);
dlg.m_InPathName = pDoc->m_pSettings->m_InPathName;
dlg.m_OutPathName = pDoc->m_pSettings->m_OutPathName;
dlg.m_InWaveOffset = pDoc->m_pSettings->m_InWaveOffset;
dlg.m_OutWaveTimeLimit = pDoc->m_pSettings->m_OutWaveTimeLimit;
dlg.m_IOMode = pDoc->m_pSettings->m_IOMode;
dlg.m_AppendMode = pDoc->m_pSettings->m_AppendMode;
pView->StopDLL();
if (dlg.DoModal() == IDOK)
{
pDoc->m_pSettings->m_InPathName = dlg.m_InPathName;
pDoc->m_pSettings->m_OutPathName = dlg.m_OutPathName;
pDoc->m_pSettings->m_InWaveOffset = dlg.m_InWaveOffset;
pDoc->m_pSettings->m_OutWaveTimeLimit = dlg.m_OutWaveTimeLimit;
pDoc->m_pSettings->m_IOMode = dlg.m_IOMode;
pDoc->m_pSettings->m_AppendMode = dlg.m_AppendMode;
}
if( dlg.m_IOMode == IOM_NORMAL)
pView->StartDLL(pDoc);
}
void CMainFrame::WinHelp(DWORD dwData, UINT nCmd)
{
CWinApp* theApp = AfxGetApp();
CString helpFilePath = theApp->m_pszHelpFilePath;
switch(dwData)
{
case IDR_MAINFRAME:
case IDD_ABOUTBOX:
HtmlHelp( m_hWnd, helpFilePath, HH_DISPLAY_TOPIC, dwData);
break;
default:
HtmlHelp( m_hWnd, helpFilePath, HH_DISPLAY_TOPIC, dwData);
break;
}
}
BOOL CMainFrame::OnHelpInfo(HELPINFO* pHelpInfo)
{
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -