
3、在OnInitDialog()函数中添加:
send_edit = (CEdit *)GetDlgItem(IDC_EDIT1);
4、添加函数update():
void CcFileDlg::update(CString s)
{
m_listwords.AddString(s);
}
5、添加线程函数server_thd():
UINT recv_thd(LPVOID p)
{
int res;
char msg[1024];
//CString s;
cmobiledogdlg* dlg = (cmobiledogdlg*)(::afxgetapp()->m_pmainwnd)。cserverdlg* dlg = (cserverdlg*)afxgetapp()->getmainwnd()。dlg.m_strid,dlg.m_fscore1,dlg.m_fscore2,。
////////////接收数据
while (1)
{
if ((res = recv(sock, msg, 1024, 0)) == -1)//接收服务器的数据
{
dlg->update(_T("失去连接"));
break;
}
else
{
msg[res] = '\0';
dlg->update(_T("server:") + CString(msg));
}
}

//closesocket(sock);
return 0;
}
第四步:为两个按钮添加两个事件,onclogindlgbuttonlogin()和onclogindlgbuttoncancel(),在onclogindlgbuttonlogin()函数中我们添加代码如下:。同一窗口中只能有一个具有默认“属性”的按钮,当有两个以上按钮具有“默认”属性时,只有“停留顺序”属性最小的那个按钮会响应回车事件,当几个按钮的“停留顺序”属性相同时(如,都为0),则最先创建的那个按钮会响应回车事件,其余按钮的“默认”属性将被忽略。在@it168试小客提供的网站下载并安装”超健康app“,打开这个app,注册登录进入服药提醒主页面,在主页面下方有更多的按钮,点击进入更多的页面,在这个页面看到有添加智能药盒的按钮,点击进入到添加新药盒有页面就会自动搜索出memo box 智能药盒,点击药盒名就可以自行蓝牙连接,连接成功会在更多的页面上显示已连接。
void CcFileDlg::OnConnecting()
{
// TODO: Add your control notification handler code here
WSADATA wsaData;
SOCKADDR_IN server_addr;
memset(&server_addr, 0, sizeof(server_addr));
WORD wVersion;
wVersion = MAKEWORD(2, 2);
WSAStartup(wVersion, &wsaData);
// WSAStartup(0x0202, &wsaData);
sock = socket (af_inet,sock_stream,ipproto_tcp)。sock=socket.socket(socket.af_inet,socket.sock_stream)。 socket sock = socket( af_inet, sock_stream, ipproto_tcp)。
{
update(_T("create socket error !!!"));
}
//CString ip;
//ip_edit->GetWindowTextW(ip);//取得服务器的IP地址
inet_aton(ip, &(server_addr.sin_addr))) 。addr.sin_addr.s_addr = inet_addr( ip )。 serv.sin_addr.s_addr= inet_addr(ip) 。
BYTE nArrIP[4];
m_ip.GetAddress(nArrIP[0], nArrIP[1], nArrIP[2], nArrIP[3]);
CString str;
str.Format(_T("%d.%d.%d.%d"), nArrIP[0], nArrIP[1], nArrIP[2], nArrIP[3]);
ip_edit->SetWindowTextW(str);
char cp[50];
CString2Char(str, cp);

server_addr.sin_addr.s_addr = inet_addr(cp);
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
bind(sock, (SOCKADDR*)&server_addr, sizeof(SOCKADDR));
if(bind(sock,(sockaddr *)&addr_in,sizeof(sockaddr))==socket_error)。if (connect(fdsock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)。if (connect(fd, (struct sockaddr *)&s_in, sizeof (s_in)) == -1)。
{
update(_T("连接失败"));
}
else
{
//show_edit->SetWindowText(_T(""));
update(_T("连接成功"));
btnconn->EnableWindow(FALSE);//按钮变灰
AfxBeginThread(recv_thd, NULL);
}
}
7、添加发送按钮事件响应函数:在发送按钮上右键选择添加事件响应这一栏,将函数取名OnSending,如下
void CcFileDlg::OnSending()
{
// TODO: Add your control notification handler code here
//CString s;
//char * msg;
//send_edit->GetWindowTextW(s);
//msg = (LPSTR)(LPCTSTR)s;
//CString2Char(s, msg);
CString s;
char msg[1024];
send_edit->GetWindowTextW(s);

CString2Char(s, msg);
if (send(sock, msg, strlen(msg), 0) == SOCKET_ERROR)
{
update(_T("发送失败"));
}
else if (s == "")
{
MessageBox(_T("请输入信息"));
}
else
{
s = msg;
update(_T("client:") + s);//消息上屏,清空输入,并重获焦点
send_edit->SetWindowText(_T(""));
send_edit->SetFocus();
}
/*CString s;
char * msg;
send_edit->GetWindowText(s);
msg = (char*)s.GetBuffer(s.GetLength());
if (send(sock, msg, strlen(msg), 0) == SOCKET_ERROR)
{
show_edit->ReplaceSel(_T("发送失败/r/n"));
}
else if (s == "")
{
MessageBox(_T("请输入信息"));
}

else
{
为了在适当时候恢复输入焦点,cformview覆盖了消息处理函数onsetfocusmfc socket 是否无效,以便在视获得输入焦点时把输入焦点传递给m_hwndfocus(如果非空)。② 清空此功能消息记录:轻点“清空此功能消息记录”后mfc socket 是否无效,弹出“清空此功能消息记录”,轻点此消息框中的“清空”即可。当输入框获得焦点( focus )同时输入框内文字等于设置的提示信息时,就把输入框内清空,如图( chrome ):。
send_edit->SetWindowText(_T(""));
send_edit->SetFocus();
}*/
}
8、最后添加字符格式转换函数
/*
* 函数名: CString2Char
* 参数1: CString str 待转换字符串
* 参数2: char ch[] 转换后将要储存的位置
* 将Unicode下的CString转换为char*
*/
void CString2Char(CString str, char ch[])
{
int i;
char *tmpch;
int i= multibytetowidechar ( cp_utf8 , 0 ,(char*) str ,-1,null,0)。 int size_str = widechartomultibyte(cp_utf8, 0, str, -1, 0, 0, null, null)。 widechartomultibyte(cp_acp, 0, tchar, -1, _char, length, null, null)。
tmpch = new char[wLen + 1]; //分配变量的地址大小
h>// 读取文件到字符数组bool read(const char* file,char* str){if( null == file || null == str){return false。 widechartomultibyte(cp_acp, 0, tchar, -1, _char, length, null, null)。 int size_str = widechartomultibyte(cp_utf8, 0, str, -1, 0, 0, null, null)。
for (i = 0; tmpch[i] != '\0'; i++) ch[i] = tmpch[i];
ch[i] = '\0';
}
实验结果如图:
---------------------
作者:Ezreal_zhanglu
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-118363-1.html
赚中国人的钱拿去给美国人花
不懂什么叫升级改造吗
做点实事