mymodemdlg.cpp
来自「有gsm打电话功能.可以做图象处理.还有unicode的转化函数」· C++ 代码 · 共 644 行 · 第 1/2 页
CPP
644 行
//DEL }
void CMyModemDlg::OnStop() //停止显示
{
// TODO: Add your control notification handler code here
m_ShowBMP.OnStopTimer();
}
/////////////////////////////////////////////////////////////////////
//连接断开事件
void CALLBACK CMyModemDlg::OnDisConnect(CWnd* pWnd)
{
CTCPClientDlg * pDlg = (CTCPClientDlg*)pWnd;
CStatic * pStatus = (CStatic *)pDlg->GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(_T("已断开"));
/*设置按钮可用属性*/
CButton * pBtnConn =(CButton*)pDlg->GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)pDlg->GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)pDlg->GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(TRUE);
pBtnDisConn->EnableWindow(FALSE);
pBtnSendData->EnableWindow(FALSE);
}
//数据接收事件
void CALLBACK CMyModemDlg::OnRead(CWnd* pWnd,const char * buf,int len )
{
CTCPClientDlg * pDlg = (CTCPClientDlg*)pWnd;
CEdit * pEdtRecv = (CEdit*)pDlg->GetDlgItem(IDC_EDTRECV);
ASSERT(pEdtRecv != NULL);
CString strRecv = buf;
//将接收的数据显示到接收文本框上
pEdtRecv->SetWindowText(strRecv);
}
//Socket错误事件
void CALLBACK CMyModemDlg::OnError(CWnd* pWnd,int nErrorCode)
{
AfxMessageBox(_T("客户端socket发生错误"));
}
//建立连接按钮
void CMyModemDlg::OnBtnconn()
{
UpdateData(TRUE);
//设置m_tcpClient属性
m_tcpClient.m_remoteHost = m_remoteHost;
m_tcpClient.m_port = m_remotePort;
m_tcpClient.OnDisConnect = OnDisConnect;
m_tcpClient.OnRead = OnRead;
m_tcpClient.OnError = OnError;
//打开客户端socket
m_tcpClient.Open(this);
//建立与服务器端连接
if (m_tcpClient.Connect())
{
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"已连接");
UpdateData(FALSE);
}
else
{
AfxMessageBox(_T("建立连接失败"));
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"连接断开");
return;
}
/*设置按钮可用属性*/
CButton * pBtnConn =(CButton*)GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(FALSE);
pBtnDisConn->EnableWindow(TRUE);
pBtnSendData->EnableWindow(TRUE);
}
//断开连接按钮单击事件
void CMyModemDlg::OnBtndisconn()
{
if (m_tcpClient.Close())
{
CStatic *pStatus = (CStatic*)GetDlgItem(IDC_LBLCONNSTATUS);
ASSERT(pStatus != NULL);
pStatus->SetWindowText(L"连接断开");
CButton * pBtnConn =(CButton*)GetDlgItem(IDC_BTNCONN);
CButton * pBtnDisConn = (CButton*)GetDlgItem(IDC_BTNDISCONN);
CButton * pBtnSendData = (CButton*)GetDlgItem(IDC_BTNSENDDATA);
ASSERT(pBtnConn != NULL );
ASSERT(pBtnDisConn != NULL );
ASSERT(pBtnSendData != NULL );
pBtnConn->EnableWindow(TRUE);
pBtnDisConn->EnableWindow(FALSE);
pBtnSendData->EnableWindow(FALSE);
}
else
{
AfxMessageBox(_T("连接断开失败"));
}
}
//发送数据按钮单击事件代码
void CMyModemDlg::OnBtnsenddata()
{
char * sendBuf;
int sendLen=0;
UpdateData(TRUE);
sendLen = m_sendData.GetLength();
sendBuf = new char[sendLen*2];
wcstombs(sendBuf,m_sendData,sendLen);
if (!m_tcpClient.SendData(sendBuf,sendLen))
{
AfxMessageBox(_T("发送失败"));
}
delete[] sendBuf;
sendBuf = NULL;
}
//得到本地的IP地址
CString CMyModemDlg::GetLocalIP()
{
HOSTENT *LocalAddress;
char *Buff;
TCHAR *wBuff;
CString strReturn = _T("");
//创建新的缓冲区
Buff = new char[256];
wBuff = new TCHAR[256];
//置空缓冲区
memset(Buff, '\0', 256);
memset(wBuff, TEXT('\0'), 256*sizeof(TCHAR));
//得到本地计算机名
if (gethostname(Buff, 256) == 0)
{
//转换成双字节字符串
mbstowcs(wBuff, Buff, 256);
//得到本地地址
LocalAddress = gethostbyname(Buff);
//置空buff
memset(Buff, '\0', 256);
//组合本地IP地址
sprintf(Buff, "%d.%d.%d.%d\0", LocalAddress->h_addr_list[0][0] & 0xFF,
LocalAddress->h_addr_list[0][1] & 0x00FF, LocalAddress->h_addr_list[0][2] & 0x0000FF, LocalAddress->h_addr_list[0][3] & 0x000000FF);
//置空wBuff
memset(wBuff, TEXT('\0'), 256*sizeof(TCHAR));
//转换成双字节字符串
mbstowcs(wBuff, Buff, 256);
//设置返回值
strReturn = wBuff;
}
else
{
}
//释放Buff缓冲区
delete[] Buff;
//释放wBuff缓冲区
delete[] wBuff;
return strReturn;
}
/////////////////////////////////////////////////////////////////////
void CMyModemDlg::OnSetfocusEdit1()
{
m_sCommand=_T("");
UpdateData(0);
}
void CMyModemDlg::OnSetfocusEdit2()
{
m_sText=_T("");
UpdateData(0);
}
void CMyModemDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
void CMyModemDlg::OnTimer(UINT nIDEvent)
{
BYTE strCommRecvMsg[51];
memset(strCommRecvMsg,0,51);
BYTE bCommRecvMsg[51];
memset(bCommRecvMsg,0,51);
DWORD dw;
BOOL b=ReadFile(hCommDev,strCommRecvMsg,50,&dw,NULL);
if(!b)return;
if(dw<1)return;
CString str,s;
UpdateData(1);
if(dw==1)
{
if(g_nFirst==1)
{
c[0]=(char)g_sFirst;
c[1]=(char)strCommRecvMsg[0];
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
g_nFirst=0;
g_sFirst=0;
m_sReceive+=cc;
UpdateData(0);
}
else //g_nFirst==0
{
if(IsChinesecharacter(strCommRecvMsg[0]))
{
g_sFirst=strCommRecvMsg[0];
g_nFirst=1;
}
else
{
m_sReceive+=(TCHAR)strCommRecvMsg[0];
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
}
}
else //dw>1
{
if(g_nFirst==1)
{
c[0]=(char)g_sFirst;
c[1]=(char)strCommRecvMsg[0];
memcpy(bCommRecvMsg,strCommRecvMsg+1,dw-1);
ProcessChar(bCommRecvMsg,dw-1,str);
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
m_sReceive+=cc;
m_sReceive+=str;
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
else
{
ProcessChar(strCommRecvMsg,dw,str);
m_sReceive+=str;
UpdateData(0);
g_nFirst=0;
g_sFirst=0;
}
}
CDialog::OnTimer(nIDEvent);
}
void CMyModemDlg::OnDestroy()
{
KillTimer(1);
CDialog::OnDestroy();
}
void CMyModemDlg ::ProcessChar(BYTE* bb,int len,CString& str)
{
str=_T("");
BYTE temp;
int i=0;
while(i<len)
{
temp=bb[i];
if(!IsChinesecharacter(temp))
{
str+=(TCHAR)temp;
i++;
}
else
{
i++;
if(i<len)
{
c[0]=(char)temp;
c[1]=(char)bb[i];
wsprintf(cc,_T("%s"),g_dbf.CharToWideChar((unsigned char*)c,2));
str+=cc;
i++;
}
}
}
}
BOOL CMyModemDlg ::IsChinesecharacter(BYTE ch)
{
if((BYTE)ch>=0x80)
return TRUE;
else
return FALSE;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?