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

📄 winpskview.cpp

📁 PSK31方式通信C++编写的原代码,可以通过声音传递数据.
💻 CPP
📖 第 1 页 / 共 4 页
字号:

//////////////////////////////////////////////////////////////////////
// Service timer for status updates.
//////////////////////////////////////////////////////////////////////
void CWinPSKView::OnTimer(UINT nIDEvent) 
{
	if( nIDEvent == m_TimerID )
		UpdateStatus();
	CFormView::OnTimer(nIDEvent);
}

//////////////////////////////////////////////////////////////////////
// Called to update the button and other status states.
//////////////////////////////////////////////////////////////////////
void CWinPSKView::UpdateStatus()
{
CWinPSKDoc* pDoc;
static BOOL tog = FALSE;
	pDoc = GetDocument();
	ASSERT_VALID( pDoc );
	if(pDoc->m_MacroStartTX) //if macro needs to turn on tx state
	{
		if( m_ProgramState == STATE_RX)
			ToggleTR();
		pDoc->m_MacroStartTX = FALSE;
	}
	switch( m_ProgramState )
	{
		case STATE_TUNE:
			if(tog)
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TUNE));
			else
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TROFF));
			break;
		case STATE_TX:
			if(tog)
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TRXMIT));
			else
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TROFF));
			break;
		case STATE_FINISH:
			if(tog)
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TXFINISH));
			else
				m_TRCntrl.SetIcon(AfxGetApp()->LoadIcon(IDI_TROFF));
			break;
	}
	tog = !tog;
	if(m_IMDDispDelay > 0)
	{
		m_IMDDispDelay--;
	}
	else
	{
		m_IMDDispDelay = 0;
		pDoc->m_IMDRdy = FALSE;
	}

}


////////////////////////////////////////////////////////////////////
////////////////////   ClipBoard Functionality    //////////////////
////////////////////////////////////////////////////////////////////
//  The receive window is read only so only copy operations are allowed
//  The transmit window can be pasted into but not copied from.
////////////////////////////////////////////////////////////////////
void CWinPSKView::OnEditCopy() 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pDoc->m_pTheirCallEdit->Copy();
	else
		if( pWnd == pDoc->m_pRcvEdit )
			pDoc->m_pRcvEdit->CopyClip();
}

void CWinPSKView::OnEditPaste() 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pDoc->m_pTheirCallEdit->PasteClip();
	else
		if( pWnd == pDoc->m_pXmitEdit )
		{
			pDoc->m_pXmitEdit->Paste();
			pDoc->m_pXmitEdit->SetFocus();
		}
}

void CWinPSKView::OnEditClear() 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pDoc->m_pTheirCallEdit->Clear();
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pDoc->m_pXmitEdit->Clear();
}

void CWinPSKView::OnEditCut() 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pDoc->m_pTheirCallEdit->Cut();
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pDoc->m_pXmitEdit->Cut();
}

void CWinPSKView::OnEditUndo() 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pDoc->m_pTheirCallEdit->Undo();
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pDoc->m_pXmitEdit->Undo();
}
///////////////////  Indicate what clipboard operations are OK
void CWinPSKView::OnUpdateEditCopy(CCmdUI* pCmdUI) 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
LONG s,e;
	if( pWnd == pDoc->m_pTheirCallEdit)
	{
		pDoc->m_pTheirCallEdit->GetSel(s,e);
		pCmdUI->Enable( e > s );
	}
	else
		if( pWnd == pDoc->m_pRcvEdit )
			pCmdUI->Enable( pDoc->m_pRcvEdit->OKCopy() );
		else
			pCmdUI->Enable( FALSE );
}

void CWinPSKView::OnUpdateEditCut(CCmdUI* pCmdUI) 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
LONG s,e;
	if( pWnd == pDoc->m_pTheirCallEdit)
	{
		pDoc->m_pTheirCallEdit->GetSel(s,e);
		pCmdUI->Enable( e > s );
	}
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pCmdUI->Enable( pDoc->m_pXmitEdit->OKCutClip() );
		else
			pCmdUI->Enable( FALSE );
}

void CWinPSKView::OnUpdateEditPaste(CCmdUI* pCmdUI) 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd != pDoc->m_pRcvEdit)
		pCmdUI->Enable( ::IsClipboardFormatAvailable(CF_TEXT) );
	else
		pCmdUI->Enable( FALSE );
}

