⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lookdlg.cpp

📁 仿QQ的聊天程序vc++/mfc来学习的简易聊天室代码功能较全
💻 CPP
字号:
// LookDlg.cpp : implementation file
//

#include "stdafx.h"
#include "client.h"
#include "LookDlg.h"
#include "mainfrm.h"
#include "talkdlg.h"
#include "frienddetail.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLookDlg dialog


CLookDlg::CLookDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLookDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLookDlg)
	m_strTime = _T("");
	m_strID = _T("");
	m_strName = _T("");
	m_strDate = _T("");
	m_strCity = _T("");
	//}}AFX_DATA_INIT
	pInfo=NULL;
	pState=NULL;	
	m_bClose=TRUE;
	hIcon=AfxGetApp()->LoadIcon(IDR_MESSAGE1);
}


void CLookDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLookDlg)
	DDX_Control(pDX, ID_SHOW_DETAIL, m_headBmp);
	DDX_Control(pDX, IDC_TALK_RECORD, m_TalkRecord);
	DDX_Text(pDX, IDC_TIME, m_strTime);
	DDX_Text(pDX, IDC_ID, m_strID);
	DDX_Text(pDX, IDC_NAME, m_strName);
	DDX_Text(pDX, IDC_DATE, m_strDate);
	DDX_Text(pDX, IDC_CITY, m_strCity);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLookDlg, CDialog)
	//{{AFX_MSG_MAP(CLookDlg)
	ON_WM_CLOSE()
	ON_BN_CLICKED(ID_SHOW_DETAIL, OnShowDetail)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_RECVMSG,OnRecvMsg)
	ON_MESSAGE(WM_REFRESH_DATA,OnRefreshData)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLookDlg message handlers

BOOL CLookDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	SetIcon(hIcon,TRUE);
	SetIcon(hIcon,FALSE);	
	CMenu* pMenu=GetSystemMenu(FALSE);
	pMenu->EnableMenuItem(SC_RESTORE,MF_GRAYED|MF_DISABLED);
	pMenu->EnableMenuItem(SC_SIZE,MF_GRAYED|MF_DISABLED);
	pMenu->EnableMenuItem(SC_MAXIMIZE,MF_GRAYED|MF_DISABLED);

	return TRUE;  
}


LRESULT CLookDlg::OnRecvMsg(WPARAM wParam,LPARAM lParam) 
{	
	pInfo=(UserInfo*)wParam;
	pState=(FriendState*)lParam;
	
	int & iCurMsg=pState->nCurrentMsg;
	
	CString str;
	int i=pState->aMsg.GetSize()-1;
	str.Format("(%s)%s\r\n%s\r\n\r\n",pState->aMsg.GetAt(i)->Time.Format("%Y-%m-%d %H:%M:%S"),pInfo->Name,pState->aMsg.GetAt(i)->Msg);
	m_TalkRecord.SetSel(0,0);
	m_TalkRecord.ReplaceSel(str);
	if(pState->pTalk==NULL)
	{
		pState->pTalk=new CTalkDlg;
		pState->pTalk->Create(CTalkDlg::IDD,GetDesktopWindow());
	}
	pState->pTalk->m_TalkRecord.SetSel(0,0);
	pState->pTalk->m_TalkRecord.ReplaceSel(str);

	if(m_bClose)
	{		
		m_strID.Format("%d",pInfo->Id);
		int photoid=0;
		if(pInfo->HaveDetail)
		{		
			m_strCity=pInfo->City;
			m_strName=pInfo->Name;			
			if(pInfo->PhotoId>=0&&pInfo->PhotoId<UINT(GetApp()->m_nNumberHeadBmp))
				photoid=pInfo->PhotoId;			
		}
		CBitmap* pBmp=NULL;
		pBmp=GetApp()->m_paBitmap[2*photoid];
		m_headBmp.SetBitmap(pBmp);

		m_strDate=pState->aMsg.GetAt(iCurMsg)->Time.Format(" %Y-%m-%d");
		m_strTime=pState->aMsg.GetAt(iCurMsg)->Time.Format(" %H:%M:%S");

		iCurMsg++;
	
		UpdateData(FALSE);
		m_bClose=FALSE;		
	}

	ShowWindow(SW_SHOWNORMAL);
	return 0;
}

void CLookDlg::OnOK() 
{
	m_bClose=TRUE;	
	if(pState->pTalk==NULL)
	{
		pState->pTalk=new CTalkDlg;
		pState->pTalk->Create(CTalkDlg::IDD,GetDesktopWindow());
	}
	CRect r1,r2,r3;
	GetWindowRect(&r1);
	pState->pTalk->GetWindowRect(&r2);
	r3.left=r1.left;
	r3.top=r1.top;
	r3.right=r1.left+r2.Width();
	r3.bottom=r1.top+r2.Height();
	pState->pTalk->MoveWindow(&r3,FALSE);
	pState->pTalk->PostMessage(WM_SEND_MSG,(WPARAM)pInfo,(LPARAM)pState);
	
	CDialog::OnOK();
}

void CLookDlg::OnCancel() 
{
	m_bClose=TRUE;	
	CDialog::OnCancel();
}

void CLookDlg::OnClose() 
{
	m_bClose=TRUE;	
	CDialog::OnClose();
}

void CLookDlg::OnShowDetail() 
{
	if(pState->pFInfo==NULL)
	{
		pState->pFInfo=new CFriendDetailDlg;
		pState->pFInfo->Create(CFriendDetailDlg::IDD,GetDesktopWindow());
	}
	pState->pFInfo->SetOwnerWnd(this);
	pState->pFInfo->SendMessage(WM_SHOW_FRIEND_DETAIL,(WPARAM)pInfo,(LPARAM)pState);
	pState->pFInfo->OnRefresh();
}

LRESULT CLookDlg::OnRefreshData(WPARAM wParam,LPARAM lParam)
{
	m_strCity=pInfo->City;
	m_strName=pInfo->Name;
	if(pInfo->PhotoId>=0&&pInfo->PhotoId<UINT(GetApp()->m_nNumberHeadBmp))
		m_headBmp.SetBitmap(GetApp()->m_paBitmap[2*pInfo->PhotoId]);
	UpdateData(FALSE);
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -