📄 mainfrm.cpp
字号:
talkFrame->LoadFrame (IDR_MAINFRAME);
talkFrame->ShowWindow (SW_SHOW);
talkFrame->UpdateWindow ();
}
BOOL CMainFrame::OnToolTipNotify(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
TOOLTIPTEXT *pTTT=(TOOLTIPTEXT *)pNMHDR;
UINT nID = pNMHDR->idFrom;
if(pTTT->uFlags&TTF_IDISHWND)
{
nID=::GetDlgCtrlID ((HWND)nID);
if(nID==0)
return FALSE;
}
switch(nID)
{
case ID_TALKROOM:
pTTT->lpszText="QICQ聊天室";
break;
case ID_FIND:
pTTT->lpszText="查找用户";
break;
case ID_CALL:
pTTT->lpszText="即时寻呼";
break;
case ID_SET:
pTTT->lpszText="个人设定";
break;
case ID_QICQ:
pTTT->lpszText="上线下线离开";
break;
case ID_SHOWTOOL:
pTTT->lpszText="显示聊天室入口";//此处,请用一串活动的文本
break;
}
return true;
}
void CMainFrame::OnInitMenu(CMenu* pMenu)
{
CFrameWnd::OnInitMenu(pMenu);
// TODO: Add your message handler code here
}
void CMainFrame::OnShowtool()
{
// TODO: Add your command handler code here
BOOL bVisible = ((m_wndToolBar.GetStyle() & WS_VISIBLE) != 0);
ShowControlBar(&m_wndToolBar, !bVisible, FALSE);
RecalcLayout();
}
int ReadUserMessage(CGfxOutBarCtrl *StatuswndBar,WORD Y_UserQicqNo)//以一个全局变量为基础开始读
{
//第一项:属于哪个目录
//第二项:QICQ编号
//第三项:用户名称
//第四项:图像索引号
//第五项:是否上线
int tempIndex1,tempIndex2,tempIndex3=0;
char tempstring[100];
FILE *Read_fp;
struct USERMESSAGE
{
DWORD UserID;
WORD HowOld;
BOOL IsMaleOrFemale;
WORD ImageIndex;
char UserName[20];
char UserName1[20];
char EMail[100];
char HomePage[100];
char DText[200];
char MobileTel[16];
char Tel[16];
char OicqNo[10];
char Country[20];
char State[20];
char Address[100];
char Job[100];
char YouBian[10];
};
BYTE BkColor[3];
WORD FoderSize;
struct FODER
{
char name[100];
WORD UserCount;
};
struct FODER Foder;
struct USERMESSAGE UserMessage;
struct USERFRIENDMESSAGE
{
struct USERMESSAGE UserMessage;
WORD Foder;
int IsOnLine;
}UserFriendMessage;
//以块形式读出所有用户,并添加为未上线形式
sprintf(tempstring,"%d.dat",CurrentUserID);
WriteAFileForTest(tempstring);
Read_fp=fopen(tempstring,"rb");//此文件,在用户申请成功时生成。
if(Read_fp==NULL)
{
Read_fp=fopen(tempstring,"rb");//此文件,在用户申请成功时生成。
}
//开始读入文件
fread(BkColor,3,1,Read_fp);
fread(&FoderSize,sizeof(WORD),1,Read_fp);
fread(&UserMessage,sizeof(struct USERMESSAGE),1,Read_fp);
for(tempIndex1=0;tempIndex1<FoderSize;tempIndex1++)
{
fread(&Foder,sizeof(struct FODER),1,Read_fp);
StatuswndBar->AddFolder(Foder.name, 0);
for(tempIndex2=0;tempIndex2<Foder.UserCount;tempIndex2++)
{
fread(&UserFriendMessage,sizeof(struct USERFRIENDMESSAGE),1,Read_fp);
int tempData =UserFriendMessage.UserMessage.ImageIndex;
//在物理端,并没有将用户分组。所有用户都将在一个组中,接收到网络事项后,
//由定时器将消息发出,这时,将根据用户编号检测到,然后送给显示模块。
if(CurrentUserID==UserFriendMessage.UserMessage.UserID)
{
}
else
{
SockUserDef.Friend[tempIndex3].Friend =
UserFriendMessage.UserMessage.UserID;
SockUserDef.Friend[tempIndex3].OnOrDown =0;
strcpy(SockUserDef.Friend[tempIndex3].Name ,
UserFriendMessage.UserMessage.UserName);
SockUserDef.Friend[tempIndex3].ImgIndex =
UserFriendMessage.UserMessage.ImageIndex;//在图象列表中图标的序号
SockUserDef.Friend[tempIndex3].Index =0;//已被废除
SockUserDef.Friend[tempIndex3].Status =0;//上线下线切换标志
SockUserDef.Friend[tempIndex3].Foder =tempIndex1;//将用户组标志也存在与套接字
//有关的地方,做为一个副本
StatuswndBar->InsertItem(tempIndex1,UserFriendMessage.UserMessage.UserID,
UserFriendMessage.UserMessage.UserName,
// 1,0);
UserFriendMessage.UserMessage.ImageIndex*3,0,0);
tempIndex3++;
}
}
}
fclose(Read_fp);
//结束读入文件
StatuswndBar->SetSelFolder(0);
return 0;
}
int WriteAFileForTest(char *FileName)
{
int tempIndex1,tempIndex2;
FILE *Write_fp;
struct USERMESSAGE
{
DWORD UserID;
WORD HowOld;
BOOL IsMaleOrFemale;
WORD ImageIndex;
char UserName[20];
char UserName1[20];
char EMail[100];
char HomePage[100];
char DText[200];
char MobileTel[16];
char Tel[16];
char OicqNo[10];
char Country[20];
char State[20];
char Address[100];
char Job[100];
char YouBian[10];
};
BYTE BkColor[3]={128,128,128};
WORD FoderSize=4;
struct FODER
{
char name[100];
WORD UserCount;
};
struct FODER Foder;
struct USERMESSAGE UserMessage;
struct USERFRIENDMESSAGE
{
struct USERMESSAGE UserMessage;
WORD Foder;
int IsOnLine;
}UserFriendMessage;
//此处,从一个初始文件中读出相应信息
//BYTE[3]//窗口底色
//WORD 组数
//第一组:(结构)
//组名
//组中用户好友个数
//用户本身信息
//用户好友信息:(结构)
//用户好友所属组
//用户好友编号
//用户好友名称
//用户好友详细信息(结构还未定义)
//用户好友图标索引号
//用户好友是否上线
//用户详细信息结构的定义:
//以块形式读出所有用户,并添加为未上线形式
Write_fp=fopen(FileName,"wb");
fwrite(BkColor,3,1,Write_fp);
fwrite(&FoderSize,sizeof(WORD),1,Write_fp);
UserMessage.UserID=CurrentUserID;
UserMessage.HowOld=26;
UserMessage.IsMaleOrFemale=1;
UserMessage.ImageIndex =0;
sprintf(UserMessage.UserName,"%d",10001);
sprintf(UserMessage.UserName1,"%d",10001);
sprintf(UserMessage.EMail,"%d",10001);
sprintf(UserMessage.HomePage,"%d",10001);
sprintf(UserMessage.DText,"%d",10001);
sprintf(UserMessage.MobileTel,"%d",10001);
sprintf(UserMessage.Tel,"%d",10001);
sprintf(UserMessage.OicqNo,"%d",10001);
sprintf(UserMessage.Country,"%d",10001);
sprintf(UserMessage.State,"%d",10001);
sprintf(UserMessage.Address,"%d",10001);
sprintf(UserMessage.Job,"%d",10001);
sprintf(UserMessage.YouBian,"%d",10001);
fwrite(&UserMessage,sizeof(struct USERMESSAGE),1,Write_fp);
for(tempIndex1=0;tempIndex1<FoderSize;tempIndex1++)
{//每组的用户,读时用同样的格式
sprintf(Foder.name,"%d",tempIndex1);
Foder.UserCount=8;
fwrite(&Foder,sizeof(struct FODER),1,Write_fp);
for(tempIndex2=0;tempIndex2<Foder.UserCount;tempIndex2++)
{
UserFriendMessage.Foder=tempIndex1;
UserFriendMessage.IsOnLine=0;
UserFriendMessage.UserMessage.UserID=10000+tempIndex2;
UserFriendMessage.UserMessage.HowOld=26;
UserFriendMessage.UserMessage.IsMaleOrFemale=1;
UserFriendMessage.UserMessage.ImageIndex =tempIndex2;
sprintf(UserFriendMessage.UserMessage.UserName,"%d",10000+tempIndex2);
sprintf(UserFriendMessage.UserMessage.UserName1,"%d",10000+tempIndex2);
sprintf(UserFriendMessage.UserMessage.EMail,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.HomePage,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.DText,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.MobileTel,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.Tel,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.OicqNo,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.Country,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.State,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.Address,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.Job,"%d",tempIndex2);
sprintf(UserFriendMessage.UserMessage.YouBian,"%d",tempIndex2);
fwrite(&UserFriendMessage,sizeof(struct USERFRIENDMESSAGE),1,Write_fp);
}
}
fclose(Write_fp);
return 0;
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//这里,还要检查数据准备好的标志,如果数据准备好,则跳动
//应该多做几个数据接收缓存区,要不干脆做个数据队列
/*
wndBar.InsertItem(0,10004,
"10004",
4*3+1,1);
wndBar.RedrawWindow ();
KillTimer(4);
*/
int tempData;
int tempIndex;
for(tempIndex=0;tempIndex<MAXFRIENDSIZE;tempIndex++)
{
// if( SockUserDef.Friend[tempIndex].OnOrDown ==1)
if( SockUserDef.Friend[tempIndex].OnOrDown !=1)
{
if( SockUserDef.Friend[tempIndex].Status ==0)
{
SockUserDef.Friend[tempIndex].Status =1;//切换好友在线的标志
//要两个,STATUS和ONORDOWN不相等时,才重新排序
//最后一个参数,用来指示是否要动画
wndBar.InsertItem(SockUserDef.Friend[tempIndex].Foder,
SockUserDef.Friend[tempIndex].Friend ,
SockUserDef.Friend[tempIndex].Name ,
SockUserDef.Friend[tempIndex].ImgIndex*3+1,1,0);
wndBar.RedrawWindow ();
}
}
else
{
if( SockUserDef.Friend[tempIndex].Status ==1)
{
SockUserDef.Friend[tempIndex].Status =0;//切换好友在线的标志
//要两个,STATUS和ONORDOWN不相等时,才重新排序
wndBar.InsertItem(SockUserDef.Friend[tempIndex].Foder,
SockUserDef.Friend[tempIndex].Friend ,
SockUserDef.Friend[tempIndex].Name ,
SockUserDef.Friend[tempIndex].ImgIndex*3,0,0);
wndBar.RedrawWindow ();
}
}
if(SockUserDef.Friend[tempIndex].RcvBuffer.GetSize())
{
if(SockUserDef.Friend[tempIndex].OnOrDown==1)
{
tempData=1;
}
else
{
tempData=0;
}
wndBar.InsertItem(SockUserDef.Friend[tempIndex].Foder,
SockUserDef.Friend[tempIndex].Friend ,
SockUserDef.Friend[tempIndex].Name ,
SockUserDef.Friend[tempIndex].ImgIndex*3+tempData,
SockUserDef.Friend[tempIndex].OnOrDown,
1);
wndBar.RedrawWindow ();
}
}
// m_List.RedrawWindow ();
CFrameWnd::OnTimer(nIDEvent);
}
void CMainFrame::OnAnimTrim(WPARAM wParam, LPARAM lParam)
{
DWORD tempIndex = lParam;
int tempData;
if(SockUserDef.Friend[tempIndex].OnOrDown==1)
{
tempData=1;
}
else
{
tempData=0;
}
wndBar.InsertItem(SockUserDef.Friend[tempIndex].Foder,
SockUserDef.Friend[tempIndex].Friend ,
SockUserDef.Friend[tempIndex].Name ,
SockUserDef.Friend[tempIndex].ImgIndex*3+tempData,
SockUserDef.Friend[tempIndex].OnOrDown,
0);
wndBar.RedrawWindow ();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -