Показать сообщение отдельно
Старый 03.12.2004, 08:52     # 1
DeMx
Guest
 
Сообщения: n/a

Тестирование, на Visual C++

Нужно создаться тест. Вопрос и 4 или более вариантов ответов. Никаких заморочек не надо.
Не хочу плодить много форм (надо 10 вопросов), поэтому решил после каждого вопроса менять подписи у Radio Box'а и сам вопрос в Edit Box'е, т.е. всё будет на одной форме, но её содержание будет меняться по ходу выполнения программы. Однако тут появилась трабла - после ответа на первый вопрос, события Radio Box'ов перестаются работать. Может можно как-то обновить окно или ещё что?
Вот код:
Код:
#include "stdafx.h"
#include "TestDualityProblem.h"
#include "TestDualityProblem_2.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTestDualityProblem_2 dialog


CTestDualityProblem_2::CTestDualityProblem_2(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDualityProblem_2::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDualityProblem_2)
	m_question = _T("");
	//}}AFX_DATA_INIT
}


void CTestDualityProblem_2::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestDualityProblem_2)
	DDX_Text(pDX, IDC_EDIT1, m_question);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestDualityProblem_2, CDialog)
	//{{AFX_MSG_MAP(CTestDualityProblem_2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButtonNext)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_BUTTON4, OnButtonExit)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDualityProblem_2 message handlers

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

	m_question = "Лучший игрок And1?";
	test = 1;
	q = 0;
	UpdateData(false);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTestDualityProblem_2::OnButtonNext() 
{
	UpdateData(true);
	CStdioFile File;
	File.Open("stat.txt", CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate);
	File.SeekToEnd();
	if (test == 1) {
		File.WriteString("Вопрос 1: ");
		if (q == 2) {
			File.WriteString("правильно.");
		}
		else
			File.WriteString("не правильно.");
		test++;
	}
	if (test == 2) {
		File.WriteString("Вопрос 2: ");
		if (q == 1) {
			File.WriteString("правильно.");
		}
		else
			File.WriteString("не правильно.");
		m_question = "Лучший игрок NBA?";
		SetWindowText("Программа тестирования. Вопрос 2 из 10");
		GetDlgItem(IDC_RADIO1)->SetWindowText("Kobe Bryant");
		GetDlgItem(IDC_RADIO2)->SetWindowText("Tracy McGrady");
		GetDlgItem(IDC_RADIO3)->SetWindowText("Shaquille O'Neal");
		GetDlgItem(IDC_RADIO4)->SetWindowText("Kevin Garnett");
		test++;
		UpdateData(false);
	}
	if (test == 3) {
		File.WriteString("Вопрос 3: ");
		if (q == 1) {
			File.WriteString("правильно.");
		}
		else
			File.WriteString("не правильно.");
		m_question = "Лучший данкер Slam Nation?";
		SetWindowText("Программа тестирования. Вопрос 3 из 10");
		GetDlgItem(IDC_RADIO1)->SetWindowText("Кадур Зиани");
		GetDlgItem(IDC_RADIO2)->SetWindowText("Абдул Бамба");
		GetDlgItem(IDC_RADIO3)->SetWindowText("Саламон Сэми");
		GetDlgItem(IDC_RADIO4)->SetWindowText("Стиви Лоубел");
		test++;
		UpdateData(false);
	}
	File.Close();
}

void CTestDualityProblem_2::OnButtonExit() 
{
	int status = MessageBox( "Вы хотите выйти?", "ВЫХОД", MB_OKCANCEL | MB_ICONQUESTION );
	if (status == IDOK) exit(0);	
}

void CTestDualityProblem_2::OnRadio1() 
{
	q = 1;
}

void CTestDualityProblem_2::OnRadio2() 
{
	q = 2;	
}

void CTestDualityProblem_2::OnRadio3() 
{
	q = 3;	
}

void CTestDualityProblem_2::OnRadio4() 
{
	q = 4;	
}
Что и где надо изменить?