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 + -
显示快捷键?