Нужно создаться тест. Вопрос и 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;
}
Что и где надо изменить?