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

📄 faxmachinedlg.cpp

📁 VisualC实践与提高——串口通信与工程应用篇代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		case WM_FAXPROCESSPAGEDATA:	
			{
		
    			m_Status =  "正发送传真页……";
				
				switch(lParam)
				{
				case D1DMR:
					{

						if(m_bEcmFlag)
							m_Status +=  "(ECM MH)……";
						else
							m_Status += "(1DMH)……";
					
						break;
					}
				case D2DMR:
					{
								
						if(m_bEcmFlag)
							m_Status +=  "(ECM 2DMR)……";
						else
							m_Status += "(2DMR)……";			

						break;	
					}
				case D2DMMR:
					{

						if(m_bEcmFlag)
							m_Status +=  "(ECM MMR)……";
						else
							m_Status += "(2DMMR)……";
						break;
					}
				}
			}
			break;



		default:
			;
		}
		this->UpdateData(false);
	}
	else
	{
		//当前是接收传真操作
		this->UpdateData(FALSE);
		this->UpdateData(TRUE);

		static unsigned long faxdata = 0 ;
		
		switch(wParam)
		{
		case WM_FAXANI:
			{
				m_CallerNo = (char*)lParam ;
				m_Status =  "呼叫来自" + m_CallerNo ;
				this->UpdateData(FALSE);
				break;
			}
		case WM_FAXMONITORCLOSE:
			{
				m_Status =  "停止监听……";
				break;
			}

		case WM_FAXMONITORSTART:
			{
				m_Status =  "等待呼叫……";
				m_CallerNo="";
				break;
			}

		case WM_FAXUSERCANCE:
			{
				m_Status =  "用户取消接收传真……";
				break;
			}

		case WM_FAXMISSIONINOVER:
			{

				m_bFaxing = false ;			

				if(!m_AutoReply)
				{
					ShutdownTAPI();
				}
				else
				{
					lineDrop(g_hCall , NULL, 0);		
				}

				KillTimer(100);  
				
				this->GetDlgItem(IDC_RECEIVEFAX)->EnableWindow(true);			
				this->GetDlgItem(IDC_ABORT)->EnableWindow(false);
				this->GetDlgItem(IDC_EXIT)->EnableWindow(true);
							
				if (lParam==0)
					m_Status =  "传真接收成功!";
				else if(lParam==888)
					m_Status =  "传真接收失败(因用户取消)。";
				else 
					m_Status =  "传真接收失败!";
				
				if(m_AutoReply && m_PortType!=0)
				{
					SmartFaxMonitorPort(&g_hFax,m_PortType,GetSafeHwnd(),WM_SMARTFAX);
				}
				break;
			}
			
		case WM_FAXCHANGESTATE:					
			{
					
				switch(lParam)
				{

				case FAXINIT:
					{
					
						m_nTimes = 0 ;
						SetTimer(100,1000, 0); 
						faxdata = 0;
						m_Status =  "初始化设备。";
						m_Remote="";
						m_CallerNo="";
						m_ActualSpeed=("00 bps");
						m_Data="0 K";
						this->GetDlgItem(IDC_RECEIVEFAX)->EnableWindow(false);
						this->GetDlgItem(IDC_ABORT)->EnableWindow(true);
						this->GetDlgItem(IDC_EXIT)->EnableWindow(false);
						break;
					}

				case DIALFAX:
					{
						m_Status =  "拨号……";
						break;
					}
				case ANSWER:
					{
						m_Status =  "应答……";
						break; 
					}
				case NEGOTIATION:
					{
						m_Status =  "协商版本号……";
						break; 
					}
				case TRAINING:
					{
						m_Status =  "训练……";
						break; 	
					}
				}
				break; 
			}

		case WM_FAXSETCIS:
			{

				m_Remote.Format("%s",(char*)lParam );	
				m_Remote.TrimLeft(" ");
				m_Remote.TrimRight(" ");

				break; 
			}

		case WM_FAXRECVPAGEDATA:
			{
				faxdata+=(unsigned long)lParam;
				m_Data.Format("%dK",faxdata/1024);							
				break;
			}

		case WM_ACCEPTPAGE:
			{
				m_Status =  "接受页……";
			
				break;
			}
		case WM_REJECTPAGE:
			{
				m_Status =  "弹出页……";
			
				break;
			}
		case WM_FAXSPEED:
			{
				m_ActualSpeed.Format("%d%s",lParam,"00 bps");
				break;
			}
		case WM_FAXPAGE:
			{
				m_nPage = (int)lParam;
				m_Page.Format("%d",m_nPage);
				break;
			}
		case WM_FAXECM:
			{

				m_bEcmFlag  =  lParam == 0 ? false : true ;
				break;
			}

		case WM_FAXRING:
			{
				int nRingTimes = (int)lParam ;
				if(m_CallerNo.GetLength())
				{
					m_Status =  "呼叫来自" + m_CallerNo ;
				}
				else 
				{
					m_Status =  "无名呼叫……";
				}

				TRACE(m_Status);
				this->UpdateData(false);
				
				if(nRingTimes >= 2  )
				{
					if(m_PortType==0 )
						RecvFaxInTapi();
					else 
						OnReceivefax();

					TRACE("应答呼叫...\n");
				}
				break;
			}

		case WM_FAXPROCESSPAGEDATA:	
			{

    			m_Status =  "正在接收传真页。";
				
						
				switch(lParam)
				{
					case D1DMR:
						{
							m_Status +=  "(1DMH)……";
							break;
						}
					case D2DMR:
						{
							m_Status +=  "(2DMR)……";
							break;	
						}
					case D2DMMR:
						{
							if(m_bEcmFlag)
							{
								m_Status +=  "(ECM MMR)……";
							}
							else 
							{
								m_Status += "(2DMMR)……";
							}
							break;
						}
				}
				break;
			}

		}
		this->UpdateData(false);
	}
}

