#include "main.h"
/* Declare Dialog procedure */
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
HINSTANCE hinst;
HMENU menu;
BOOL server;
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
hinst=hThisInstance;
hwnd = CreateDialog(hThisInstance,
MAKEINTRESOURCE(IDD_DEMO),//identifies dialog box template name
0,//HWND_DESKTOP,// handle to owner window
(DLGPROC)DlgProc// pointer to dialog box procedure
);
if (!hwnd)
{
char buf[100];
//formats and stores a series of characters and values in a buffer
wsprintf (buf,"Error x%x", GetLastError());
MessageBox(0,buf,szDlgTitle,MB_ICONEXCLAMATION | MB_OK);
return 1;
}
/* Run the message loop. It will run until GetMessage() returns 0 */
int status;
while ((status=GetMessage (&messages, NULL, 0, 0))!=0)
{
if(!IsDialogMessage(hwnd,&messages))
{
if (status==-1)
return -1;
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}
}
/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}
/* This function is called by the Windows function DispatchMessage() */
BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hSend;
switch (message) /* handle the messages */
{
case WM_INITDIALOG:
menu = LoadMenu(hinst, MAKEINTRESOURCE(ID_MENU));
SetMenu(hwnd, menu);
hSend=GetDlgItem(hwnd,IDB_SEND);
//SetWindowText(hSend,"dsds" );
SetDlgItemText(hwnd,IDB_LC,"LC" );
EnableWindow(GetDlgItem(hwnd,IDB_LC),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_IP),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_PORT),FALSE);
SetDlgItemText(hwnd,IDC_IP,"192.168.10.4");
SetDlgItemText(hwnd,IDC_PORT,"7007" );
//创建一个计时器
SetTimer(hwnd,1,1000,NULL);
//SetFocus(GetDlgItem(hwnd,IDC_SENDTXT));
break;
case WM_COMMAND:
switch(wParam)
{
case IDM_FILENEW:
HttpClient();
break;
case IDM_FILEOPEN:
case IDM_FILELISTEN:
server=TRUE;
SetDlgItemText(hwnd,IDB_LC,"监听(&L)" );
SetWindowText(hwnd,"服务器端" );
EnableWindow(GetDlgItem(hwnd,IDB_LC),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_IP),FALSE);
EnableWindow(GetDlgItem(hwnd,IDC_PORT),FALSE);
EnableMenuItem(menu,IDM_FILECONNECT,MF_GRAYED);
break;
case IDM_FILECONNECT:
server=FALSE;
SetDlgItemText(hwnd,IDB_LC,"连接服务器(&C)" );
SetWindowText(hwnd,"客户端" );
EnableWindow(GetDlgItem(hwnd,IDB_LC),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_IP),TRUE);
EnableWindow(GetDlgItem(hwnd,IDC_PORT),TRUE);
EnableMenuItem(menu,IDM_FILELISTEN,MF_GRAYED);
break;
case IDM_EDITUNDO:
case IDM_EDITCUT:
case IDM_EDITCOPY:
case IDM_EDITPASTE:
case IDM_EDITDELETE:
case IDM_TRANSPORTFILE:
MessageBox( hwnd, (LPSTR) "功能没有实现",
(LPSTR)szDlgTitle,
MB_ICONINFORMATION | MB_OK );
break;
case IDM_HELPHELP:
WinHelp( hwnd, (LPSTR) "HELPFILE.HLP",
HELP_HELPONHELP, 0L );
break;
case IDM_FILEEXIT:
SendMessage( hwnd, WM_CLOSE, 0, 0L );
break;
case IDM_HELPABOUT:
MessageBox(hwnd,"欢迎使用聊天程序1.0版/n/n**科技大学胡子/n2004(C)版权所有 " ,
(LPSTR)szDlgTitle,
MB_ICONINFORMATION | MB_OK );
break;
case IDM_HELPMYBLOG:
ShellExecute(hwnd,"open","http://blog.csdn.net/huyoo",NULL,NULL,SW_NORMAL);
break;
case IDCANCEL:
//MessageBox(hwnd,"你单击了退出, 对话框将会关闭./n/n再见!",szDlgTitle,0);
EndDialog(hwnd,TRUE);
SendMessage( hwnd, WM_CLOSE, 0, 0L );
break;
case IDB_SEND:
char szText[128],buf[256];
GetDlgItemText(hwnd,IDC_SENDTXT,szText,sizeof(szText));
wsprintf(buf,"你单击了发送消息./n/n你输入的文本是:%s",szText);
if(server)
{
if( send(connected_skt,buf,strlen(buf),0) == SOCKET_ERROR ) //客户端是阻塞式的
{
MessageBox(hwnd, "发送消息出错!",szDlgTitle,MB_OK);
break;
}
}
else
{
if( send(skt,buf,strlen(buf),0) == SOCKET_ERROR ) //客户端是阻塞式的
{
MessageBox(hwnd, "发送消息出错!",szDlgTitle,MB_OK);
break;
}
//recv(skt,buf,strlen(buf),0); //它将会停在这里,直到接到数据为止
}
SetDlgItemText(hwnd,IDC_REVTXT,szText);
break;
case IDB_QQ:
ShellExecute(hwnd,"open","qq.exe",NULL,NULL,SW_NORMAL);
break;
case IDB_LC:
if(server)
{
//MessageBox(hwnd,"listen",szDlgTitle,MB_OK);
if(!CreateServer(hwnd))
{
MessageBox(hwnd,"服务器创建失败",(LPSTR)szDlgTitle,MB_ICONINFORMATION | MB_OK );
break;
}
}
else
{
//MessageBox(hwnd,"connect",szDlgTitle,MB_OK);
if(!CreateClient(hwnd))
{
MessageBox(hwnd,"客户端创建失败",(LPSTR)szDlgTitle,MB_ICONINFORMATION | MB_OK );
break;
}
char szIP[127],szPORT[127],buf[256];
GetDlgItemText(hwnd,IDC_IP,szIP,sizeof(szIP));
GetDlgItemText(hwnd,IDC_PORT,szPORT,sizeof(szPORT));
wsprintf(buf,">>>>>>连接到服务器:%s端口:%s",szIP,szPORT);
SetDlgItemText(hwnd,IDC_REVTXT,buf);
}
break;
}
break;
case WM_TIMER:
SYSTEMTIME ti;
char buf[256];
GetLocalTime(&ti);
wsprintf(buf,"现在时间是%04d年%02d月%02d日%02d:%02d:%02d,周%d",
ti.wYear,ti.wMonth,ti.wDay,ti.wHour,ti.wMinute,ti.wSecond,ti.wDayOfWeek);
SetWindowText(GetDlgItem(hwnd,IDC_TIME),buf);
break;
case SOCKETMSG:
//if(WSAGETSELECTERROR(lParam))
//break;
switch(WSAGETSELECTEVENT(lParam))
{
case FD_READ:
char buf[256];
recv(connected_skt,buf,strlen(buf),0);
SetDlgItemText(hwnd,IDC_REVTXT,buf);//显示接受到的消息
break;
case FD_WRITE:
break;
case FD_CLOSE:
closesocket(connected_skt);
break;
case FD_CONNECT:
SetDlgItemText(hwnd,IDC_REVTXT,"已经连接上");//显示接受到的消息
break;
case FD_ACCEPT:
int Len = sizeof(clientaddr);
//建立连接,得到的地址存入客户端clientaddr地址中去
if((connected_skt=accept(skt,(struct sockaddr *)&clientaddr,&Len))== INVALID_SOCKET )
{
MessageBox(hwnd,"接受客户端的Socket连接失败", szDlgTitle,MB_OK);
return FALSE;
}
//连接上了,然后监听客户端的FD_READ和关闭
WSAAsyncSelect(connected_skt, hwnd,SOCKETMSG,FD_READ|FD_CLOSE);
char *welcome="欢迎来到聊天室!!";
send(wParam, welcome, strlen(welcome), 0);
break;
}
SetDlgItemText(hwnd,IDC_REVTXT,"客户端发送消息过来了");//显示接受到的消息
break;
case WM_CLOSE:
if(connected_skt != INVALID_SOCKET)
{
closesocket(connected_skt);
}
if( skt != INVALID_SOCKET )
{
closesocket(skt);
}
if( WSACleanup() != 0 )
{
MessageBox(hwnd, "不能释放Winsocket",szDlgTitle,MB_OK );
}
KillTimer(hwnd,1);
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default:
return FALSE;
}
return TRUE;
}