{/'title/':/'MFC 题库软件实现:滚动显示十个题目,每个题目包含文本和四个单选答案/', /'description/':/'使用 MFC 框架实现一个简单的题库软件,界面可以滚动显示十个题目。每个题目包含一个题目文本和四个单选答案。通过滚动条可以上下滑动查看不同题目。/', /'keywords/':/'MFC, 题库软件, 滚动显示, 题目, 答案, 单选, 容器, 界面, 代码, 示例/', /'content/':/'以下是一个简单的示例代码,实现了题库软件的功能。代码使用 MFC 框架,包括一个主界面类 CMainFrame 和一个题目容器类 CQuestionContainer。//n//nCMainFrame.h://n//n```cpp//n#pragma once//n//n#include ///'QuestionContainer.h///'//n//nclass CMainFrame : public CFrameWnd//n{//npublic://n CMainFrame();//n//nprotected://n CQuestionContainer m_questionContainer;//n//n afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);//n DECLARE_MESSAGE_MAP()//n};//n//nCMainFrame.cpp://n//n#include ///'CMainFrame.h///'//n//nCMainFrame::CMainFrame()//n{//n}//n//nBEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)//n ON_WM_CREATE()//nEND_MESSAGE_MAP()//n//nint CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)//n{//n if (CFrameWnd::OnCreate(lpCreateStruct) == -1)//n return -1;//n//n // 创建题目容器//n m_questionContainer.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL, CRect(0, 0, 800, 600), this, 1);//n//n // 添加10个题目//n for (int i = 0; i < 10; i++)//n {//n CString questionText = ///'Question ///' + std::to_string(i + 1);//n CString answer1 = ///'Answer 1///';//n CString answer2 = ///'Answer 2///';//n CString answer3 = ///'Answer 3///';//n CString answer4 = ///'Answer 4///';//n//n m_questionContainer.AddQuestion(questionText, answer1, answer2, answer3, answer4);//n }//n//n return 0;//n}//n//nQuestionContainer.h://n//n#pragma once//n//nclass CQuestionContainer : public CWnd//n{//npublic://n CQuestionContainer();//n//n void AddQuestion(const CString& questionText, const CString& answer1, const CString& answer2, const CString& answer3, const CString& answer4);//n//nprotected://n std::vector<CStatic*> m_questionTexts;//n std::vector<CButton*> m_answers;//n//n int m_currentTop; // 当前显示的题目顶部的索引//n//n afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);//n afx_msg void OnPaint();//n DECLARE_MESSAGE_MAP()//n};//n//nQuestionContainer.cpp://n//n#include ///'QuestionContainer.h///'//n//nCQuestionContainer::CQuestionContainer()//n{//n m_currentTop = 0;//n}//n//nBEGIN_MESSAGE_MAP(CQuestionContainer, CWnd)//n ON_WM_VSCROLL()//n ON_WM_PAINT()//nEND_MESSAGE_MAP()//n//nvoid CQuestionContainer::AddQuestion(const CString& questionText, const CString& answer1, const CString& answer2, const CString& answer3, const CString& answer4)//n{//n // 创建题目文本控件//n CStatic* pQuestionText = new CStatic();//n pQuestionText->Create(questionText, WS_CHILD | WS_VISIBLE | SS_CENTER, CRect(10, 10 + m_questionTexts.size() * 120, 780, 50 + m_questionTexts.size() * 120), this, 2);//n m_questionTexts.push_back(pQuestionText);//n//n // 创建答案按钮//n CButton* pAnswer1 = new CButton();//n pAnswer1->Create(answer1, WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect(20, 60 + m_questionTexts.size() * 120, 770, 90 + m_questionTexts.size() * 120), this, 3);//n m_answers.push_back(pAnswer1);//n//n CButton* pAnswer2 = new CButton();//n pAnswer2->Create(answer2, WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect(20, 100 + m_questionTexts.size() * 120, 770, 130 + m_questionTexts.size() * 120), this, 4);//n m_answers.push_back(pAnswer2);//n//n CButton* pAnswer3 = new CButton();//n pAnswer3->Create(answer3, WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect(20, 140 + m_questionTexts.size() * 120, 770, 170 + m_questionTexts.size() * 120), this, 5);//n m_answers.push_back(pAnswer3);//n//n CButton* pAnswer4 = new CButton();//n pAnswer4->Create(answer4, WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON, CRect(20, 180 + m_questionTexts.size() * 120, 770, 210 + m_questionTexts.size() * 120), this, 6);//n m_answers.push_back(pAnswer4);//n}//n//nvoid CQuestionContainer::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)//n{//n CRect rect;//n GetClientRect(&rect);//n//n int scrollAmount = 0;//n int maxScrollAmount = (m_questionTexts.size() * 120) - rect.Height();//n//n switch (nSBCode)//n {//n case SB_TOP://n scrollAmount = -m_currentTop;//n break;//n case SB_BOTTOM://n scrollAmount = maxScrollAmount - m_currentTop;//n break;//n case SB_LINEUP://n scrollAmount = -120;//n break;//n case SB_LINEDOWN://n scrollAmount = 120;//n break;//n case SB_PAGEUP://n scrollAmount = -rect.Height();//n break;//n case SB_PAGEDOWN://n scrollAmount = rect.Height();//n break;//n case SB_THUMBTRACK://n scrollAmount = nPos - m_currentTop;//n break;//n }//n//n if (scrollAmount < -m_currentTop)//n scrollAmount = -m_currentTop;//n else if (scrollAmount > maxScrollAmount - m_currentTop)//n scrollAmount = maxScrollAmount - m_currentTop;//n//n if (scrollAmount != 0)//n {//n m_currentTop += scrollAmount;//n//n ScrollWindow(0, -scrollAmount);//n//n CScrollBar* pVertScrollBar = GetScrollBarCtrl(SB_VERT);//n if (pVertScrollBar != NULL)//n pVertScrollBar->SetScrollPos(m_currentTop);//n }//n}//n//nvoid CQuestionContainer::OnPaint()//n{//n CPaintDC dc(this);//n//n for (size_t i = 0; i < m_questionTexts.size(); i++)//n {//n m_questionTexts[i]->MoveWindow(CRect(10, 10 + i * 120 - m_currentTop, 780, 50 + i * 120 - m_currentTop));//n m_answers[i * 4]->MoveWindow(CRect(20, 60 + i * 120 - m_currentTop, 770, 90 + i * 120 - m_currentTop));//n m_answers[i * 4 + 1]->MoveWindow(CRect(20, 100 + i * 120 - m_currentTop, 770, 130 + i * 120 - m_currentTop));//n m_answers[i * 4 + 2]->MoveWindow(CRect(20, 140 + i * 120 - m_currentTop, 770, 170 + i * 120 - m_currentTop));//n m_answers[i * 4 + 3]->MoveWindow(CRect(20, 180 + i * 120 - m_currentTop, 770, 210 + i * 120 - m_currentTop));//n }//n}//n//n运行上述代码,将会创建一个具有滚动功能的题库软件界面,可以显示十个题目,每个题目包含一个题目文本和四个答案单选按钮。通过滚动条可以滑动显示题目。//n//n注意:以上代码只是一个简单的示例,具体的实现可能需要根据实际需求进行修改和完善。//n/

MFC 题库软件实现:滚动显示十个题目,每个题目包含文本和四个单选答案

原文地址: https://www.cveoy.top/t/topic/pYsP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录