void CFaxMachineDlg::OnExit() 
{
	// TODO: Add your control notification handler code here
	this->EndDialog(0);
}

void CFaxMachineDlg::OnRadioSend() 
{
	// TODO: Add your control notification handler code here
	CWnd *myWnd;
	myWnd=this->GetDlgItem(IDC_HIGH);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_NORMAL);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_STATIC_RESOLUTION);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_AUTOREPLY);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_STATIC_PHONE);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_PHONE);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_STATIC_FROM);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_STATIC_TO);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_FROM);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_TO);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_FAXHEAD);
	myWnd->EnableWindow(true);

	myWnd=this->GetDlgItem(IDC_STATIC_DATA);
	myWnd->SetWindowText("发送数据:");
	myWnd=this->GetDlgItem(IDC_FAXHEAD);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_STATIC_CALLERNO);
	myWnd->EnableWindow(false);
	m_ReceiveFax.EnableWindow(false);
	m_SendFax.EnableWindow(true);
	bSendNotRcv=true;

	UpdateData(true);
	ShutdownTAPI();	
}

void CFaxMachineDlg::OnRadioRcv() 
{
	// TODO: Add your control notification handler code here
	CWnd *myWnd;
	myWnd=this->GetDlgItem(IDC_HIGH);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_NORMAL);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_STATIC_RESOLUTION);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_AUTOREPLY);
	myWnd->EnableWindow(true);
	myWnd=this->GetDlgItem(IDC_STATIC_PHONE);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_PHONE);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_STATIC_FROM);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_STATIC_TO);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_FROM);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_TO);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_FAXHEAD);
	myWnd->EnableWindow(false);
	myWnd=this->GetDlgItem(IDC_STATIC_DATA);
	myWnd->SetWindowText("接收数据:");
	myWnd=this->GetDlgItem(IDC_STATIC_CALLERNO);
	myWnd->EnableWindow(true);
	m_SendFax.EnableWindow(false);
	m_ReceiveFax.EnableWindow(true);
	bSendNotRcv=false;
	UpdateData(true);

	ShutdownTAPI();
	OnAutoReply();	
	/*if(m_AutoReply)
	{
		if(!InitializeTAPI(0))
		{
			if(g_bInitializing)
			{
				ShutdownTAPI();
			}
			AfxMessageBox("InitializeTAPI fail ... \n");
		}
	}*/

}

void CFaxMachineDlg::OnAbort() 
{
	// TODO: Add your control notification handler code here
	AbortPort(&g_hFax);
	
}

void CFaxMachineDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent == 100 )
	{
		CTimeSpan ts(0,0,0,m_nTimes++);		
		m_Time.Format("%01d:%01d:%02d",ts.GetHours(),ts.GetMinutes(),ts.GetSeconds());
		this->UpdateData(false);
	}
	CDialog::OnTimer(nIDEvent);
}

void CFaxMachineDlg::OnFaxhead() 
{
	// TODO: Add your control notification handler code here
	BOOL fEnable ;
	this->UpdateData();
	fEnable = m_FaxHead ;
	GetDlgItem(IDC_FROM)->EnableWindow(fEnable);
	GetDlgItem(IDC_TO)->EnableWindow(fEnable);
	GetDlgItem(IDC_STATIC_FROM)->EnableWindow(fEnable);
	GetDlgItem(IDC_STATIC_TO)->EnableWindow(fEnable);
}

void CFaxMachineDlg::OnReceivefax() 
{
	// TODO: Add your control notification handler code here
	m_Time="";
	this->UpdateData(TRUE);
	
	if(m_PortType==0)                        //通过Tapi接收
	{
		if(m_AutoReply)
		{
			InitFaxTapiCall(g_hLine,g_hCall);
		}
		else
		{

			int nSel =  m_ModemList.GetCurSel();
			DWORD dwDevice = m_ModemList.GetItemData(nSel);

			if(dwDevice >=0 )
			{
				InitializeTAPI(dwDevice);
				InitFaxTapiCall(g_hLine,g_hCall);
			}
		}

		return ;
	}
	else                                  //通过Com端口接收
	{

		RecvFaxInComPort();

	}
}

bool CFaxMachineDlg::RecvFaxInComPort()
{

	SFaxParam *FaxParam =(SFaxParam *) new SFaxParam; 	

	FaxParam->hFax = &g_hFax;
	FaxParam->Hwnd = this->GetSafeHwnd();
	FaxParam->Msg = WM_SMARTFAX ;
	FaxParam->nComPort = m_PortType;
	FaxParam->Speed = GetSelSpeed(m_FaxSpeed);
	FaxParam->Is2D = m_Compress == TRUE ? U2D_ENABLE : U2D_DISABLE ;
	FaxParam->Volume = GetFaxVolume(m_Volume);
	FaxParam->Class = m_FaxProtocol == 0 ? CLASS_1 : CLASS_2  ;
	FaxParam->Ecm =  m_Ecm == TRUE ? ECM_ENABLE : ECM_DISABLE ;	
	strcpy(FaxParam->FileName,m_File);	
	strcpy(FaxParam->Identifi,m_Identity);	
	
	SmartReceiveFax(FaxParam);
	
	delete FaxParam;

	return true;
}
bool CFaxMachineDlg::RecvFaxInTapi()
{

	if(m_bFaxing)
	{
		return false;
	}

	m_bFaxing = true;
		
	this->UpdateData();
	SFaxParam *FaxParam =(SFaxParam *) new SFaxParam; 	

	FaxParam->hFax = &g_hFax;
	FaxParam->hCall = g_hCall;
	FaxParam->hLine = g_hLine;
	FaxParam->Hwnd = this->GetSafeHwnd();
	FaxParam->Msg = WM_SMARTFAX;
	FaxParam->Speed = GetSelSpeed(m_FaxSpeed);
	FaxParam->Is2D = m_Compress == TRUE ? U2D_ENABLE : U2D_DISABLE ;
	FaxParam->Volume = GetFaxVolume(m_Volume);
	FaxParam->Class = m_FaxProtocol == 0 ? CLASS_1 : CLASS_2  ;
	FaxParam->Ecm =  m_Ecm == TRUE ? ECM_ENABLE : ECM_DISABLE ;	
	strcpy(FaxParam->FileName,m_File);	
	strcpy(FaxParam->Identifi,m_Identity);	

	TapiSmartReceiveFax(FaxParam);
	delete FaxParam;


	return true;

}

void CFaxMachineDlg::OnAutoReply() 
{
	// TODO: Add your control notification handler code here
	this->UpdateData(TRUE);
		
	
	if(m_PortType==0)                       //通过Tapi接收 
	{
		int nSel =  m_ModemList.GetCurSel();
		DWORD dwDevice = m_ModemList.GetItemData(nSel);
		
		if(dwDevice >=0)
		{
			
			if(m_AutoReply)
			{
				
				if(!InitializeTAPI(dwDevice))
				{
					if(g_hLineApp||g_bTapiInUse)
					{
						ShutdownTAPI();
					}
					
					m_AutoReply = FALSE ;
					UpdateData(FALSE);
					
					AfxMessageBox("InitializeTAPI fail ... \n");
				}
				else
				{
					PostMessage(WM_SMARTFAX,WM_FAXMONITORSTART,0);
				}
				
			}
			else
			{
				ShutdownTAPI();
				PostMessage(WM_SMARTFAX,WM_FAXMONITORCLOSE,0);
			}
			
		}
		
		
	}else                                  //通过Com端口接收
	{

		if(m_AutoReply)
		{
			if(SmartFaxMonitorPort(&g_hFax,m_PortType,GetSafeHwnd(),WM_SMARTFAX) == 0 )
			{
				m_Status =  "Waiting for call ...";	
					
			}
			else
			{
				m_Status =  "Monitor device failed ...";	
				m_AutoReply = FALSE;
				g_hFax = NULL;
			}

			UpdateData(FALSE);
		}
		else
		{
			AbortPort(&g_hFax);
		}
	}	
}

⌨️ 快捷键说明

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