void CWinPSKView::OnUpdateEditUndo(CCmdUI* pCmdUI) 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
	if( pWnd == pDoc->m_pTheirCallEdit)
		pCmdUI->Enable( pDoc->m_pTheirCallEdit->CanUndo() );
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pCmdUI->Enable( pDoc->m_pXmitEdit->CanUndo() );	
		else
			pCmdUI->Enable( FALSE );
}


void CWinPSKView::OnUpdateEditClear(CCmdUI* pCmdUI) 
{
CWinPSKDoc* pDoc = GetDocument();
CWnd* pWnd = GetFocus();
LONG s,e;
	if( pWnd == pDoc->m_pTheirCallEdit)
	{
		pDoc->m_pTheirCallEdit->GetSel(s,e);
		pCmdUI->Enable( e > s );
	}
	else
		if( pWnd == pDoc->m_pXmitEdit )
			pCmdUI->Enable( pDoc->m_pXmitEdit->OKClearSel() );
		else
			pCmdUI->Enable( FALSE );

}

////////////////////////////////////////////////////////////////////
////////////////   Macro Key Functionality    //////////////////
////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Called when Right mouse Button is clicked on a macro button.
//////////////////////////////////////////////////////////////////////
void CWinPSKView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	switch( pWnd->GetDlgCtrlID() )
	{
		case IDC_M1BUTTON:
			MacroDlg(0);
			break;
		case IDC_M2BUTTON:
			MacroDlg(1);
			break;
		case IDC_M3BUTTON:
			MacroDlg(2);
			break;
		case IDC_M4BUTTON:
			MacroDlg(3);
			break;
		case IDC_M5BUTTON:
			MacroDlg(4);
			break;
		case IDC_M6BUTTON:
			MacroDlg(5);
			break;
		case IDC_M7BUTTON:
			MacroDlg(6);
			break;
		case IDC_M8BUTTON:
			MacroDlg(7);
			break;
		case IDC_M9BUTTON:
			MacroDlg(8);
			break;
		case IDC_M10BUTTON:
			MacroDlg(9);
			break;
		default:
			break;
	}
}


//////////////////////////////////////////////////////////////////////
// Called to bring up a macro setup dialog.
//////////////////////////////////////////////////////////////////////
void CWinPSKView::MacroDlg(INT key)
{
CWinPSKDoc* pDoc = GetDocument();
CMacroDlg dlg;
INT index = key + pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS;
	dlg.m_MacroKey = key;
	dlg.m_MacroSet = pDoc->m_pSettings->m_MacroSet;
	dlg.m_sMacroTitle = pDoc->m_pSettings->m_saMacroTitle[index];
	dlg.m_sData = pDoc->m_pSettings->m_saMacroData[index];
	if (dlg.DoModal() == IDOK)
	{
		CString str;
		str = dlg.m_sData.Left(200);	//limit to 200 characters
		dlg.m_sData = str;
		pDoc->m_pSettings->m_saMacroData.SetAt(index,dlg.m_sData);
		pDoc->m_pSettings->m_saMacroTitle.SetAt(index,dlg.m_sMacroTitle);
		str.Format(_T("F%d="), key+1);
		m_MTitleCtrl[key].SetWindowText( str+dlg.m_sMacroTitle);
		UpdateData(FALSE);
	}
}

///////////////////////////////////////////////////////////////////////
// Routines called when macro buttons are left clicked to execute
///////////////////////////////////////////////////////////////////////
void CWinPSKView::OnM1button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					0+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
}

void CWinPSKView::OnM2button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					1+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
}

void CWinPSKView::OnM3button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					2+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
}

void CWinPSKView::OnM4button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					3+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
}

void CWinPSKView::OnM5button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					4+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
}


void CWinPSKView::OnM6button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					5+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
	
}

void CWinPSKView::OnM7button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					6+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
	
}

void CWinPSKView::OnM8button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					7+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
	
}

void CWinPSKView::OnM9button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					8+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
	
}

void CWinPSKView::OnM10button() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pXmitEdit->InsertCString( pDoc->m_pSettings->m_saMacroData[
					9+pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS] );
	
}


void CWinPSKView::OnClrqso() 
{
CWinPSKDoc* pDoc = GetDocument();
	pDoc->m_pTextGrabEdit->ClearAll();
	pDoc->m_pTheirNameEdit->ClearAll();
	pDoc->m_pTheirCallEdit->ClearAll();
}

BOOL CWinPSKView::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID = pNMHDR->idFrom;
CWinPSKDoc* pDoc = GetDocument();
CString str;
CString str2;
    if (pTTT->uFlags & TTF_IDISHWND)
    {
        nID = ::GetDlgCtrlID((HWND)nID);
        if(!nID)
			return(FALSE);
        pTTT->hinst =NULL;
		switch( nID )		//convert to macro key index 0-9
		{
			case IDC_M1BUTTON:
				nID = 0;
				break;
			case IDC_M2BUTTON:
				nID = 1;
				break;
			case IDC_M3BUTTON:
				nID = 2;
				break;
			case IDC_M4BUTTON:
				nID = 3;
				break;
			case IDC_M5BUTTON:
				nID = 4;
				break;
			case IDC_M6BUTTON:
				nID = 5;
				break;
			case IDC_M7BUTTON:
				nID = 6;
				break;
			case IDC_M8BUTTON:
				nID = 7;
				break;
			case IDC_M9BUTTON:
				nID = 8;
				break;
			case IDC_M10BUTTON:
				nID = 9;
				break;
			case IDC_SQUELCH:
				return(FALSE);
				break;
			default:
				return(FALSE);
				break;
		}
		str2 = pDoc->m_pSettings->m_saMacroData[nID +
					pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS];
		str = str2.Left(79);		//just get first 79 characters
		strcpy( pTTT->szText, (PCHAR)(LPCTSTR)str );
        return(TRUE);
    }    
	return(FALSE);
}


void CWinPSKView::OnDecfnset() 
{
CWinPSKDoc* pDoc = GetDocument();
CString str;
	if( --pDoc->m_pSettings->m_MacroSet < 0 )
	{
		pDoc->m_pSettings->m_MacroSet = NUM_MACROSETS-1;
	}
	str.Format(_T("Macro Set = %d"), pDoc->m_pSettings->m_MacroSet+1);
	m_MacroSetTxtCtrl.SetWindowText( str );
	for( INT i=0; i<NUM_MACROKEYS; i++)
	{
		str.Format(_T("F%d="), i+1);
		str = str + pDoc->m_pSettings->m_saMacroTitle[i +
						pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS];
		m_MTitleCtrl[i].SetWindowText(str);
	}
}

void CWinPSKView::OnIncfnset() 
{
CWinPSKDoc* pDoc = GetDocument();
CString str;
	if( ++pDoc->m_pSettings->m_MacroSet >= NUM_MACROSETS )
	{
		pDoc->m_pSettings->m_MacroSet = 0;
	}
	str.Format(_T("Macro Set = %d"), pDoc->m_pSettings->m_MacroSet+1);
	m_MacroSetTxtCtrl.SetWindowText( str );
	for( INT i=0; i<NUM_MACROKEYS; i++)
	{
		str.Format(_T("F%d="), i+1);
		str = str + pDoc->m_pSettings->m_saMacroTitle[i +
						pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS];
		m_MTitleCtrl[i].SetWindowText(str);
	}	
}

void CWinPSKView::OnSethome() 
{
CWinPSKDoc* pDoc = GetDocument();
CString str;
	pDoc->m_pSettings->m_MacroSet = 0;
	str.Format(_T("Macro Set = %d"), pDoc->m_pSettings->m_MacroSet+1);
	m_MacroSetTxtCtrl.SetWindowText( str );
	for( INT i=0; i<NUM_MACROKEYS; i++)
	{
		str.Format(_T("F%d="), i+1);
		str = str + pDoc->m_pSettings->m_saMacroTitle[i +
						pDoc->m_pSettings->m_MacroSet*NUM_MACROKEYS];
		m_MTitleCtrl[i].SetWindowText(str);
	}		
}

void CWinPSKView::OnRun() 
{
CWinPSKDoc* pDoc = GetDocument();
	if(m_DLLRunning)
		StopDLL();
	else
		StartDLL(pDoc);
}

//Called by squelch control when someone clicks on the threshold
void CWinPSKView::SquelchThreshCallback(INT threshold)
{
CWinPSKDoc* pDoc = GetDocument();
	ASSERT(pDoc);
	pDoc->m_pSettings->m_SQThreshold = threshold;
	fnSetSquelchThreshold(pDoc->m_pSettings->m_SQThreshold,
				pDoc->m_pSettings->m_SquelchSpeed, RX_CHAN);
}

⌨️ 快捷键说明

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