?? mainfrm.cpp
字號:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "msg.h"
#include "Client.h"
#include "lookdlg.h"
#include "talkdlg.h"
#include "frienddetail.h"
#include "modifypidlg.h"
#include "searchdlg.h"
#include "SendToalldlg.h"
#include "multisenddlg.h"
#include "ShowOnlinedlg.h"
#include "SendBroadcastDlg.h"
#include "ShowAddMsgDlg.h"
#include "ShowBroadcastDlg.h"
#include "addfrienddlg.h"
#include "USkin.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_SETFOCUS()
ON_WM_GETMINMAXINFO()
ON_WM_CLOSE()
ON_WM_TIMER()
ON_COMMAND(ID_SEND_MESSAGE, OnSendMessage)
ON_UPDATE_COMMAND_UI(ID_SEND_MESSAGE, OnUpdateSendMessage)
ON_COMMAND(ID_FRIEND_DETAIL, OnFriendDetail)
ON_COMMAND(ID_OFFLINE, OnOffline)
ON_COMMAND(ID_ONHIDE, OnOnhide)
ON_COMMAND(ID_ONLINE, OnOnline)
ON_COMMAND(ID_SEARCH, OnSearch)
ON_COMMAND(ID_PERSONINFO_SETUP, OnPersoninfoSetup)
ON_COMMAND(ID_SENDTO_ALL, OnSendtoAll)
ON_COMMAND(ID_SHOW_ONLINE, OnShowOnline)
ON_COMMAND(ID_SEND_BROADCAST, OnSendBroadcast)
ON_COMMAND(ID_ADD_FRIEND, OnAddFriend)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MY_TRAY_NOTIFICATION,OnTrayNotification)
ON_MESSAGE(WM_HOTKEY,OnHotKey)
ON_MESSAGE(WM_OUTBAR_NOTIFY, OnOutbarNotify)
ON_MESSAGE(WM_RECIEVE_MSG,ProcRecv)
ON_MESSAGE(WM_ADDFRIEND_REFRESH,OnAddFriendRefresh)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
m_pSearch=NULL;
m_pModifyPI=NULL;
m_pMultiSend=NULL;
m_pSendToAll=NULL;
m_pShowOnline=NULL;
m_pSendBroad=NULL;
m_pShowNotice=NULL;
m_pAddFriendDlg=NULL;
m_bRecvTotal=FALSE;
}
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation;
m_wndBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), this,AFX_IDW_PANE_FIRST, dwf);
m_wndBar.SetOwner(this);
m_wndBar.SetImageList(&GetApp()->m_imaLarge, CGfxOutBarCtrl::fLargeIcon);
m_wndBar.SetImageList(&GetApp()->m_imaSmall, CGfxOutBarCtrl::fSmallIcon);
m_wndBar.AddFolder("我的好友", 0);
m_wndBar.AddFolder("陌生人", 1);
m_wndBar.AddFolder("黑名單", 2);
UserInfo* pInfo;
CString str;
for(int i=1;i<GetApp()->m_aUserInfo.GetSize();i++)
{
pInfo=GetApp()->m_aUserInfo.GetAt(i);
if(pInfo->HaveDetail)
m_wndBar.AddItem(0,pInfo->Name,pInfo->PhotoId,pInfo->Id);
else
{
str.Format("%d",pInfo->Id);
m_wndBar.AddItem(0,str,0,pInfo->Id);
}
}
m_wndBar.SetSelFolder(0);
BOOL result1=::RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_ALT,'X');
BOOL result2=::RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_ALT,'x');
BOOL result3=::RegisterHotKey(m_hWnd,1003,MOD_CONTROL|MOD_ALT,'m');
BOOL result4=::RegisterHotKey(m_hWnd,1004,MOD_CONTROL|MOD_ALT,'M');
if(!result1&&!result2&&!result3&&!result4)
{
//AfxMessageBox(IDS_HOTKEY_REG_FAIL);
}
m_TrayIcon.SetNotificationWnd(this,WM_MY_TRAY_NOTIFICATION);
str=GetApp()->m_strCurUserDir;
str=str.Left(str.GetLength()-1);
m_TrayIcon.SetIcon(IDR_OFFLINE,str);
str.Format("ID:%d",GetApp()->m_uCurrentUserID);
SetWindowText(str);
CMenu* pMenu=GetMenu();
menu1.Attach(pMenu->GetSubMenu(0)->GetSafeHmenu());
menu2.Attach(pMenu->GetSubMenu(1)->GetSafeHmenu());
menu1.LoadToolBarResource(IDR_TOOLBAR1);
menu2.LoadToolBarResource(IDR_TOOLBAR2);
menu1.RemapMenu(&menu1);
menu2.RemapMenu(&menu2);
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
cs.dwExStyle|=WS_EX_TOOLWINDOW|WS_EX_TOPMOST;
cs.lpszClass = AfxRegisterWndClass(0);
cs.x=650;
cs.y=50;
cs.cx=150;
cs.cy=500;
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnSetFocus(CWnd* pOldWnd)
{
// forward focus to the view window
m_wndBar.SetFocus();
}
BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// let the view have first crack at the command
if (m_wndBar.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
return TRUE;
// otherwise, do default handling
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x = 90;
lpMMI->ptMaxTrackSize.x=200;
lpMMI->ptMinTrackSize.y=200;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
LRESULT CMainFrame::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if (wParam== 1001||wParam==1002)
{
ShowWindow(SW_NORMAL);
SetForegroundWindow();
return 1;
}
else if(wParam== 1003||wParam==1004)
{
SendMessage(WM_SYSCOMMAND,SC_MINIMIZE,0);
return 1;
}
return 0;
}
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if(message==WM_SYSCOMMAND)
{
if(wParam==SC_MINIMIZE)
{
ShowWindow(SW_HIDE);
return 0;
}
else if(wParam==SC_CLOSE)
{
ShowWindow(SW_HIDE);
return 0;
}
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
LRESULT CMainFrame::OnTrayNotification(WPARAM wp,LPARAM lp)
{
return m_TrayIcon.OnTrayNotification(wp,lp);
}
void CMainFrame::OnClose()
{
::UnregisterHotKey(m_hWnd,1001);
::UnregisterHotKey(m_hWnd,1002);
::UnregisterHotKey(m_hWnd,1003);
::UnregisterHotKey(m_hWnd,1004);
CFrameWnd::OnClose();
}
LRESULT CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case NM_OB_ITEMCLICK:
// cast the lParam to an integer to get the clicked item
{
nGroupFlag=m_wndBar.iSelFolder;
nCurSelID = m_wndBar.GetItemData(lParam);
nCurSelIndex=lParam;
CMenu menu;
CGfxPopupMenu cMenu;
menu.LoadMenu(IDR_POPMENU);
cMenu.Attach(menu.GetSubMenu(0)->GetSafeHmenu());
if(nGroupFlag==1)
{
cMenu.AppendMenu(MF_STRING,ID_ADD_FRIEND,"加為好友");
}
cMenu.LoadToolBarResource(IDR_TOOLBAR3);
cMenu.RemapMenu(&cMenu);
CPoint mouse;
GetCursorPos(&mouse);
cMenu.TrackPopupMenu(TPM_LEFTALIGN,mouse.x,mouse.y,this);
}
return 1;
case NM_OB_ITEMDCLICK:
{
nGroupFlag=m_wndBar.iSelFolder;
nCurSelID = m_wndBar.GetItemData(lParam);
nCurSelIndex=lParam;
SendMessage(WM_COMMAND,ID_SEND_MESSAGE,0);
}
return 1;
case NM_OB_ONLABELENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
//TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_ONGROUPENDEDIT:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);
}
return 1;
case NM_OB_DRAGITEM:
// cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items
// return 1 to do the change and 0 to cancel it
{
OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);
}
return 1;
}
return 0;
}
LRESULT CMainFrame::ProcRecv(WPARAM wParam,LPARAM lParam)
{
CData* pData=(CData*)wParam;
UINT index=pData->index;
int & iOnlineState=GetApp()->m_bOnlineState;
switch(index)
{
case SEND_MSG_TO_FRIEND:
{
//recv from friend or server
if(iOnlineState==0)break;
CMsg1 msg;
CopyDataBuf(&msg,pData);
if(!msg.LoadFromBuf())
{
TRACE0("msg.LoadFromBuf error!\n");
break;
}
int mindex=0;
SaveMsg* pMsg=new SaveMsg;
pMsg->type=NORMAL_MSG;
pMsg->ID=msg.MyId;
pMsg->Time=msg.Time;
pMsg->Msg=msg.Msg;
UserInfo *pInfo=NULL;
FriendState *pState=NULL;
if(FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,msg.MyId,pInfo,pState))
{
pState->aMsg.Add(pMsg);
}
else
{
// 陌生人
if(FindInArray(GetApp()->m_aStranger,GetApp()->m_aStrangerState,msg.MyId,pInfo,pState))
{
pState->aMsg.Add(pMsg);
}
else
{
pInfo=new UserInfo;
pInfo->Id=msg.MyId;
pInfo->HaveDetail=0;
pState=new FriendState;
pState->IP=msg.tarIP;
pState->Port=msg.nPort;
pState->OnlineState=1;
pState->aMsg.Add(pMsg);
GetApp()->m_aStranger.Add(pInfo);
GetApp()->m_aStrangerState.Add(pState);
GetApp()->m_aStranger.GetSize();
CString str;
str.Format("%d",pInfo->Id);
m_wndBar.AddItem(1,str,0,pInfo->Id);
m_wndBar.Invalidate();
}
}
if(pState->pRecv==NULL)
{
pState->pRecv=new CLookDlg;
pState->pRecv->Create(CLookDlg::IDD,GetDesktopWindow());
}
pState->pRecv->PostMessage(WM_RECVMSG,(WPARAM)pInfo,(LPARAM)pState);
break;
}
case SOMEONE_ONHIDE:
{
if(iOnlineState==0)break;
CNoticeMsg msg;
CopyDataBuf(&msg,pData);
if(!msg.LoadFromBuf())break;
UserInfo *pInfo=NULL;
FriendState *pState=NULL;
if(FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,msg.MyId,pInfo,pState))
{
pState->OnlineState=2;
m_wndBar.SetOnlineImage(msg.MyId,FALSE);
m_wndBar.Invalidate();
}
break;
}
case SOMEONE_ONLINE:
{
if(iOnlineState==0)break;
CNoticeMsg msg;
CopyDataBuf(&msg,pData);
if(!msg.LoadFromBuf())break;
UserInfo *pInfo=NULL;
FriendState *pState=NULL;
if(FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,msg.MyId,pInfo,pState))
{
pState->OnlineState=1;
m_wndBar.SetOnlineImage(msg.MyId);
m_wndBar.Invalidate();
}
break;
}
case SOMEONE_OFFLINE:
{
if(iOnlineState==0)break;
UserInfo *pInfo=NULL;
FriendState *pState=NULL;
if(FindInArray(GetApp()->m_aUserInfo,GetApp()->m_aUserState,pData->MyId,pInfo,pState))
{
pState->OnlineState=0;
m_wndBar.SetOnlineImage(pData->MyId,FALSE);
m_wndBar.Invalidate();
}
break;
}
case ONLINE_OK:
{
if(!GetApp()->m_bOnlineState)
SetTimer(1,TimerSpanClient,NULL);
GetApp()->m_bOnlineState=1;
CString str=GetApp()->m_strCurUserDir;
str=str.Left(str.GetLength()-1);
m_TrayIcon.SetIcon(IDR_ONLINE,str);
AfxBeginThread(RequestFriendDetail,0,THREAD_PRIORITY_BELOW_NORMAL);
break;
}
case ONHIDE_OK:
{
if(!GetApp()->m_bOnlineState)
SetTimer(1,TimerSpanClient,NULL);
GetApp()->m_bOnlineState=2;
CString str=GetApp()->m_strCurUserDir;
str=str.Left(str.GetLength()-1);
m_TrayIcon.SetIcon(IDR_ONHIDE,str);
AfxBeginThread(RequestFriendDetail,0,THREAD_PRIORITY_BELOW_NORMAL);
break;
}
case ALL_FRIEND_ID:
{
if(iOnlineState==0)break;
CMsg2 msg;
CopyDataBuf(&msg,pData);
if(!msg.LoadFromBuf())
break;
CString str1;
for(int i=0;i<msg.aFriendId.GetSize();i++)
{
if(FindInArray(GetApp()->m_aUserInfo,msg.aFriendId.GetAt(i))!=-1)
continue;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -