📄 1.cpp
字号:
Temp,
n,
0
);
if (nwritten == SOCKET_ERROR)
{
Displays(hWnd, "信息发送失败-由于服务器程序已重启,请重新启动登陆程序.");
return 0;
}
nleft -= nwritten;
Temp += nwritten;
}
if(!nleft)
return 1;
return 0;
}
/*
* 数据接收子函数
*/
int RecvUser_Lg(SOCKET sock,char * readline,int maxlen)
{
int n;
int rc;
char c;
for (n=1; n<maxlen; n++)
{
if ( ( rc= recv(sock, &c, 1, 0)) == 1)
{
*readline++ = c;
if (c=='\n')
break;
}
else if (rc == 0)
{
if (n == 1)
return 0;
else
break;
}
else
{
Displays(hWnd,"接收数据产生错误.");
return -1; /* Error */
}
}
*(readline-1) = '\0';
return n;
}
/*
* 屏幕输出子函数
*/
void Displays(HWND hWnd,char *P)
{
static char OutText[5][128];
HDC hdc;
int i;
for(i=0;i<5;i++)
{
if(OutText[i]==NULL)
{
strcpy(OutText[i],P);
break;
}
}
if(i>=5)
{
for(i=1;i<5;i++)
strcpy(OutText[i-1],OutText[i]);
strcpy(OutText[i-1],P);
}
InvalidateRect(hWnd,NULL,TRUE);
UpdateWindow(hWnd);
hdc=GetDC(hWnd);
for(i=0;i<5;i++)
{
if(OutText[i]==NULL) break;
TextOut(hdc,(rect.right-rect.left)/2-100,
(rect.bottom-rect.top)/2+150+20*i,
OutText[i],strlen(OutText[i]));
}
ReleaseDC(hWnd,hdc);
}
//在内存堆中申请屏幕显示空间
void InitRam(int QNum)
{
int i,n=0,lines;
for(i=0;i<QNum;i++)
{
if(lines=strlen(TestPaper[i].Tile.Text)/Width) n+=lines;
if(lines=strlen(TestPaper[i].choose[1].Text)/Width) n+=lines;
if(lines=strlen(TestPaper[i].choose[2].Text)/Width) n+=lines;
if(lines=strlen(TestPaper[i].choose[3].Text)/Width) n+=lines;
if(lines=strlen(TestPaper[i].choose[4].Text)/Width) n+=lines;
}
LINES=QNum*7+n;
Screen=new Lines [LINES];
memset(Screen,0,sizeof(Lines)*LINES);
hWndList=new hWndChoose [QNum];
}
//初始化屏幕显示缓存子程序
void InitScreen(int cxChar,int QNum)
{
int i,j,lines=0,k=0,n=0,HanChar=0;
for(i=0;i<QNum;i++)
{
for(;;)
{
for(j=0,HanChar=0;j<Width;)
{
if(!TestPaper[i].Tile.Text[n])
break;
if(TestPaper[i].Tile.Text[n]>0) HanChar+=1;
Screen[lines].Line[j++]=TestPaper[i].Tile.Text[n++];
}
Screen[lines].Line[j]='\0';
lines++;
if(j<Width)
{
n=0;
break;
}
if (HanChar%2){
n--;
Screen[lines-1].Line[j-1]='\0';}
}
for(k=0;k<4;k++)
{
Screen[lines].earmark=i*10+k+1;
for(;;)
{
for(j=0,HanChar=0;j<Width;)
{
if(!TestPaper[i].choose[k].Text[n])
break;
if(TestPaper[i].Tile.Text[n]>0) HanChar+=1;
Screen[lines].Line[j++]=TestPaper[i].choose[k].Text[n++];
}
Screen[lines].Line[j]='\0';
if(Inherilt)
{
if(k==Result[i]-1)
Screen[lines].color2=1;
}
lines++;
if(j<Width)
{
n=0;
break;
}
if (HanChar%2){
n--;
Screen[lines-1].Line[j-1]='\0';}
Screen[lines].color1=i*10+k+1;
}
}
lines+=2;
}
}
//初始化子控件函数
void InitClientWindow(HWND hWnd,int N)
{
for(int i=0;i<N;i++)
{
hWndList[i].choose[0]=CreateWindow("button","",WS_CHILD | WS_VISIBLE |WS_GROUP| BS_AUTORADIOBUTTON |BS_PUSHLIKE|BS_FLAT,
0,0,12,12,hWnd, (HMENU)(i*10+1),hInst, NULL);
hWndList[i].choose[1]=CreateWindow("button","",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON |BS_PUSHLIKE|BS_FLAT,
0,0,12,12,hWnd, (HMENU)(i*10+2),hInst, NULL);
hWndList[i].choose[2]=CreateWindow("button","",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON |BS_PUSHLIKE|BS_FLAT,
0,0,12,12,hWnd, (HMENU)(i*10+3),hInst, NULL);
hWndList[i].choose[3]=CreateWindow("button","",WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON |BS_PUSHLIKE|BS_FLAT,
0,0,12,12,hWnd, (HMENU)(i*10+4),hInst, NULL);
}
}
//滚动条控制子函数
void Scroll( HWND hWnd, int* pnCurPos, DWORD wScroll )
{
int lines,nNumPaint,i,j;
HDC hdc;
SCROLLINFO si;
// Use GetScrollInfo() to get information
// about the scroll bar.
//.......................................
si.cbSize = sizeof( SCROLLINFO );
si.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
GetScrollInfo( hWnd, SB_VERT, &si );
switch( LOWORD(wScroll) )
{
case SB_LINEDOWN :
if ( *pnCurPos <= (int)(si.nMax - si.nPage) )
*pnCurPos += 1;
break;
case SB_LINEUP :
if ( *pnCurPos > 0 )
*pnCurPos -= 1;
break;
case SB_THUMBTRACK:
*pnCurPos=HIWORD(wScroll);
break;
}
if ( si.nPos != *pnCurPos )
{
RECT cltRect;
GetClientRect( hWnd, &cltRect );
cltRect.top+=(cltRect.bottom-cltRect.top)/10;
cltRect.bottom-=(cltRect.bottom-cltRect.top)/10;
cltRect.left+=(cltRect.right-cltRect.left)/30+245;
cltRect.right-=(cltRect.right-cltRect.left)/30;
ScrollWindowEx( hWnd, 0, (si.nPos-*pnCurPos)*cyChar, NULL,
&cltRect, NULL, NULL, SW_INVALIDATE|SW_ERASE);
UpdateWindow(hWnd);
si.fMask = SIF_POS;
si.nPos = *pnCurPos;
SetScrollInfo( hWnd, SB_VERT, &si, TRUE );
hdc=GetDC(hWnd);
lines=(rect.bottom-rect.top)*8/10/cyChar;
nNumPaint = min( *pnCurPos+lines,LINES);
for(i=0;i<LINES;i++)
{
if(i<*pnCurPos||i>=nNumPaint)
ShowWindow(hWndList[Screen[i].earmark/10].choose[Screen[i].earmark%10-1],0);
}
for(j=0,i=*pnCurPos;i<nNumPaint;i++,j++)
{
if(Screen[i].color2)SetTextColor(hdc,RGB(255,0,0));
else SetTextColor(hdc,RGB(0,0,0));
TextOut(hdc,((rect.right-rect.left)/30+295),(rect.bottom-rect.top)*1/10+cyChar*j,Screen[i].Line,strlen(Screen[i].Line));
if(Screen[i].earmark)
{
MoveWindow(hWndList[Screen[i].earmark/10].choose[Screen[i].earmark%10-1],((rect.right-rect.left)/30-5+200+100)-50,(rect.bottom-rect.top)*1/10+cyChar*j,cxChar*2,cyChar,0);
ShowWindow(hWndList[Screen[i].earmark/10].choose[Screen[i].earmark%10-1],1);
}
}
ReleaseDC(hWnd,hdc);
// GetClientRect( hWnd, &cltRect );
// cltRect.top+=(cltRect.bottom-cltRect.top)/10;
// cltRect.bottom-=(cltRect.bottom-cltRect.top)/10;
// cltRect.left+=(cltRect.right-cltRect.left)/30+200;
// cltRect.right=cltRect.left+80;
// InvalidateRect(hWnd,&cltRect,TRUE);
// UpdateWindow(hWnd);
}
}
void CALLBACK TimerProc(HWND hWnd,UINT iMsg, UINT iTimerID, DWORD dwTime)
{
int Temp,Hour,Minute,Sconde;
static int total;
HFONT hFont,OldhFont;
HDC hdc;
RECT cltRect;
char Times[10];
if(TIMES<=0)
{
SaveResult(true);
Beep(2000,1000);
}
if(TIMES<=10)
Beep(1000,10);
TIMES--;
total++;
if(total>=20)
{
SaveResult(false);
total=0;
}
Temp=TIMES;
Sconde=Temp%60;
Minute=Temp/60%60;
Hour=Temp/60/60%24;
sprintf(Times,"%2d:%2d:%2d",Hour,Minute,Sconde);
GetClientRect( hWnd, &cltRect );
hdc=GetDC(hWnd);
hFont=CreateFont(24,16,0,0,400,0,0,0,OEM_CHARSET,
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_SCRIPT,
"script");
OldhFont=(HFONT)SelectObject(hdc,(HFONT)hFont);
TextOut(hdc,(cltRect.right-cltRect.left)/30,(rect.bottom-rect.top)/13*9,Times,strlen(Times));
SelectObject(hdc,OldhFont);
ReleaseDC(hWnd,hdc);
}
void SaveResult(BOOL Turn)
{
for(int i=0;i<LINES;i++)
{
if(Screen[i].earmark&&Screen[i].color2==1)
Result[Screen[i].earmark/10]=Screen[i].earmark%10;
}
strcpy(Buffers,"Srecv:SaveDt:");
sprintf(&Buffers[strlen(Buffers)],"%s#%s#%s*",users.Name,users.Subject,users.PassWord);
for(i=0;i<QuestionNumber;i++)
sprintf(&Buffers[strlen(Buffers)],"%d#",Result[i]);
sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, (struct sockaddr *) &serv_addr,sizeof(serv_addr));
SendUser_Lg(sock,Buffers);
if(Turn)
{
strcpy(Buffers,"Srecv:ChanST:");
sprintf(&Buffers[strlen(Buffers)],"%s#%s#%s*",users.Name,users.Subject,users.PassWord);
SendUser_Lg(sock,Buffers);
}
closesocket(sock);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -