qanswerview.cpp

来自「一款抢答器 界面友好 功能完善 支持断开重连 可在娱乐竞赛中使用此为 源代码」· C++ 代码 · 共 528 行

CPP
528
字号
// QAnswerView.cpp : CQAnswerView 类的实现
//

#include "stdafx.h"
#include "QAnswer.h"

#include "QAnswerDoc.h"
#include "QAnswerView.h"
#include "Msg.h"
#include "mmsystem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CQAnswerView

IMPLEMENT_DYNCREATE(CQAnswerView, CFormView)

BEGIN_MESSAGE_MAP(CQAnswerView, CFormView)

	ON_BN_CLICKED(IDC_BUTTON11, &CQAnswerView::OnBnClickedButton11)
	ON_BN_CLICKED(IDC_GROUP1, &CQAnswerView::OnBnClickedGroup1)
	ON_BN_CLICKED(IDC_GROUP2, &CQAnswerView::OnBnClickedGroup2)
	ON_BN_CLICKED(IDC_GROUP7, &CQAnswerView::OnBnClickedGroup7)
	ON_BN_CLICKED(IDC_GROUP8, &CQAnswerView::OnBnClickedGroup8)
	ON_BN_CLICKED(IDC_GROUP3, &CQAnswerView::OnBnClickedGroup3)
	ON_BN_CLICKED(IDC_GROUP9, &CQAnswerView::OnBnClickedGroup9)
	ON_BN_CLICKED(IDC_GROUP10, &CQAnswerView::OnBnClickedGroup10)
	ON_BN_CLICKED(IDC_GROUP4, &CQAnswerView::OnBnClickedGroup4)
	ON_BN_CLICKED(IDC_GROUP6, &CQAnswerView::OnBnClickedGroup6)
	ON_BN_CLICKED(IDC_GROUP5, &CQAnswerView::OnBnClickedGroup5)
	ON_BN_CLICKED(IDC_BTN_RESET, &CQAnswerView::OnBnClickedBtnReset)
	ON_WM_TIMER()
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	ON_WM_SIZE()
	//ON_STN_CLICKED(IDC_STATIC3, &CQAnswerView::OnStnClickedStatic3)
	ON_STN_CLICKED(IDC_PICTURE, &CQAnswerView::OnStnClickedPicture)
END_MESSAGE_MAP()

// CQAnswerView 构造/析构

CQAnswerView::CQAnswerView()
: CFormView(CQAnswerView::IDD)


{
	m_timeLimit=15;
	m_uState=0;


}

CQAnswerView::~CQAnswerView()
{
}

void CQAnswerView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);

	DDX_Control(pDX, IDC_GROUP1, m_btnArray[0]);
	DDX_Control(pDX, IDC_GROUP2, m_btnArray[1]);
	DDX_Control(pDX, IDC_GROUP3, m_btnArray[2]);
	DDX_Control(pDX, IDC_GROUP4, m_btnArray[3]);
	DDX_Control(pDX, IDC_GROUP5, m_btnArray[4]);
	DDX_Control(pDX, IDC_GROUP6, m_btnArray[5]);
	DDX_Control(pDX, IDC_GROUP7, m_btnArray[6]);
	DDX_Control(pDX, IDC_GROUP8, m_btnArray[7]);
	DDX_Control(pDX, IDC_GROUP9, m_btnArray[8]);
	DDX_Control(pDX, IDC_GROUP10, m_btnArray[9]);
	//DDX_Control(pDX, IDC_BMPPROGRESS, m_bmpProgress);
	//DDX_Control(pDX, IDC_PROGRESS1, m_ctlProgress);

	DDX_Control(pDX, IDC_STATIC1, m_testProgress);
	DDX_Control(pDX, IDC_BUTTON11, m_btnStart);
	DDX_Control(pDX, IDC_BTN_RESET, m_btnReset);
	//DDX_Control(pDX, IDC_STATIC3, m_pictureCtl);
}

BOOL CQAnswerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	cs.x =0;
	cs.y=0;
	cs.cx =650;
	cs.cy=500;

	return CFormView::PreCreateWindow(cs);
}

void CQAnswerView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit(false);

	/*m_btnArray[0].SubclassDlgItem (IDC_GROUP1,this);
	m_btnArray[1].SubclassDlgItem (IDC_GROUP2,this);
	m_btnArray[2].SubclassDlgItem (IDC_GROUP3,this);
	m_btnArray[3].SubclassDlgItem (IDC_GROUP4,this);
	m_btnArray[4].SubclassDlgItem (IDC_GROUP5,this);
	m_btnArray[5].SubclassDlgItem (IDC_GROUP6,this);
	m_btnArray[6].SubclassDlgItem (IDC_GROUP7,this);
	m_btnArray[7].SubclassDlgItem (IDC_GROUP8,this);
	m_btnArray[8].SubclassDlgItem (IDC_GROUP9,this);
	m_btnArray[9].SubclassDlgItem (IDC_GROUP10,this);*/

	/*for(int i=0;i<10;i++)
	{
	m_btnArray[i].ShowWindow (SW_HIDE);
	}*/

	/*m_bmpProgress.SetRange (0,);
	m_bmpProgress.SetStep (1);*/
	for(int j=0;j<this->GetDocument ()->m_uNumber ;j++)
	{
		this->GetDlgItem (IDC_TEXT1+j)->ShowWindow (SW_SHOW);
	}

	for(int i=0;i<10;i++)
	{
		m_btnArray[i].LoadBitmaps (IDB_GROUPU,IDB_GROUPD,IDB_GROUPU,IDB_GROUPX);
		m_btnArray[i].SizeToContent ();
	}

	/*m_btnArray[9].LoadBitmaps (IDB_GROUPU,IDB_GROUPD,IDB_GROUPU,IDB_GROUPX);
	m_btnArray[9].SizeToContent ();*/

	m_btnStart.LoadBitmaps (IDB_BUTTONU,IDB_BUTTOND,IDB_BUTTONU);
	m_btnStart.SizeToContent ();

	m_btnReset.LoadBitmaps (IDB_RELORDU,IDB_REBORDD);
	m_btnReset.SizeToContent ();
	//m_test.AutoLoad (IDC_TEST,this);

	m_testProgress.SetRange (0,(this->GetDocument ()->m_timeLimit *2));
	m_testProgress.SetStep (1);


}


// CQAnswerView 诊断

#ifdef _DEBUG
void CQAnswerView::AssertValid() const
{
	CFormView::AssertValid();
}

void CQAnswerView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CQAnswerDoc* CQAnswerView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQAnswerDoc)));
	return (CQAnswerDoc*)m_pDocument;
}
#endif //_DEBUG





void CQAnswerView::OnBnClickedButton11()
{
	this->GetDocument ()->m_bOpen =TRUE;
	this->GetDocument ()->m_bQOpen =TRUE;
	//this->GetDocument ()->m_msgArray .RemoveAll ();
	for(int i=0;i<this->GetDocument ()->m_uNumber  ;i++)
	{
		delete this->GetDocument ()->m_msgArray[i];
		this->GetDocument ()->m_msgArray[i]=NULL;

	} 

	delete this->GetDocument ()->m_pMsg ;
	this->GetDocument ()->m_pMsg=NULL;

	this->SetTimer(1,500,NULL);



	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup1()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (0));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第一队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}




	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup2()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (1));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第二队")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup7()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (6));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第七队")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup8()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (7));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第八队 ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup3()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (2));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第三队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup9()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (8));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第九队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup10()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (9));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第十队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup4()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (3));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第四队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup6()
{
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (5));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第六队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);
		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedGroup5()
{	
	if(this->GetDocument ()->m_pMsg==NULL)
	{
		CMsg * msg=(CMsg *)(this->GetDocument ()->m_msgArray .GetAt (4));
		if(msg->m_uMode==1)
		{
			CDlgAnswer *dlg=new CDlgAnswer();
			dlg->m_strAnswer =msg->m_strAnswer ;
			CString str;
			str=_T("第五队  ")+msg->m_strUserName ;
			dlg->Create (IDD_DLG_ANSWER,this);
			//dlg.SetWindowTextW(str);
			dlg->ShowWindow (SW_SHOW);
			dlg->SetWindowTextW(str);

		}
	}
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnBnClickedBtnReset()
{
	this->GetDocument ()->m_bOpen =FALSE;
	this->GetDocument ()->m_bQOpen=FALSE;
	for(int i=0;i<this->GetDocument ()->m_uNumber ;i++)
	{
		this->m_btnArray [i].ModifyStyle (0,WS_DISABLED);

	}
	this->Invalidate ();
	this->m_testProgress .SetPos (0);
	// TODO: 在此添加控件通知处理程序代码
}

void CQAnswerView::OnTimer(UINT_PTR nIDEvent)
{
	//m_test.StepIt ();
	if(nIDEvent==1)
	{
		int i,j;
		m_testProgress.GetRange (i,j);
		//int a = m_testProgress.GetPos ();
		if(m_testProgress.GetPos ()>=i && m_testProgress.GetPos ()<j)
		{
			m_testProgress.StepIt ();
			sndPlaySound (_T("res\\HONK.WAV"),SND_ASYNC);
			//PlaySound(_T("res\\HONK.WAV"),NULL,SND_ASYNC|SND_NODEFAULT );
		}
		else
		{
			KillTimer(1);
			this->GetDocument ()->m_bOpen =FALSE;
		}
	}
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CFormView::OnTimer(nIDEvent);
}

void CQAnswerView::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	m_bmpBG.LoadBitmapW (IDB_BACKGROUND);
	BITMAP bmStruct;
	m_bmpBG.GetBitmap (&bmStruct);

	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC (&dc);
	dcCompatible.SelectObject (&m_bmpBG);
	CRect rect;
	GetClientRect(&rect);
	//	dc.BitBlt (0,0,rect.Width (),rect.Height (),&dcCompatible,0,0,SRCCOPY);
	//dc.BitBlt (0,0,bmStruct.bmWidth ,bmStruct.bmHeight ,&dcCompatible,0,0,SRCCOPY);
	dc.StretchBlt (0,0,rect.Width (),rect.Height (),&dcCompatible,0,0,bmStruct.bmWidth ,bmStruct.bmHeight ,SRCCOPY);
	dcCompatible.DeleteDC ();
	m_bmpBG.DeleteObject ();

	// TODO: 在此处添加消息处理程序代码
	// 不为绘图消息调用 CFormView::OnPaint()
}

BOOL CQAnswerView::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	/* m_bmpBG.LoadBitmapW (IDB_BACKGROUND);
	CDC dcCompatible;
	dcCompatible.CreateCompatibleDC (pDC);
	dcCompatible.SelectObject (&m_bmpBG);
	CRect rect;
	GetClientRect(&rect);
	pDC->BitBlt (0,0,rect.Width (),rect.Height (),&dcCompatible,0,0,SRCCOPY);
	dcCompatible.DeleteDC ();
	m_bmpBG.DeleteObject ();*/
	return CFormView::OnEraseBkgnd(pDC);
}

void CQAnswerView::OnSize(UINT nType, int cx, int cy)
{
	CFormView::OnSize(nType, cx, cy);
	//this->SetWindowPos(NULL,0,0,900,800,SWP_NOMOVE   | SWP_NOZORDER|SWP_FRAMECHANGED);

	// TODO: 在此处添加消息处理程序代码
}


void CQAnswerView::OnStnClickedPicture()
{

	if(m_uState==0)
	{
		((CStatic*)GetDlgItem(IDC_PICTURE))->SetBitmap (::LoadBitmap ( AfxGetResourceHandle(),
			MAKEINTRESOURCE(IDB_BMPMUST)));
		m_uState=1;
		CMsg msg;
		msg.m_strAnswer =_T("");
		msg.m_uIndex =0;
		msg.m_uMode =7;
		msg.m_strUserName =_T("");

		for(POSITION pos=this->GetDocument ()->m_connectionList .GetHeadPosition();pos!=NULL;)
		{
			CServerSocket * pSocket=(CServerSocket*)(this->GetDocument ()->m_connectionList.GetNext (pos));
			pSocket->SendMsg(&msg);

		}
	}
	else
	{
		((CStatic*)GetDlgItem(IDC_PICTURE))->SetBitmap (::LoadBitmap ( AfxGetResourceHandle(),
			MAKEINTRESOURCE(IDB_BMPQUICK)));
		m_uState=0;

		CMsg msg;
		msg.m_strAnswer =_T("");
		msg.m_uIndex =0;
		msg.m_uMode =6;
		msg.m_strUserName =_T("");

		for(POSITION pos=this->GetDocument ()->m_connectionList .GetHeadPosition();pos!=NULL;)
		{
			CServerSocket * pSocket=(CServerSocket*)(this->GetDocument ()->m_connectionList.GetNext (pos));
			pSocket->SendMsg(&msg);

		}

	}
	//this->Invalidate ();
	// TODO: 在此添加控件通知处理程序代码
}

⌨️ 快捷键说明

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