📄 tikudlg.cpp
字号:
// TIKUDlg.cpp : implementation file
//
#include "stdafx.h"
#include "TIKU.h"
#include "TIKUDlg.h"
#include "DataModel.h"
#include "WordOffice.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTIKUDlg dialog
CTIKUDlg::CTIKUDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTIKUDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTIKUDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CTIKUDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTIKUDlg)
DDX_Control(pDX, IDC_BUTTON9, btnDeleteShiJuan);
DDX_Control(pDX, IDC_COMBO5, cbShiJuan);
DDX_Control(pDX, IDC_COMBO3, cbXueQi);
DDX_Control(pDX, IDC_EDIT9, txtFenZhi);
DDX_Control(pDX, IDC_EDIT8, txtNanDu);
DDX_Control(pDX, IDC_EDIT7, txtZhiShiDian);
DDX_Control(pDX, IDC_EDIT6, txtTiXing);
DDX_Control(pDX, IDC_EDIT5, txtZhangJie);
DDX_Control(pDX, IDC_EDIT4, txtKeMu);
DDX_Control(pDX, IDC_EDIT11, txtDaAn);
DDX_Control(pDX, IDC_EDIT10, txtShiTi);
DDX_Control(pDX, IDC_BUTTON6, btnMake);
DDX_Control(pDX, IDC_BUTTON7, btnPreviewQ);
DDX_Control(pDX, IDC_BUTTON8, btnPreviewA);
DDX_Control(pDX, IDC_BUTTON4, btnDown);
DDX_Control(pDX, IDC_BUTTON3, btnUp);
DDX_Control(pDX, IDC_COMBO4, cbYongTu);
DDX_Control(pDX, IDC_EDIT3, txtRem);
DDX_Control(pDX, IDC_EDIT2, txtTitle);
DDX_Control(pDX, IDC_EDIT1, txtName);
DDX_Control(pDX, IDC_BUTTON2, btnDelete);
DDX_Control(pDX, IDC_BUTTON1, btnAdd);
DDX_Control(pDX, IDC_TREE1, treeCtrl);
DDX_Control(pDX, IDC_LIST1, listCtrl);
DDX_Control(pDX, IDC_COMBO1, cbKeMu);
DDX_Control(pDX, IDC_COMBO2, cbTiXing);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTIKUDlg, CDialog)
//{{AFX_MSG_MAP(CTIKUDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangecbKeMu)
ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangecbTiXing)
ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickListCtrl)
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST1, OnKeydownListCtrl)
ON_BN_CLICKED(IDC_BUTTON1, OnbtnAdd)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnSelchangedTreeCtrl)
ON_BN_CLICKED(IDC_BUTTON2, OnbtnDelete)
ON_NOTIFY(NM_CLICK, IDC_TREE1, OnClickTreeCtrl)
ON_BN_CLICKED(IDC_BUTTON3, OnbtnUp)
ON_BN_CLICKED(IDC_BUTTON4, OnbtnDown)
ON_BN_CLICKED(IDC_BUTTON6, OnbtnMake)
ON_BN_CLICKED(IDC_BUTTON7, OnPreviewQ)
ON_BN_CLICKED(IDC_BUTTON8, OnPreviewA)
ON_CBN_SELCHANGE(IDC_COMBO5, OnSelchangecbShiJuan)
ON_BN_CLICKED(IDC_BUTTON9, OnbtnDeleteShiJuan)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTIKUDlg message handlers
BOOL CTIKUDlg::OnInitDialog()
{
CDialog::OnInitDialog();
AfxEnableControlContainer();
AfxOleInit();
m_ShiJuanID="0";
btnDeleteShiJuan.EnableWindow(false);
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
//MessageBox("连接成功!");
txtName.SetWindowText("XXX考试");
txtTitle.SetWindowText("系别__________ 班级__________ 姓名__________ 学号__________ 科目__________");
cbXueQi.SetCurSel(0);
cbYongTu.SetCurSel(0);
txtRem.SetWindowText("山东科技大学内部使用");
//填充考试科目
DM->FillComboBox(&cbKeMu,"select name from subject order by id");
DM->FillComboBox(&cbTiXing,"select name from tixing order by id");
DM->FillComboBox(&cbShiJuan,"select name from PaperMaster order by id","新试卷");
cbShiJuan.SetCurSel(0);
//初始化试题列表
DWORD dwStyle = listCtrl.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
listCtrl.SetExtendedStyle(dwStyle); //设置扩展风格
listCtrl.InsertColumn(0,"试题编号",LVCFMT_LEFT,60);
listCtrl.InsertColumn(1,"考试科目",LVCFMT_LEFT,60);
listCtrl.InsertColumn(2,"章节",LVCFMT_LEFT,100);
listCtrl.InsertColumn(3,"题型",LVCFMT_LEFT,60);
listCtrl.InsertColumn(4,"难度",LVCFMT_LEFT,60);
listCtrl.InsertColumn(5,"题目",LVCFMT_LEFT,100);
listCtrl.InsertColumn(6,"答案",LVCFMT_LEFT,100);
listCtrl.InsertColumn(7,"分数",LVCFMT_LEFT,60);
//DM->FillListCtrl(&listCtrl,"select id,isnull(kemu,'') as kemu,isnull(zhangjie,'') as zhangjie,isnull(tixing,'') as tixing,isnull(timu,'') as timu,isnull(daan,'') as daan,isnull(nandu,'') as nandu,isnull(score,0) as score from tiku order by id");
CTIKUDlg::InitTree();
cbKeMu.SetCurSel(0); // 选择科目的第一项
cbTiXing.SetCurSel(0); // 选择题型的第一项
CTIKUDlg::OnSelchangecbTiXing(); // 调用此事件,用以在列表中显示符合条件的试题
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CTIKUDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CTIKUDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CTIKUDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CTIKUDlg::OnSelchangecbKeMu()
{
CTIKUDlg::FillListCtrl(); // 科目选项改变是重新填充列表
}
void CTIKUDlg::OnSelchangecbTiXing()
{
CTIKUDlg::FillListCtrl(); // 题型选项改变是重新填充列表
CTIKUDlg::ReSetCurTreeItem();
//treeCtrl.SetFocus();
}
void CTIKUDlg::FillListCtrl()
{
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
//MessageBox("连接成功!");
CString tablename;
CString s1="";
CString s2="";
cbKeMu.GetWindowText(s1);
cbTiXing.GetWindowText(s2);
tablename=DM->GetReturnString("select cast(tablename as nvarchar(100)) from tixing where cast([name] as nvarchar(100))='"+s2+"'");
CString query="select id,isnull(cast(subject as nvarchar(100)),'') as subject,isnull(cast(chapter as nvarchar(100)),'') as chapter,'"+s2+"' as tixing,isnull(cast([level] as nvarchar(100)) ,'') as [level],isnull(cast(content as nvarchar(2000)),'') as content,isnull(cast(answer as nvarchar(2000)),'') as answer,isnull(score,0) as score from "+tablename+" where subject ='"+s1+"' order by id";
if(tablename=="choose")
{
query="select id,isnull(cast(subject as nvarchar(100)),'') as subject,isnull(cast(chapter as nvarchar(100)),'') as chapter,'"+s2+"' as tixing,isnull(cast([level] as nvarchar(100)) ,'') as [level],(isnull(cast(content as nvarchar(2000)),'')+'\n\r [ A ] '+isnull(cast(option1 as nvarchar(500)),'')+'\n\r [ B ] '+isnull(cast(option2 as nvarchar(500)),'')+'\n\r [ C ] '+isnull(cast(option3 as nvarchar(500)),'')+'\n\r [ D ] '+isnull(cast(option4 as nvarchar(500)),'')) as content,isnull(cast(answer as nvarchar(2000)),'') as answer,isnull(score,0) as score from "+tablename+" where subject ='"+s1+"' order by id";
}
DM->FillListCtrl(&listCtrl,query);
m_Index=-1;
DM->CloseConnection();
}
else
{
MessageBox("连接出错!");
}
}
// 此函数用于当试题列表的索引改变是刷新试题信息
void CTIKUDlg::ListItemChanged()
{
if(m_Index>-1 && m_Index<listCtrl.GetItemCount())
{
char* s=new char[2000];
txtKeMu.SetWindowText(listCtrl.GetItemText(m_Index,1));
txtZhangJie.SetWindowText(listCtrl.GetItemText(m_Index,2));
txtTiXing.SetWindowText(listCtrl.GetItemText(m_Index,3));
txtNanDu.SetWindowText(listCtrl.GetItemText(m_Index,4));
listCtrl.GetItemText(m_Index,5,s,2000);
txtShiTi.SetWindowText(s);
listCtrl.GetItemText(m_Index,6,s,2000);
txtDaAn.SetWindowText(s);
txtFenZhi.SetWindowText(listCtrl.GetItemText(m_Index,7));
}
}
// 控制试题列表的单击事件,用于改变试题列表的索引m_Index
void CTIKUDlg::OnClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int nItem = -1;
LPNMITEMACTIVATE lpNMItemActivate = (LPNMITEMACTIVATE)pNMHDR;
if(lpNMItemActivate != NULL)
{
nItem = lpNMItemActivate->iItem;
if(nItem!=m_Index)
{
m_Index=nItem;
CTIKUDlg::ListItemChanged();
}
}
*pResult = 0;
}
// 控制键盘的向上和向下的键,用于改变试题列表的索引m_Index
void CTIKUDlg::OnKeydownListCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
if(pLVKeyDow->wVKey==VK_UP)
{
if(m_Index>0)
{
m_Index-=1;
CTIKUDlg::ListItemChanged();
}
}
else if(pLVKeyDow->wVKey==VK_DOWN)
{
if(m_Index<listCtrl.GetItemCount()-1)
{
m_Index+=1;
CTIKUDlg::ListItemChanged();
}
}
*pResult = 0;
}
void CTIKUDlg::OnOK()
{
}
void CTIKUDlg::OnCancel()
{
CDialog::OnCancel();
}
void CTIKUDlg::OnbtnAdd()
{
// 判断索引是否超出范围
if(m_Index>-1 && m_Index<listCtrl.GetItemCount())
{
bool flag=false;
HTREEITEM hParent=m_curTreeItem; // 获得当前的题型节点
if(treeCtrl.ItemHasChildren(hParent)) // 是否存在子节点
{
HTREEITEM hItem=treeCtrl.GetChildItem(hParent); // 获取第一个子节点
do
{
if(treeCtrl.GetItemText(hItem)==listCtrl.GetItemText(m_Index,0)) // 判断所选的试题是否存在
{
flag=true;
MessageBox("您选择的试题已经存在!");
break;
}
}while(hItem=treeCtrl.GetNextSiblingItem(hItem)); // 是否存在下一个兄弟节点
}
if(!flag)
{
treeCtrl.InsertItem(listCtrl.GetItemText(m_Index,0),m_curTreeItem);
}
}
else
{
MessageBox("请选择试题!");
}
}
void CTIKUDlg::OnbtnDelete()
{
// TODO: Add your control notification handler code here
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetSelectedItem(); // 获得当前选择的节点
// 以下代码判断当前选择的节点是否试题节点,否则不能删除
if(hItem!=hParent) // 判断当前选择的节点是否根节点
{
if(treeCtrl.GetParentItem(hItem)!=hParent) // 判断当前选择的节点是否题型节点(根据其父节点是否根结点来判断)
{
treeCtrl.DeleteItem(hItem);
}
}
}
void CTIKUDlg::OnSelchangedTreeCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hParent=treeCtrl.GetRootItem(); // 获得根节点
HTREEITEM hItem=treeCtrl.GetSelectedItem(); // 获得当前选择的节点
if(!hItem)
{
return;
}
// 以下代码判断当前选择的节点是否试题节点,否则不刷新试题信息
if(hItem!=hParent) // 判断当前选择的节点是否根节点
{
if(treeCtrl.GetParentItem(hItem)!=hParent) // 判断当前选择的节点是否题型节点(根据其父节点是否根结点来判断)
{
DataModel *DM=new DataModel();
if(DM->OpenConnection())
{
//MessageBox("连接成功!");
CString s1="";
cbKeMu.GetWindowText(s1);
CString s2=treeCtrl.GetItemText(treeCtrl.GetParentItem(hItem));
CString tablename=DM->GetReturnString("select cast(tablename as nvarchar(100)) from tixing where cast([name] as nvarchar(100))='"+s2+"'");
CString query="select id,isnull(cast(subject as nvarchar(100)),'') as subject,isnull(cast(chapter as nvarchar(100)),'') as chapter,'"+s2+"' as tixing,isnull(cast([level] as nvarchar(100)) ,'') as [level],isnull(cast(content as nvarchar(2000)),'') as content,isnull(cast(answer as nvarchar(2000)),'') as answer,isnull(score,0) as score from "+tablename+" where id='"+treeCtrl.GetItemText(hItem)+"' order by id";
if(tablename=="choose")
{
query="select id,isnull(cast(subject as nvarchar(100)),'') as subject,isnull(cast(chapter as nvarchar(100)),'') as chapter,'"+s2+"' as tixing,isnull(cast([level] as nvarchar(100)) ,'') as [level],(isnull(cast(content as nvarchar(2000)),'')+'\n\r [ A ] '+isnull(cast(option1 as nvarchar(500)),'')+'\n\r [ B ] '+isnull(cast(option2 as nvarchar(500)),'')+'\n\r [ C ] '+isnull(cast(option3 as nvarchar(500)),'')+'\n\r [ D ] '+isnull(cast(option4 as nvarchar(500)),'')) as content,isnull(cast(answer as nvarchar(2000)),'') as answer,isnull(score,0) as score from "+tablename+" where id='"+treeCtrl.GetItemText(hItem)+"' order by id";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -