📄 chatclient.c
字号:
if(ret == 0)
MessageBox(hwnd, "Could not SetTimer()!", "Error", MB_OK | MB_ICONEXCLAMATION);
hInstance = (HINSTANCE) GetWindowLong( hwnd, GWL_HINSTANCE );
//接收显示
hwndReceiveEdit = CreateWindow( TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_HSCROLL | WS_VSCROLL | WS_BORDER
| ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_LEFT,
0, 0, 0, 0, hwnd, (HMENU) ID_RECEIVEEDIT, hInstance, NULL );
//发送显示
hwndSendEdit = CreateWindow( TEXT("edit"), NULL,
WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_HSCROLL | WS_VSCROLL | WS_BORDER
| ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_LEFT,
0, 0, 0, 0, hwnd, (HMENU) ID_SENDEDIT, hInstance, NULL );
//发送按钮
hwndButtonSend = CreateWindow( TEXT("button"), TEXT("发送"),
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONSEND, hInstance, NULL );
//接收文件按钮
hwndButtonRecvFile = CreateWindow( TEXT("button"), TEXT("接收文件"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONRECVFILE, hInstance, NULL );
//设置端口号
hwndServPort=CreateWindow( TEXT("edit"), "127.0.0.1",
WS_CHILD | WS_VISIBLE | WS_BORDER
| ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_LEFT,
0, 0, 0, 0, hwnd, (HMENU) ID_SERVPORT, hInstance, NULL );
//连接按钮
hwndButtonConn=CreateWindow( TEXT("button"), TEXT("连接"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONCONN, hInstance, NULL );
//发送文件按钮
hwndSendFile=CreateWindow( TEXT("button"), TEXT("发送文件"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONSENDFILE, hInstance, NULL );
return 0;
case WM_SIZE:
cxClient = LOWORD( lParam );
cyClient = HIWORD( lParam );
hpen = CreatePen( PS_DOT, 1, RGB(58,110,165) );
hrgnx = CreateEllipticRgn( 90, 130, 490, 280 );
hrgny = CreateEllipticRgn( 215, 5, 365, 405 );
CombineRgn( hrgn, hrgnx, hrgny, RGN_XOR );
DeleteObject( hrgnx );
DeleteObject( hrgny );
MoveWindow( hwndReceiveEdit, LOWORD(lParam)/2, 0, LOWORD(lParam)/2,2*HIWORD(lParam)/5, TRUE );
MoveWindow( hwndSendEdit, LOWORD(lParam)/2, 3*HIWORD(lParam)/5, LOWORD(lParam)/2, HIWORD(lParam)/5, TRUE );
MoveWindow( hwndButtonSend, LOWORD(lParam)/2,4*HIWORD(lParam)/5+10,80,30, TRUE );
MoveWindow( hwndButtonRecvFile, LOWORD(lParam)/2+100,4*HIWORD(lParam)/5+10,80,30, TRUE );
MoveWindow( hwndServPort, LOWORD(lParam)/2+100,3*HIWORD(lParam)/5-50,150,30, TRUE );
MoveWindow( hwndButtonConn, LOWORD(lParam)/2+300,3*HIWORD(lParam)/5-50,80,30, TRUE );
MoveWindow( hwndSendFile, LOWORD(lParam)/2+200,4*HIWORD(lParam)/5+10,80,30, TRUE );
return 0;
case WM_SOCKET:
wEvent = WSAGETSELECTEVENT(lParam);
wError = WSAGETSELECTERROR(lParam);
switch( wEvent )
{
case FD_CONNECT:
if( wError )
{
MessageBox( hwnd, "Connect Error!", "Client", MB_ICONERROR | MB_OK );
return 0;
}
EnableWindow( hwndSendEdit, TRUE );
EnableWindow( hwndReceiveEdit, TRUE );
return 0;
case FD_READ:
if( wError )
{
MessageBox( hwnd, "Read Error!", "Client", MB_ICONERROR | MB_OK );
return 0;
}
recv( remote_server, szReceive, sizeof(szReceive)-1, 0 );
//设置显示方式
if(strlen(szReceive)<1000)
{
_strtime( tbuffer );
strcat(szShow,szReceive);
strcat(szShow," :Server ");
strcat(szShow,tbuffer);
strcat(szShow,"\r\n");
SetWindowText( hwndReceiveEdit, szShow );
}
return 0;
}
return 0;
case WM_SETFOCUS:
SetFocus( hwndSendEdit );
return 0;
case WM_COMMAND:
//发送消息按钮被单击
if(( LOWORD(wParam) == ID_BUTTONSEND )&&( HIWORD(wParam) == BN_CLICKED ))
{
GetWindowText( hwndSendEdit, szSend, GetWindowTextLength( hwndSendEdit ) + 1 );
if(GetWindowTextLength( hwndSendEdit )==0)
MessageBox(NULL,"不能发空消息","Error!",MB_OK);
else
send( remote_server, szSend, strlen(szSend)+1, 0 );
SetWindowText(hwndSendEdit,NULL);
}
//连接按钮被单击
if(LOWORD(wParam) == ID_BUTTONCONN )
if( HIWORD(wParam) == BN_CLICKED )
{
GetWindowText( hwndServPort, SERVER_ADDR, GetWindowTextLength( hwndServPort ) + 1 );
if( nError = WSAStartup( MAKEWORD(2,0), &WSAData ) )
{
MessageBox( hwnd, "WinSock Startup Error!", "Client", MB_ICONERROR | MB_OK );
return TRUE;
}
remote_server = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( remote_server == INVALID_SOCKET )
{
MessageBox( hwnd, "Socket Creation Error!", "Client", MB_ICONERROR | MB_OK );
WSACleanup();
return TRUE;
}
if( SOCKET_ERROR == WSAAsyncSelect( remote_server, hwnd,
WM_SOCKET, FD_CONNECT | FD_READ ) )
{
MessageBox( hwnd, "WSAAsyncSelect Error!", "Client", MB_ICONERROR | MB_OK );
closesocket( remote_server );
WSACleanup();
return TRUE;
}
server.sin_family = AF_INET;
server.sin_port = htons( SERVER_PORT );
server.sin_addr.S_un.S_addr = inet_addr( SERVER_ADDR );
connect( remote_server, (struct sockaddr *)&server, sizeof(server) );
if( WSAGetLastError() != WSAEWOULDBLOCK )
{
MessageBox( hwnd, "Connect Error:Would Block!", "Client", MB_ICONERROR | MB_OK );
closesocket( remote_server );
WSACleanup();
return 0;
}
}
//发送文件按钮被单击
if( LOWORD(wParam) == ID_BUTTONSENDFILE)
if( HIWORD(wParam) == BN_CLICKED )
{
GetOpenFileName(&sendfile);
hfsend = CreateFile(sendfile.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
SetFilePointer(hfsend,0,NULL,FILE_BEGIN);
dwFileSize = GetFileSize(hfsend, NULL);
ReadFile(hfsend, szChar,dwFileSize, &dwRead, NULL);
send( remote_server, szChar, dwFileSize, 0 );
CloseHandle(hfsend);
}
//接收文件按钮被单击
if((LOWORD(wParam) == ID_BUTTONRECVFILE )&&
( HIWORD(wParam) == BN_CLICKED ))
{
if(!szReceive)
MessageBox(NULL,"无文件传送过来","Error",MB_OK);
else
{
GetSaveFileName(&ofn);
hf = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
WriteFile(hf,szReceive,strlen(szReceive)+1,&dwWrite,NULL);
SetFilePointer( hf, 0, NULL, FILE_END );
}
CloseHandle(hf);
}
switch(LOWORD(wParam))
{
case ID_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
case IDR_ABOUT:
DialogBox(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
}
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
//显示小球
DrawBall(hdc, &rcClient);
SelectObject( hdc, hpen );
SelectClipRgn( hdc, hrgn);
//显示背景
for( x = cxClient/100; x < cxClient; x += cxClient/100 )
{
MoveToEx( hdc, x, 0, NULL );
LineTo( hdc, x, cyClient );
}
for( y = cyClient/100; y < cyClient; y += cyClient/100 )
{
MoveToEx( hdc, 0, y, NULL );
LineTo( hdc, cxClient, y );
}
EndPaint(hwnd, &ps);
}
break;
case WM_TIMER:
{
HDC hdc = GetDC(hwnd);
UpdateBall(&rcClient);
DrawBall(hdc, &rcClient);
ReleaseDC(hwnd, hdc);
}
break;
case WM_DESTROY:
KillTimer(hwnd, ID_TIMER);
closesocket( remote_server );
WSACleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -