📄 chatserver.c
字号:
hwndButtonSend = CreateWindow( TEXT("button"), TEXT("发送"),
WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONSEND, hInstance, NULL );
//发送文件按钮
hwndButtonSendFile= CreateWindow( TEXT("button"), TEXT("发送文件"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONSENDFILE, hInstance, NULL );
//字体颜色选择按钮
hwndFontSize= CreateWindow( TEXT("button"), TEXT("选择字体"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONFONTSIZE, hInstance, NULL );
//就受文件按钮
hwndButtonRecvFile=CreateWindow( TEXT("button"), TEXT("接收文件"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
0,0,0,0,
hwnd, (HMENU) ID_BUTTONRECVFILE, hInstance, NULL );
if( nError = WSAStartup( MAKEWORD(2,0), &WSAData ) )
{
MessageBox( hwnd, "WinSock Startup Error!", "Server", MB_ICONERROR | MB_OK );
return TRUE;
}
local_server = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( local_server == INVALID_SOCKET )
{
MessageBox( hwnd, "Socket Creation Error!", "Server", MB_ICONERROR | MB_OK );
WSACleanup();
return TRUE;
}
if( SOCKET_ERROR == WSAAsyncSelect( local_server, hwnd,
WM_SOCKET, FD_ACCEPT | FD_READ ) )
{
MessageBox( hwnd, "WSAAsyncSelect Error!", "Server", MB_ICONERROR | MB_OK );
closesocket( local_server );
WSACleanup();
return TRUE;
}
server.sin_family = AF_INET;
server.sin_port = htons( SERVER_PORT );
if( SOCKET_ERROR == bind( local_server, (struct sockaddr *)&server, sizeof(server) ) )
{
MessageBox( hwnd, "Bind Error!", "Server", MB_ICONERROR | MB_OK );
closesocket( local_server );
WSACleanup();
return TRUE;
}
listen( local_server, 5 );
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( hwndButtonSendFile, LOWORD(lParam)/2+100,4*HIWORD(lParam)/5+10,80,30, TRUE );
MoveWindow( hwndFontSize, LOWORD(lParam)/2+200,4*HIWORD(lParam)/5+10,80,30, TRUE );
MoveWindow( hwndButtonRecvFile, LOWORD(lParam)/2+300,4*HIWORD(lParam)/5+10,80,30, TRUE );
return 0;
case WM_SOCKET:
wEvent = WSAGETSELECTEVENT(lParam);
wError = WSAGETSELECTERROR(lParam);
switch( wEvent )
{
case FD_ACCEPT:
if( wError )
{
MessageBox( hwnd, "Accept Error!", "Server", MB_ICONERROR | MB_OK );
return 0;
}
nSize = sizeof(from);
local_listen = accept( local_server, (struct sockaddr *)&from, &nSize );
EnableWindow( hwndSendEdit, TRUE );
EnableWindow( hwndReceiveEdit, TRUE );
return 0;
case FD_READ:
if( wError )
{
MessageBox( hwnd, "Read Error!", "Server", MB_ICONERROR | MB_OK );
return 0;
}
recv( local_listen, szReceive, sizeof(szReceive)-1, 0 );
strcpy(szRecvBuf,szReceive);
//显示设定,如果不是文件就输出
if(strlen(szReceive)<1000)
{
_strtime( tbuffer );
strcat(szShow,szReceive);
strcat(szShow," :Client ");
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_BUTTONFONTSIZE)
if( HIWORD(wParam) == BN_CLICKED )
{
OnFontDialog(hwndSendEdit);
}
//发送文件按钮被单击
if( LOWORD(wParam) == ID_BUTTONSENDFILE)
if( HIWORD(wParam) == BN_CLICKED )
{
GetOpenFileName(&ofn);
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
SetFilePointer(hf,0,NULL,FILE_BEGIN);
dwFileSize = GetFileSize(hf, NULL);
ReadFile(hf, szChar,dwFileSize, &dwRead, NULL);
send( local_listen, szChar, dwFileSize, 0 );
CloseHandle(hf);
}
//发送 按钮被单击
if( LOWORD(wParam) == ID_BUTTONSEND )
if( HIWORD(wParam) == BN_CLICKED )
{
GetWindowText( hwndSendEdit, szSend, GetWindowTextLength( hwndSendEdit ) + 1 );
if(GetWindowTextLength( hwndSendEdit )==0)
MessageBox(NULL,"不能发空消息","Error!",MB_OK);
else
send( local_listen, szSend, strlen(szSend)+1, 0 );
// send( local_listen, rgbCurrent, sizeof(rgbCurrent)+1, 0 );
SetWindowText(hwndSendEdit,NULL);
}
//接收文件被单击
if((LOWORD(wParam) == ID_BUTTONRECVFILE )&&
( HIWORD(wParam) == BN_CLICKED ))
{
if(!szRecvBuf)
MessageBox(NULL,"无文件传送过来","Error",MB_OK);
else
{
GetSaveFileName(&recvfile);
hfrecv = CreateFile(szFileName, GENERIC_READ|GENERIC_WRITE,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
WriteFile(hfrecv,szRecvBuf,strlen(szRecvBuf)+1,&dwWrite,NULL);
SetFilePointer( hfrecv, 0, NULL, FILE_END );
}
CloseHandle(hfrecv);
}
switch(LOWORD(wParam))
{
case ID_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
case ID_ABOUT:
DialogBox(GetModuleHandle(NULL),
MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc);
}
return 0;
case WM_PAINT:
{
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 );
}
hdcClientSend=BeginPaint(hwndSendEdit,&psSend);
GetClientRect(hwndSendEdit, &rectSend);
GetWindowText( hwndSendEdit, szSend, GetWindowTextLength( hwndSendEdit ) + 1 );
if(szSend)
{
SetTextColor(hdcClientSend, rgbCurrent);
DrawText(hdcClientSend,szSend,-1,&rectSend,DT_BOTTOM);
}
EndPaint(hwndSendEdit,&psSend);
hdcClientRecv=BeginPaint(hwndReceiveEdit,&psRecv);
GetClientRect(hwndReceiveEdit, &rectRecv);
GetWindowText( hwndReceiveEdit, szReceive, GetWindowTextLength( hwndReceiveEdit ) + 1 );
if(szReceive)
{
//设置字体颜色
SetTextColor(hdcClientRecv, rgbCurrent);
DrawText(hdcClientRecv,szReceive,-1,&rectRecv,DT_BOTTOM);
}
EndPaint(hwndReceiveEdit,&psRecv);
EndPaint(hwnd,&ps);
}
break;
case WM_TIMER:
{
// RECT rcClient;
HDC hdc = GetDC(hwnd);
UpdateBall(&rcClient);
DrawBall(hdc, &rcClient);
ReleaseDC(hwnd, hdc);
}
break;
case WM_DESTROY:
KillTimer(hwnd, ID_TIMER);
closesocket( local_server );
closesocket( local_listen );
WSACleanup();
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam );
}
//字体对话框
void OnFontDialog(HWND hwnd)
{
CHOOSEFONT cf = {sizeof(CHOOSEFONT)};
LOGFONT lf;
HDC hdc;
hdc=GetDC(hwnd);
GetObject(hfont, sizeof(LOGFONT), &lf);
cf.Flags = CF_EFFECTS | CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
cf.hwndOwner = hwnd;
cf.lpLogFont = &lf;
cf.rgbColors = g_rgbText;
if (ChooseFont(&cf)==TRUE)
{
hfont = CreateFontIndirect(cf.lpLogFont);
hfontPrev = SelectObject(hdc, hfont);
rgbCurrent= cf.rgbColors;
rgbPrev = SetTextColor(hdc, rgbCurrent);
}
DeleteDC(hdc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -