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

📄 mainfrm.cpp

📁 PSK31方式通信C++编写的原代码,可以通过声音传递数据.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -