📄 dlgkqinput.cpp
字号:
// DlgKqInput.cpp : implementation file
//
#include "stdafx.h"
#include "Kvip.h"
#include "DlgKqInput.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "MyMdi.H"
#include "StringSQL.H"
#include "DlgKqCopyto.H"
//#include "XCtrl\MemDC.H"
/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput
IMPLEMENT_DYNCREATE(CDlgKqInput, CFormView)
CDlgKqInput::CDlgKqInput()
: CFormView(CDlgKqInput::IDD)
{
//{{AFX_DATA_INIT(CDlgKqInput)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pConnection = NULL;
m_pApp = NULL;
}
CDlgKqInput::~CDlgKqInput()
{
// if(m_pConnection) delete m_pConnection;
}
void CDlgKqInput::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgKqInput)
DDX_Control(pDX, IDC_SAVE, m_btSave);
DDX_Control(pDX, IDC_COPYTO, m_btCopyto);
DDX_Control(pDX, IDC_APPEND, m_btAppend);
DDX_Control(pDX, IDC_RETRIEVE, m_btRetrieve);
DDX_Control(pDX, IDC_ED_PROJECT, m_edProject);
DDX_Control(pDX, IDC_PROJECT, m_Project);
DDX_Control(pDX, IDC_DEP, m_Dep);
DDX_Control(pDX, IDC_LEFT, m_Left);
DDX_Control(pDX, IDC_MASTER, m_Master);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgKqInput, CFormView)
//{{AFX_MSG_MAP(CDlgKqInput)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_APPEND, OnAppend)
ON_BN_CLICKED(IDC_RETRIEVE, OnRetrieve)
ON_BN_CLICKED(IDC_COPYTO, OnCopyto)
ON_CBN_SELCHANGE(IDC_DEP, OnSelchangeDep)
ON_NOTIFY(NM_CLICK, IDC_MASTER, OnClickMaster)
ON_WM_CLOSE()
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LEFT, OnItemchangedLeft)
ON_BN_CLICKED(IDCANCEL, OnCancel)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput diagnostics
#ifdef _DEBUG
void CDlgKqInput::AssertValid() const
{
CFormView::AssertValid();
}
void CDlgKqInput::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDlgKqInput message handlers
void CDlgKqInput::OnSave(WPARAM nExit)
{
// TODO: Add your control notification handler code here
if (m_MasterDoc.IsModify())
{//数据已修改
if(nExit == 1 || MessageBox("注意:是否保存数据???", "系统提示", MB_OKCANCEL|MB_ICONEXCLAMATION) == IDOK)
{
m_MasterDoc.Save();
return ;
}
}
}
void CDlgKqInput::OnAppend()
{
// TODO: Add your control notification handler code here
CString sProject = _T(""), sText, sName;
CString sSQL;
long nCount = 0;
//输入效对
m_edProject.GetWindowText(sProject);
if(_IsValidInput(sProject)==false) return;
//计划是否存在
sSQL = _T("Select Count(*) From kv_kq_Input Where ");
sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
if(m_RecordSet.Open(sSQL))
m_RecordSet.GetCollect((long)0, nCount);
if(nCount != 0)
{
MessageBox("提示:" + sProject + "计划已存在,不能重复创建!", "系统提示",
MB_OK|MB_ICONSTOP);
return ;
}
//读入所有用户,创建计划
m_pConnection->BeginTrans();
sSQL = _T("Select sm_code, sm_name From kv_staff_mr");
if(!m_RecordSet.Open(sSQL)) goto err01;
while(m_RecordSet.IsEOF() == false)
{
m_RecordSet.GetCollect("sm_code", sText);
m_RecordSet.GetCollect("sm_name", sName);
//sText = sProject + sText;
sSQL = _T("Insert Into kv_kq_Input (kq_id, kq_code,kq_name) Values ('");
sSQL = sSQL + sProject+sText + _T("','");
sSQL = sSQL + sText + _T("'");
sSQL = sSQL + _T(",'") + sName + _T("')");
if(!m_Command.SetCommandText(sSQL)) goto err01;
if(m_Command.Execute(adCmdText) == NULL) goto err01;
m_RecordSet.MoveNext();
}
m_pConnection->CommitTrans();
//AfxMessageBox("OK");
//SetState(1);
PostMessage(WM_COMMAND, IDC_RETRIEVE);
return ;
err01:
m_pConnection->RollbackTrans();
MessageBox("提示:创建" + sProject + "计划失败!", "系统提示",
MB_OK|MB_ICONSTOP);
return ;
}
void CDlgKqInput::OnRetrieve()
{
// TODO: Add your control notification handler code here
CString sProject = _T(""), sText;
CString sSQL;
long nCount = 0;
COleDateTime tNow;
CDlgDataCell Cell;
m_btRetrieve.GetWindowText(sText);
if(sText == _T("(&R)检索"))
{
//输入效对
m_edProject.GetWindowText(sProject);
if(_IsValidInput(sProject)==false) return;
//设置画面
// m_Master.SetDateMode(sProject);
sSQL = _T("Select * From kv_kq_Input Where ");
sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
if(m_MasterDoc.Retrieve(sSQL) != 0) return ;
SetState(1);
}
else
{
OnSave(0);
SetState(0);
}//end if
}
void CDlgKqInput::OnCopyto()
{
// TODO: Add your control notification handler code here
CDlgKqCopyTo dlg;
CString sCode;
int nItem = m_Master.GetSelected();
if(nItem < 0 )return ;
dlg.SetParent(this);
dlg.DoModal();
}
void CDlgKqInput::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
//1登记
CMyMdi Mdi;
Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);
m_pApp = (CKvipApp *)AfxGetApp();
m_pConnection = m_pApp->m_pConWrite;
// m_pConnection = m_pApp->CreaterAdoConnection();
if(m_pConnection == NULL)
{
GetParent()->PostMessage(WM_CLOSE);
return ;
}
m_RecordSet.SetAdoConnection(m_pConnection);
// TODO: Add your specialized code here and/or call the base class
//2装入部门
CString sSQL, sText;
sSQL = _T("Select sm_Dept From kv_staff_mr group by sm_dept");
if(m_RecordSet.Open(sSQL))
{
while(m_RecordSet.IsEOF() == false)
{
m_RecordSet.GetCollect("sm_dept", sText);
m_Dep.AddString(sText);
m_RecordSet.MoveNext();
}
}
m_Dep.InsertString(0,"所有部门");
m_Dep.SetCurSel(0);
//3装入计划
long lTxColor, lBkColor;
sSQL = _T("Select * From kv_kq_project Where kp_no = 1");
if(m_RecordSet.Open(sSQL))
{
while(m_RecordSet.IsEOF() == false)
{
m_RecordSet.GetCollect("kp_code", sText);
m_RecordSet.GetCollect("kp_tx_Color", lTxColor);
m_RecordSet.GetCollect("kp_bk_color", lBkColor);
m_Project.AddStringEx(sText, lTxColor, lBkColor);
m_Master.Add(sText, lTxColor, lBkColor);
m_RecordSet.MoveNext();
}
}
m_Project.SetCurSel(0);
//4初始化员工列表
CDlgDataCell Cell;
m_ListDoc.SetConnection(m_pConnection);
m_ListDoc.Construe(&Cell, _T("=sm_Code;TEXT=编号;INDEXCOL=0;WIDTH=0"));
m_ListDoc.m_data.push_back(Cell);
m_ListDoc.Construe(&Cell, _T("=sm_Name;TEXT=名称;INDEXCOL=1;WIDTH=60"));
m_ListDoc.m_data.push_back(Cell);
m_ListDoc.Construe(&Cell, _T("=sm_Dept;TEXT=部门;INDEXCOL=2;WIDTH=60"));
m_ListDoc.m_data.push_back(Cell);
m_ListDoc.SetListCtrl(&m_Left);
m_ListDoc.InitList();
m_ListDoc.Retrieve("Select sm_code, sm_name, sm_dept From kv_staff_mr", false);
//OnSelchangeDep();
m_edProject.SetMaxCharacters(6);
//装入主表
m_Command.SetConnection(m_pConnection);
//初始化员工列表
m_MasterDoc.SetConnection(m_pConnection);
m_MasterDoc.Construe(&Cell, _T("=kq_id;TEXT=ID;INDEXCOL=32;WIDTH=0;SETKEY=ID"));
m_MasterDoc.m_data.push_back(Cell);
m_MasterDoc.Construe(&Cell, _T("=kq_code;TEXT=编号;INDEXCOL=33;WIDTH=0"));
m_MasterDoc.m_data.push_back(Cell);
m_MasterDoc.Construe(&Cell, _T("=kq_Name;TEXT=名称;INDEXCOL=0;WIDTH=80;STYLE=RIGHT"));
m_MasterDoc.m_data.push_back(Cell);
for(int i=1; i <= 31; i++)
{
sText.Format("=kq_d%d;TEXT=%02d;INDEXCOL=%d;WIDTH=25;STYLE=CENTER",i,i,i);
m_MasterDoc.Construe(&Cell,(LPSTR)(LPCSTR)sText);
m_MasterDoc.m_data.push_back(Cell);
}
m_MasterDoc.SetListCtrl(&m_Master);
m_MasterDoc.InitList();
}
void CDlgKqInput::OnSelchangeDep()
{
// TODO: Add your control notification handler code here
CString sSQL;
CString sText, sProject;
//选择部门
sSQL = _T("Select * From kv_staff_mr");
int nSel = m_Dep.GetCurSel();
if(nSel > 0)
{
m_Dep.GetWindowText(sText);
if (sText != _T(""))
sSQL = sSQL + _T(" Where sm_dept = '") + sText + _T("'");
}
if(m_ListDoc.Retrieve(sSQL) < 0)return;
return;
/*
//选择部门员工
m_edProject.GetWindowText(sProject);
if(sProject == _T("")) return ; //first
sSQL = _T("Select * From kv_kq_Input, kv_staff_mr Where ");
sSQL = sSQL + _T("kq_id Like '") + sProject + _T("%%'");
sSQL = sSQL + _T(" AND sm_code = kq_code");
if(sText != _T(""))
sSQL = sSQL + _T(" AND sm_dept = '") + sText + _T("'");
m_MasterDoc.Retrieve(sSQL);
return ;
//选择部门
CAdoRecordSet *pRecordSet;
m_edProject.GetWindowText(sProject);
if(sProject == _T("")) return ; //first
int nSel = m_Dep.GetCurSel();
if(nSel < 0) return ;
pRecordSet = m_ListDoc.GetRecordSet();
//过滤
m_Dep.GetWindowText(sText);
if(nSel == 0 || sText == _T(""))
sSQL = _T("'Y' = 'Y'");
else
sSQL.Format("sm_dept = '%s'", sText);
pRecordSet->MoveFirst();
if(pRecordSet->Find(sSQL) < 0)return;
//显示内容
m_Left.SetRedraw(false);
m_Left.DeleteAllItems();
while(pRecordSet->IsEOF()==false)
{
m_ListDoc.Db2List(pRecordSet);
pRecordSet->MoveNext();
}
m_Left.SetRedraw(true);
//选择部门员工
pRecordSet = m_MasterDoc.GetRecordSet();
sSQL.Format("kq_id = '%s%%' AND sm_dept = '%s'",
sProject, sText);
if(pRecordSet->Find(sSQL) < 0)return;
//显示内容
m_Master.SetRedraw(false);
m_Master.DeleteAllItems();
while(pRecordSet->IsEOF()==false)
{
m_MasterDoc.Db2List(pRecordSet);
pRecordSet->MoveNext();
}
m_Master.SetRedraw(true);
*/
}
void CDlgKqInput::OnCancel()
{
// TODO: Add your control notification handler code here
GetParent()->PostMessage(WM_CLOSE);
}
//输入效对
BOOL CDlgKqInput::_IsValidInput(CString sText)
{
COleDateTime tDate;
if(sText.GetLength() != 6) goto err01;
sText = sText.Left(4) + _T("-") + sText.Right(2) + _T("-01");
tDate = COleDateTime(COleVariant(sText));
if (tDate.GetStatus() != COleDateTime::valid) goto err01;
return true;
err01:
MessageBox("提示:输入格式错误(YYYYMM) !", "系统提示",
MB_OK|MB_ICONSTOP);
return false;
}
void CDlgKqInput::SetState(int nState)
{
switch(nState)
{
case 0:m_btRetrieve.SetWindowText(_T("(&R)检索"));
m_btAppend.EnableWindow(true);
//m_btRetrieve.EnableWindow(true);
m_btCopyto.EnableWindow(false);
m_btSave.EnableWindow(false);
m_edProject.EnableWindow(true);
m_edProject.SetWindowText(_T(""));
m_Dep.EnableWindow(false);
//m_Project.EnableWindow(false);
m_Master.SetRedraw(false);
m_Master.DeleteAllItems();
m_Master.SetRedraw(true);
m_edProject.SetFocus();
break;
case 1:
m_btRetrieve.SetWindowText(_T("(&R)清除"));
m_btAppend.EnableWindow(false);
//m_btRetrieve.EnableWindow(false);
m_btCopyto.EnableWindow(true);
m_btSave.EnableWindow(true);
m_edProject.EnableWindow(false);
m_Dep.EnableWindow(true);
//m_Project.EnableWindow(true);
break;
}
}
void CDlgKqInput::OnClickMaster(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
const int nColumn = pNMListView->iSubItem;
//const int nItem = pNMListView->iItem;
int nItem = m_MasterDoc._GetSelected();
CString sText;
COLORREF crColor, crTxColor;
if (nColumn > 0 && nItem >= 0)
{
m_MasterDoc.SetModify(nItem, LD_EDIT);
sText = m_Project.GetItemText();
m_Project.GetColor(crColor, crTxColor);
//m_Master.SetItemTextEx(nItem, nColumn, sText, crTxColor, crColor);
m_Master.SetItemText(nItem, nColumn, sText);
}
*pResult = 0;
}
void CDlgKqInput::OnClose()
{
// TODO: Add your message handler code here and/or call default
int nRet = IDNO;
//提示
if(m_MasterDoc.IsModify())
nRet= MessageBox("注意:你确定要关闭窗口吗???", "系统提示", MB_YESNOCANCEL|MB_ICONQUESTION);
if(nRet == IDYES)
{//保存
OnSave(1);
return ;
}
else if(nRet == IDCANCEL)
{//取消退出
CMyMdi::m_bExitCode = false;
return ;
}
CFormView::OnClose();
}
void CDlgKqInput::SelectProject()
{
int nSel = m_Project.GetCurSel();
if (nSel == m_Project.GetCount() -1)
nSel = 0;
else
nSel++;
m_Project.SetCurSel(nSel);
}
BOOL CDlgKqInput::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN &&
(int)pMsg->wParam == VK_F4)
SelectProject();
return CFormView::PreTranslateMessage(pMsg);
}
void CDlgKqInput::OnItemchangedLeft(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
const int nItem = pNMListView->iItem;
int nSubItem;
CString sCode, sSQL, sPro, sName;
if (pNMListView->uNewState == 3 && nItem >= 0)
{
//m_Master.SetItemState(m_Master.GetSelected(), 0, LVIS_SELECTED);
//合成主键
m_edProject.GetWindowText(sPro);
sCode = m_Left.GetItemTextEx(nItem, "编号");
sName = m_Left.GetItemTextEx(nItem, "名称");
sPro = sPro + sCode;
nSubItem = m_Master.GetSubItem("编号");
for(int i = 0; i < m_Master.GetItemCount(); i++)
{
sSQL = m_Master.GetItemText(i, nSubItem);
if(sSQL == sCode)
{//found
m_Master.MoveToTop(i);
m_Master.UnSelectItem(m_Master.GetSelected());
m_Master.SelectItem(i);
return ;
}
}//end for
//new
m_MasterDoc.New(true, sPro);
nSubItem = m_Master.GetSubItem("编号");
m_Master.SetItemText(m_Master.GetSelected(), nSubItem, sCode);
nSubItem = m_Master.GetSubItem("名称");
m_Master.SetItemText(m_Master.GetSelected(), nSubItem, sName);
return ;
}
*pResult = 0;
}
void CDlgKqInput::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Do not call CFormView::OnPaint() for painting messages
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -