📄 listdhdj.cpp
字号:
// ListDHDJ.cpp: implementation of the CListDHDJ class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "a1.h"
#include "ListDHDJ.h"
#include "myfunction.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CListDHDJ::CListDHDJ()
{
m_pstrlistKc=new CStringList[4];
for(int i=0;i<100;i++)
{
m_iTheItemState[i]=0;
m_iKc1Selected[i]=-1;
m_iKc2Selected[i]=-1;
}
this->InitValuesFromDB();
}
CListDHDJ::~CListDHDJ()
{
delete [] m_pstrlistKc;
}
void CListDHDJ::OnNewEditChange(const int& item,const int& sub_item)
{
TRACE("void CListXSDJ::OnNewEditChange()\n");
if(this->m_bSetValue) return ;
ASSERT(this->m_poplist!=NULL);
CString str;
m_edit.GetWindowText(str);
CString str_sl=this->GetItemText(item,4);
switch(sub_item)
{
case 0:
{
str.MakeUpper();
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
this->m_iTheItemState[item]=NOCK;
int sl=0;
sl=atoi(str_sl);
if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
this->CancelTheItem(item);
this->m_poplist->RefreshListCtrlView(0,str);
this->m_iKc1Selected[item]=-1;
this->m_iKc2Selected[item]=-1;
break;
}
case 1:
{
CString id=this->GetItemText(item,0);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
this->m_iTheItemState[item]=NOID;
int sl=0;
sl=atoi(str_sl);
if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
this->CancelTheItem(item);
this->m_poplist->RefreshListCtrlView(1,str,id,0);
this->m_iKc1Selected[item]=-1;
this->m_iKc2Selected[item]=-1;
break;
}
case 2:
{
str.MakeUpper();
CString id=this->GetItemText(item,0);
CString ck_name2=this->GetItemText(item,3);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
this->m_iTheItemState[item]=NONAME;
int sl=0;
sl=atoi(str_sl);
if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
this->CancelTheItem(item);
this->m_poplist->RefreshListCtrlView(0,id,2,ck_name2,2,str);
this->m_iKc1Selected[item]=-1;
this->m_iKc2Selected[item]=-1;
break;
}
case 3:
{
str.MakeUpper();
CString id=this->GetItemText(item,0);
CString ck_name1=this->GetItemText(item,2);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
this->m_iTheItemState[item]=NONAME;
int sl=0;
sl=atoi(str_sl);
if(sl&&str!=this->m_sSetFocus&&m_iKc1Selected[item]>=0&&m_iKc2Selected[item]>=0)
this->CancelTheItem(item);
this->m_poplist->RefreshListCtrlView(0,id,2,ck_name1,2,str);
this->m_iKc1Selected[item]=-1;
this->m_iKc2Selected[item]=-1;
break;
}
case 4:
{
CString id=this->GetItemText(item,0);
CString ck_name=this->GetItemText(item,2);
CString a;
POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
a.Format("%d",m_lKc1Number-atoi(str)+this->m_edit.m_dSetFocusValue);
this->m_pstrlistKc[3].SetAt(pos,a);
pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
a.Format("%d",m_lKc2Number+atoi(str)-this->m_edit.m_dSetFocusValue);
this->m_pstrlistKc[3].SetAt(pos,a);
this->m_poplist->RefreshListCtrlView(0,id,2,"");
m_poplist->ShowListPop();
break;
}
}
}
void CListDHDJ::OnEditSetFocus(const int& item, const int& subitem)
{
CString str;
m_edit.m_dSetFocusValue=0;
m_edit.GetWindowText(str);
this->m_sSetFocus=str;
m_edit.GetWindowRect(&this->m_rectWindow);
str.MakeUpper();
switch(subitem)
{
case 0:
{
// CString id=this->GetItemText(item,1);
this->m_poplist->ShowWindow(SW_HIDE);
ASSERT(this->m_poplist!=NULL);
this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
this->m_poplist->RefreshListCtrlView(0,str);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
break;
}
case 1:
{
this->m_poplist->ShowWindow(SW_HIDE);
ASSERT(this->m_poplist!=NULL);
this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
CString id=this->GetItemText(item,0);
this->m_poplist->RefreshListCtrlView(1,str,id,0);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
break;
}
case 2:
{
this->m_poplist->ShowWindow(SW_HIDE);
ASSERT(this->m_poplist!=NULL);
this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
CString id=this->GetItemText(item,0);
CString ck_name2=this->GetItemText(item,3);
this->m_poplist->RefreshListCtrlView(0,id,2,ck_name2,2,str);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
break;
}
case 3:
{
this->m_poplist->ShowWindow(SW_HIDE);
ASSERT(this->m_poplist!=NULL);
this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
CString id=this->GetItemText(item,0);
CString ck_name1=this->GetItemText(item,2);
this->m_poplist->RefreshListCtrlView(0,id,2,ck_name1,2,str);
if(!m_poplist->IsWindowVisible())
m_poplist->ShowListPop();
break;
}
case 4:
{
if(this->CheckKc(item))//&&(IsSelected(item)!=-1)
{
this->m_poplist->ShowWindow(SW_HIDE);
CString id=this->GetItemText(item,0);
CString ck_name1=this->GetItemText(item,2);
//this->m_edit.kc_number=atoi();
this->m_lKc1Number=atoi(m_pstrlistKc[3].GetAt(m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item])));
this->m_lKc2Number=atoi(m_pstrlistKc[3].GetAt(m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item])));
CString ck_name2=this->GetItemText(item,3);
if(ck_name1==ck_name2)goto wrongcase;
this->m_poplist->SetShowPosition(this->m_rectWindow,&m_edit);
this->m_poplist->RefreshListCtrlView(0,id,2,"");
m_poplist->ShowListPop();
if(str!="")
this->m_edit.m_dSetFocusValue=atoi(str);
}
else
{
this->m_iEditedIndex=-1;
m_edit.ShowWindow(SW_HIDE);
this->SetNextItemFocus();
MessageBox("请确定有此库存信息!!","注意");
}
break;
}
}
return;
wrongcase:
MessageBox("调出库不能等于调入库!","错误");
this->m_iEditedIndex=1;
m_edit.ShowWindow(SW_HIDE);
this->SetNextItemFocus();
}
bool CListDHDJ::OnEditReturn(const int& item, const int& subitem)
{
CString str;
m_edit.GetWindowText(str);
switch(subitem)
{
case 0:
case 1:
{
if(this->m_poplist->IsWindowVisible()&&this->m_poplist->GetSelectedMark()>=0)
{
this->SetValueUnChange(m_poplist->GetListCtrlSel(subitem));
this->SetItemText(m_nItem,0,this->m_poplist->GetListCtrlSel(0));
this->SetItemText(m_nItem,1,this->m_poplist->GetListCtrlSel(1));
m_iTheItemState[item]=NOWRONG;
}
else
SetValueUnChange("");
break;
}
case 2:
case 3:
{
if(this->m_poplist->IsWindowVisible()&&this->m_poplist->GetSelectedMark()>=0)
{
this->SetValueUnChange(m_poplist->GetListCtrlSel(2));
this->SetItemText(item,subitem,this->m_poplist->GetListCtrlSel(2));
m_iTheItemState[item]=NOWRONG;
}
else
SetValueUnChange("");
break;
}
case 4:
{
break;
}
}
return CBaseList::OnEditReturn(item,subitem);
}
void CListDHDJ::OnEditKillFocus(const int& item, const int& subitem)
{
TRACE("void CListXSDJ::OnEditKillFocus()\n");
CString str;
m_edit.GetWindowText(str);
switch(subitem)
{
case 2:
case 3:
{
str.MakeUpper();
this->SetValueUnChange(str);
break;
}
}
CBaseList::OnEditKillFocus(item,subitem);
}
bool CListDHDJ::InitValuesFromDB()
{
LRunSql m_runsql;
CString sql;
_variant_t value;
m_pstrlistKc[0].AddTail("药品编号");
m_pstrlistKc[1].AddTail("药品名称");
m_pstrlistKc[2].AddTail("仓库名称 ");
m_pstrlistKc[3].AddTail("库存数量");
m_strlistNo.AddTail("");
sql.Format("select tabkc.yp_id,tabkc.ck_name,tabkc.kc_number,\
tabypinfo.yp_name from tabkc,tabypinfo \
where tabkc.yp_id = tabypinfo.yp_id");
m_runsql.CheckSQLResult(sql);
while(!m_runsql.m_recordset->adoEOF)
{
value=m_runsql.m_recordset->GetCollect("yp_id");
if(value.vt!=VT_NULL)
m_pstrlistKc[0].AddTail((char*)(_bstr_t)value);
value=m_runsql.m_recordset->GetCollect("yp_name");
if(value.vt!=VT_NULL)
m_pstrlistKc[1].AddTail((char*)(_bstr_t)value);
value=m_runsql.m_recordset->GetCollect("ck_name");
if(value.vt!=VT_NULL)
m_pstrlistKc[2].AddTail((char*)(_bstr_t)value);
value=m_runsql.m_recordset->GetCollect("kc_number");
if(value.vt!=VT_NULL)
m_pstrlistKc[3].AddTail((char*)(_bstr_t)value);
m_strlistNo.AddTail((char*)(_bstr_t)value);
m_runsql.m_recordset->MoveNext();
}
return true;
}
bool CListDHDJ::Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID)
{
bool b=CBaseList::Create(dwStyle,rect,pParentWnd,nID);
m_poplist->SelectStringList(4,this->m_pstrlistKc);
return b;
}
void CListDHDJ::OnEditUDNPMessage(const int& item, const int& subitem, UINT key)
{
switch(subitem)
{
case 0:
case 1:
case 2:
case 3:
{
this->m_poplist->SendTheUDNPMessage(key);
break;
}
}
}
int CListDHDJ::CheckKc(const int& item)
{
if(FindKc(item)>=0&&FindKc2(item)>=0)
{
m_iTheItemState[item]=NOWRONG;
}
else
{
TRACE("CKFALSE");
m_iTheItemState[item]=0;
}
return m_iTheItemState[item];
}
int CListDHDJ::FindKc(const int& item)
{ int n=this->GetItemCount();
if(item<-1||item>=n)return -1;
CString ck_name=this->GetItemText(item,2);
CString yp_id=this->GetItemText(item,0);
CString yp_name=this->GetItemText(item,1);
bool result=false;
POSITION pos=NULL;int i;
for( pos = this->m_pstrlistKc[0].GetHeadPosition(),i=0; pos != NULL; i++)
{
if(yp_id== m_pstrlistKc[0].GetNext( pos ))
if(this->m_pstrlistKc[1].GetAt(this->m_pstrlistKc[1].FindIndex(i))==yp_name)
if(this->m_pstrlistKc[2].GetAt(this->m_pstrlistKc[2].FindIndex(i))==ck_name)
{
return this->m_iKc1Selected[item]=i;
}
}
return this->m_iKc1Selected[item]=-1;
}
void CListDHDJ::OnESC(const int& item, const int& subitem)
{
CString str;
m_edit.GetWindowText(str);
switch(subitem)
{
case 4:
CString a;
POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
long number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number+atoi(str)-this->m_edit.m_dSetFocusValue);
this->m_pstrlistKc[3].SetAt(pos,a);
pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number-atoi(str)+this->m_edit.m_dSetFocusValue);
this->m_pstrlistKc[3].SetAt(pos,a);
break;
}
CBaseList::OnESC(item,subitem);
}
int CListDHDJ::IsSelected(const int& item)//if selected return -1, else return index;
{/*
int index=this->FindKc(item);
if(index<0)return m_iKcSelected[item]=-1;
int n=this->GetItemCount();
for(int i=0;i<n;i++)
{
if(i==item) continue;
if(m_iKcSelected[i]==-1)
if(!CheckKc(i)) continue;
if(this->m_iKcSelected[i]==index)
return m_iKcSelected[item]=-1;
}
return m_iKcSelected[item]=index;*/
return 0;
}
void CListDHDJ::PreOnEditChar(const int& item, const int& subitem, UINT &key)
{
switch(subitem)
{
case 4:
if((key>=0x30&&key<=0x39)||key==0x08)
{
;
}
else
{
key=VK_CONTROL;
}
break;
}
}
bool CListDHDJ::CheckAll()
{
int n=GetItemCount();
for(int i=0;i<n;i++)
{
if(GetItemText(i,0)==""&&GetItemText(i,1)=="")
{
DeleteItem(i);
continue;
}
long number=0;
if(!this->CheckTheItem(i))
{
return false;
}
}
return true;
}
bool CListDHDJ::CheckTheItem(const int& item)
{
if(!this->CheckKc(item))
{
this->m_nItem=item;
this->m_iEditedIndex=-1;
MessageBox("请输入完整登记信息","注意");
this->PostMessage(SETNEXTITEMPHFOCUS,0,0);
return false;
}
CString str=this->GetItemText(item,4);
if(str==""||str=="0")
{
TRACE("SL false"); this->m_nItem=item;
this->m_iEditedIndex=3;
MessageBox("不可为空","错误");
this->PostMessage(SETNEXTITEMPHFOCUS,0,0);
return false;
}
return true;
}
bool CListDHDJ::DeleteSelected()
{
if(this->m_poplist->IsWindowVisible())
this->m_poplist->ShowWindow(SW_HIDE);
if(this->m_edit.IsWindowVisible())
m_edit.ShowWindow(SW_HIDE);
LVITEM* item=new LVITEM;
int number=this->GetSelectedCount();
for(int i=this->GetItemCount()-1;i>=0;i--)
{
this->m_nItem=i;
item->iItem=i;
item->mask=LVIF_STATE ;
item->stateMask=LVIS_SELECTED ;
GetItem(item);
if(item->state==LVIS_SELECTED)
{
if(m_iKc1Selected[i]==-1)
{
DeleteItem(i);
continue;
}
CString a;
long sl=atoi(this->GetItemText(i,4));
POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[i]);
long number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number+sl);
this->m_pstrlistKc[3].SetAt(pos,a);
pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[i]);
number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number-sl);
this->m_pstrlistKc[3].SetAt(pos,a);
// this->m_poplist->SelectStringList(4,this->m_pstrlistKc);
DeleteItem(i);
this->m_iKc1Selected[i]=-1;
this->m_iKc2Selected[i]=-1;
}
}
if(GetItemCount()==0)
InsertItem(0,"");
this->m_nItem=0;
Invalidate();
return true;
}
int CListDHDJ::FindKc2(const int& item)
{
int n=this->GetItemCount();
if(item<-1||item>=n)return -1;
CString ck_name=this->GetItemText(item,3);
CString yp_id=this->GetItemText(item,0);
CString yp_name=this->GetItemText(item,1);
bool result=false;
POSITION pos=NULL;int i;
for( pos = this->m_pstrlistKc[0].GetHeadPosition(),i=0; pos != NULL; i++)
{
if(yp_id== m_pstrlistKc[0].GetNext( pos ))
if(this->m_pstrlistKc[1].GetAt(this->m_pstrlistKc[1].FindIndex(i))==yp_name)
if(this->m_pstrlistKc[2].GetAt(this->m_pstrlistKc[2].FindIndex(i))==ck_name)
{
return this->m_iKc2Selected[item]=i;
}
}
return this->m_iKc2Selected[item]=-1;
}
bool CListDHDJ::CancelTheItem(const int &item)
{
if(m_iKc1Selected[item]==-1)
{
return false;
}
CString a;
long sl=atoi(this->GetItemText(item,4));
POSITION pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc1Selected[item]);
long number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number+sl);
this->m_pstrlistKc[3].SetAt(pos,a);
pos=this->m_pstrlistKc[3].FindIndex(this->m_iKc2Selected[item]);
number=atoi(m_pstrlistKc[3].GetAt(pos));
a.Format("%d",number-sl);
this->m_pstrlistKc[3].SetAt(pos,a);
// this->m_poplist->SelectStringList(4,this->m_pstrlistKc);
this->m_iKc1Selected[item]=-1;
this->m_iKc2Selected[item]=-1;
this->SetItemText(item,4,"");
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -