📄 dlgdhdj.cpp
字号:
// DlgDHDJ.cpp : implementation file
//
#include "stdafx.h"
#include "a1.h"
#include "DlgDHDJ.h"
#include "ScrollPrintView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgDHDJ dialog
CDlgDHDJ::CDlgDHDJ(CWnd* pParent /*=NULL*/)
: CDialog(CDlgDHDJ::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgDHDJ)
m_tRq = 0;
//}}AFX_DATA_INIT
m_nlistLSDHDJ=NULL;
m_draw=new CDrawDHDJ(this);
}
void CDlgDHDJ::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgDHDJ)
DDX_Control(pDX, IDCANCEL, m_btnCancel);
DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDel);
DDX_Control(pDX, IDC_BUTTON1, m_btnOk);
DDX_Control(pDX, IDC_EDIT1, m_editBz);
DDX_Control(pDX, IDC_EDIT2, m_editPh);
DDX_Control(pDX, IDC_COMBO1, m_comboJsr);
DDX_Control(pDX, IDC_DATETIMEPICKER1, m_tcRq);
DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_tRq);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgDHDJ, CDialog)
//{{AFX_MSG_MAP(CDlgDHDJ)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_WM_MOVE()
ON_BN_CLICKED(IDC_BUTTON1, OnButtonOK)
ON_BN_CLICKED(IDC_BUTTON_PRINT, OnButtonPrint)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgDHDJ message handlers
void CDlgDHDJ::OnOK()
{
// TODO: Add extra validation here
//CDialog::OnOK();
}
BOOL CDlgDHDJ::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
this->InitBaseInfo();
this->InitnListDHDJ();
this->m_editPh.SetWindowText(this->ChanShengPh());
::PostMessage(this->m_tcRq.GetSafeHwnd(),WM_ACTIVATE ,WA_CLICKACTIVE,0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
bool CDlgDHDJ::InitBaseInfo()
{
m_font.CreateFont(-12, 0, 0, 0, 400, FALSE, FALSE,
0,GB2312_CHARSET , OUT_DEFAULT_PRECIS,//ANSI_CHARSET
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
VARIABLE_PITCH | FF_SCRIPT, "楷体_GB2312");//DEFAULT_PITCH FF_MODERN
m_headfont.CreateFont(-24, 0, 0, 0, 400, FALSE, FALSE,
0,GB2312_CHARSET , OUT_DEFAULT_PRECIS,//ANSI_CHARSET
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
VARIABLE_PITCH | FF_SCRIPT, "楷体_GB2312");//DEFAULT_PITCH FF_MODERN
this->GetDlgItem(IDC_STATIC_DHDJ)->SetFont(&m_headfont,true);
CRect rect;
this->GetClientRect(&rect);
rect.left+=10;
rect.right-=250;
rect.top+=10;
rect.bottom=110;
m_wt.Create("",WS_CHILD|WS_VISIBLE,rect,this,700);
rect=CRect(15,20,90,40);
this->m_wfRq.Create("日期:",WS_CHILD|WS_VISIBLE,rect,&m_wt);
rect.OffsetRect(0,25);
m_wfRq.SetFont(&m_font,true);
this->m_wfJsr.Create("经手人:",WS_CHILD|WS_VISIBLE,rect,&m_wt);
rect.OffsetRect(0,25);
m_wfJsr.SetFont(&m_font,true);
this->m_wfBz.Create("备注:",WS_CHILD|WS_VISIBLE,rect,&m_wt);
rect.OffsetRect(0,25);
m_wfBz.SetFont(&m_font,true);
this->m_comboJsr.SetParent(&m_wt);
this->m_tcRq.SetParent(&m_wt);
this->m_editBz.SetParent(&m_wt);
this->m_comboJsr.SetFont(&m_font,true);
this->m_tcRq.SetFont(&m_font,true);
this->m_editBz.SetFont(&m_font,true);
this->m_editBz.SetCanEdit();
this->m_tRq=CTime::GetCurrentTime();
this->m_tcRq.SetTime(&m_tRq);
CString sql;
sql.Format("select yg_name from tabyginfo");
this->m_runsql.RunSQL(sql);
_variant_t value;
while(!m_runsql.m_recordset->adoEOF)
{
value=m_runsql.m_recordset->GetCollect("yg_name");
this->m_comboJsr.AddString((char*)(_bstr_t)value);
m_runsql.m_recordset->MoveNext();
}
this->m_comboJsr.SetCurSel(0);
return true;
}
void CDlgDHDJ::OnButtonDelete()
{
this->m_nlistLSDHDJ->DeleteSelected();
}
CString CDlgDHDJ::ChanShengPh()
{
CString sql;
_bstr_t sql_;
_variant_t value;
CString s_value;
CString s_date;
CString ph;
this->m_tcRq.GetWindowText(s_date);
m_tcRq.GetTime(this->m_tRq);
CString y_date,m_date,d_date;
y_date=this->m_tRq.Format("%Y");
m_date.Format("%d",this->m_tRq.GetMonth());
d_date.Format("%d",m_tRq.GetDay());
if(m_date.GetLength()==1)
m_date=CString("0")+m_date;
if(d_date.GetLength()==1)
d_date=CString("0")+d_date;
ph=y_date+"-"+m_date+"-"+d_date;
ph=ph+"DHD";
sql.Format("select dh_ph from tabdhph where rq='%s' order by dh_ph desc",s_date);
if(m_runsql.CheckSQLResult(sql))
{
value=m_runsql.m_recordset->GetCollect("dh_ph");
if(value.vt!=NULL)
{
s_value=(char*)(_bstr_t)value;
s_value=s_value.Mid(s_value.GetLength()-4,4);
}
}
else
{
s_value="0";
}
long l_value=atoi(s_value)+1;
s_value.Format("%d",l_value);
for(int i=s_value.GetLength();i<4;i++)
{
s_value="0"+s_value;
}
ph=ph+s_value;
return ph;
}
bool CDlgDHDJ::InitnListDHDJ()
{
CRect rect_nlist(10,150,700,350);
this->GetClientRect(&rect_nlist);
rect_nlist.top=130;
rect_nlist.left+=10;
rect_nlist.right-=10;
rect_nlist.bottom=360;
this->m_nlistLSDHDJ=new CListDHDJ;
m_nlistLSDHDJ->Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|WS_BORDER,rect_nlist,this,ID_NEWLISTLSXSDJ);
this->m_nlistLSDHDJ->ModifyStyle(LVS_EDITLABELS, 0L); //禁止标题编辑
m_nlistLSDHDJ->ModifyStyle(0L, LVS_REPORT); //设为Report类型
m_nlistLSDHDJ->ModifyStyle(0L, LVS_SHOWSELALWAYS); //始终高亮度被选中的表项
m_nlistLSDHDJ->ModifyStyle(0L, LVS_NOSORTHEADER);
m_nlistLSDHDJ->ModifyStyle( LVS_OWNERDRAWFIXED,0L);
m_nlistLSDHDJ->SetExtendedStyle( LVS_EX_FULLROWSELECT | //允许整行选中
LVS_EX_GRIDLINES | //画出网格线
LVS_EX_FLATSB //扁平风格的滚动条
);
CString str;
int i=0;
m_nlistLSDHDJ->InsertColumn( i, "药品编号" );
m_nlistLSDHDJ->InsertColumn( 1, "药品名称" );
m_nlistLSDHDJ->InsertColumn( 2, "调出仓库" );
m_nlistLSDHDJ->InsertColumn( 3, "调入仓库" );
m_nlistLSDHDJ->InsertColumn( 4, "数量" );
// 2、插入1行
m_nlistLSDHDJ->InsertItem(0,"");
// 3、调整列宽
RECT rect2;
m_nlistLSDHDJ->GetWindowRect(&rect2);
int wid = rect2.right - rect2.left;
for( i=0; i<5; i++ )
{
m_nlistLSDHDJ->SetItemText(0,i,"");
m_nlistLSDHDJ->SetColumnWidth( i, wid/5 );
}
m_nlistLSDHDJ->SetSubItemCanEdited(0);
m_nlistLSDHDJ->SetSubItemCanEdited(1);
m_nlistLSDHDJ->SetSubItemCanEdited(2);
m_nlistLSDHDJ->SetSubItemCanEdited(3);
m_nlistLSDHDJ->SetSubItemCanEdited(4);
m_nlistLSDHDJ->Invalidate(false);
return true;
}
bool CDlgDHDJ::SetTheFocus()
{
HWND hwnd=::GetFocus();
int iID=::GetDlgCtrlID(hwnd);
switch(iID)
{
case IDC_DATETIMEPICKER1:
{
this->m_comboJsr.SetFocus();
return true;
}
case IDC_COMBO1:
{
this->m_editBz.SetFocus();
return true;
}
case IDC_EDIT1:
{
this->m_nlistLSDHDJ->m_iEditedIndex=-1;
::PostMessage(m_nlistLSDHDJ->GetSafeHwnd(),WM_SETFOCUS,0,0);
::PostMessage(m_nlistLSDHDJ->GetSafeHwnd(),SETNEXTITEMPHFOCUS,0,0);
return true;
}
case IDC_BUTTON1:
{
this->m_btnCancel.SetFocus();
return true;
}
case IDCANCEL:
{
this->m_tcRq.SetFocus();//mm_btnCancel.SetActiveWindow();
return true;
}
case IDC_BUTTON2:
{
this->m_btnOk.SetFocus();
return true;
}
}
return false;
}
void CDlgDHDJ::OnMove(int x, int y)
{
CDialog::OnMove(x, y);
if(m_nlistLSDHDJ!=NULL)
if(m_nlistLSDHDJ->m_hWnd!=NULL)
::PostMessage(this->m_nlistLSDHDJ->GetSafeHwnd(),MYMESSAGE_EDIT_MOVED,0,0);
}
BOOL CDlgDHDJ::PreTranslateMessage(MSG* pMsg)
{
const HWND hwnd=(pMsg!=NULL)?pMsg->hwnd:NULL;
if(hwnd==NULL) goto a;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==13)
{
if(hwnd==this->m_btnOk.GetSafeHwnd()||
hwnd==this->m_btnCancel.GetSafeHwnd()||
hwnd==this->m_btnDel.GetSafeHwnd())
::PostMessage(this->GetSafeHwnd(),WM_COMMAND,::GetDlgCtrlID(hwnd),(UINT)hwnd);
else
this->SetTheFocus();
}
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_TAB)
{
if(SetTheFocus())
pMsg->wParam=VK_CONTROL;
}
a:
return CDialog::PreTranslateMessage(pMsg);
}
void CDlgDHDJ::OnButtonOK()
{
if(!this->m_nlistLSDHDJ->CheckAll())return;
this->BeginWaitCursor();
CA1App * app=(CA1App*)AfxGetApp();
CString sql;int i;
CString dh_ph;this->m_editPh.GetWindowText(dh_ph);
CString czy=app->m_sUserName;
CString jsr;this->m_comboJsr.GetWindowText(jsr);
CString rq;this->m_tcRq.GetWindowText(rq);
CString bz;this->m_editBz.GetWindowText(bz);
CString yp_id,yp_name,s_sl,out_ck,in_ck;
long l_sl;
long pzs=0;
CStringList slist;
int n=m_nlistLSDHDJ->GetItemCount();
if(n<=0)
{
MessageBox("请输入登记信息","注意");
this->m_nlistLSDHDJ->m_iEditedIndex=-1;
m_nlistLSDHDJ->InsertItem(0,"");
::PostMessage(m_nlistLSDHDJ->GetSafeHwnd(),WM_SETFOCUS,0,0);
::PostMessage(m_nlistLSDHDJ->GetSafeHwnd(),SETNEXTITEMPHFOCUS,0,0);
return ;
}
try{
m_runsql.m_recordset->Close();
LRunSql::BeginTrans();
}
catch(_com_error e)
{
MessageBox(e.ErrorMessage());
}
for(i=0;i<n;i++)
{
yp_id=this->m_nlistLSDHDJ->GetItemText(i,0);
yp_name=this->m_nlistLSDHDJ->GetItemText(i,1);
out_ck=this->m_nlistLSDHDJ->GetItemText(i,2);
in_ck=this->m_nlistLSDHDJ->GetItemText(i,3);
s_sl=this->m_nlistLSDHDJ->GetItemText(i,4);
l_sl=atoi(s_sl);
if(slist.Find(yp_id)==NULL)slist.AddTail(yp_id);
//save dj;
sql.Format("INSERT INTO tabdhdj(dh_ph,out_ck,in_ck,yp_id,sl) VALUES('%s','%s','%s','%s',%d)"
,dh_ph,out_ck,in_ck,yp_id,l_sl);
this->m_runsql.RunSQL(sql);
//save kc;
sql.Format("update tabkc set kc_number = kc_number - %d where yp_id='%s' and ck_name = '%s'",l_sl,yp_id,out_ck);
this->m_runsql.RunSQL(sql);
sql.Format("update tabkc set kc_number = kc_number + %d where yp_id='%s' and ck_name = '%s'",l_sl,yp_id,in_ck);
this->m_runsql.RunSQL(sql);
}
//save ph;
pzs=slist.GetCount();
sql.Format("INSERT INTO tabdhph(dh_ph,pzs,rq,czy,jsr,bz) VALUES('%s',%d,'%s','%s','%s','%s')"
,dh_ph,pzs,rq,czy,jsr,bz);
this->m_runsql.RunSQL(sql);
this->EndWaitCursor();
if(!LRunSql::CommitTrans())
{
MessageBox("数据库事务提交错误","医药管理系统");
if(MessageBox("是否继续登记数据?","医药管理系统",MB_YESNO)==IDYES)
return;
}
else
MessageBox("OK","医药管理系统");
this->EndDialog(0);
}
void CDlgDHDJ::OnCancel()
{
if(MessageBox("确定退出调货登记模块?","注意",MB_YESNO)==IDYES)
{
if(MessageBox("是否保存?","注意",MB_YESNO)==IDNO)
{
CDialog::OnCancel();
}
else
this->OnButtonOK();
}
return;
}
//////////////////////////////////////////////////////////////////////
// CDrawDHDJ Class
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDrawDHDJ::CDrawDHDJ(CDlgDHDJ* dlg)
{
parent=dlg;
m_nColumns=5;
m_iHaveColumnsTitle=1;
m_nSmallTilte=2;
m_piCharsColumns=new int[m_nColumns];
m_piWidthColumns=new int[m_nColumns]; //每列宽度
this->m_pstrColumnTitle=new CString[this->m_nColumns];
m_pstrColumnTitle[0]=_T("药品编号");
m_pstrColumnTitle[1]=_T("药品名称");
m_pstrColumnTitle[2]=_T("调出仓库");
m_pstrColumnTitle[3]=_T("调入仓库");
m_pstrColumnTitle[4]=_T("数量");
}
CDrawDHDJ::~CDrawDHDJ()
{
}
void CDrawDHDJ::PrintDlg(CDC* pDC, CPrintInfo* pInfo)
{
m_pOldFont = (CFont*) (pDC->SelectObject(m_pGeneralFont));
CPoint ptLeftCurPos(pInfo->m_rectDraw.TopLeft());
CPoint ptRightCurPos(pInfo->m_rectDraw.right,pInfo->m_rectDraw.top);
ptLeftCurPos.Offset(this->m_iLeftMargin,2*this->m_iLineHeight);
ptRightCurPos.Offset(-this->m_iRightMargin,2*this->m_iLineHeight);
int iCurPage=pInfo->m_nCurPage;
if(iCurPage==pInfo->GetMinPage())
{
ptLeftCurPos.Offset(0,this->m_iLineHeight/4);//开始写字的起始坐标
ptRightCurPos.Offset(0,this->m_iLineHeight/4);
CString str;
CSize size;
//左边的2行:
this->parent->m_comboJsr.GetWindowText(str);
pDC->TextOut(ptLeftCurPos.x,ptLeftCurPos.y,"经手人:");
pDC->TextOut(m_iLineHeight*4,ptLeftCurPos.y,str);
this->parent->m_editBz.GetWindowText(str);
ptLeftCurPos.Offset(0,m_iLineHeight);
pDC->TextOut(ptLeftCurPos.x,ptLeftCurPos.y,"备注:");
pDC->TextOut(m_iLineHeight*4,ptLeftCurPos.y,str);
//右边的两行:
//票号:
this->parent->m_editPh.GetWindowText(str);
str="调货登记票号: "+str;
size = pDC->GetTextExtent(str);
pDC->TextOut(ptRightCurPos.x-size.cx,ptRightCurPos.y,str);
//日期:
ptRightCurPos.Offset(0,m_iLineHeight);
parent->m_tcRq.GetWindowText(str);
str="日期: "+str;
pDC->TextOut(ptRightCurPos.x-size.cx,ptRightCurPos.y,str);
ptLeftCurPos.Offset(0,m_iLineHeight*3/4);
ptRightCurPos.Offset(0,m_iLineHeight*3/4);
}
int n=this->parent->m_nlistLSDHDJ->GetItemCount();
if(n==0) return ;
this->DrawListItems(pDC,iCurPage,ptLeftCurPos,ptRightCurPos,parent->m_nlistLSDHDJ);
pDC->SelectObject(m_pOldFont);
}
void CDrawDHDJ::PrintPageHeader(CDC* pDC, CPrintInfo* pInfo)
{
CDrawDlg::PrintPageHeader(pDC,pInfo,"调货登记");
}
void CDlgDHDJ::OnButtonPrint()
{
for(int i=this->m_nlistLSDHDJ->GetItemCount()-1;i>=0;i--)
if(m_nlistLSDHDJ->GetItemText(i,0)==""&&
m_nlistLSDHDJ->GetItemText(i,1)==""&&
m_nlistLSDHDJ->GetItemText(i,2)=="")
{
m_nlistLSDHDJ->DeleteItem(i);
}
if(!::OpenPrintFrame(this,m_draw))
{
MessageBox("打开打印框架错误","错误!");
}
if(m_nlistLSDHDJ->GetItemCount()==0)
m_nlistLSDHDJ->InsertItem(0,"");
}
BOOL CDlgDHDJ::DestroyWindow()
{
delete this->m_nlistLSDHDJ;
m_nlistLSDHDJ=NULL;
delete m_draw;
m_draw=NULL;
return CDialog::DestroyWindow();
}
CListCtrl* CDrawDHDJ::GetListCtrl()
{
return this->parent->m_nlistLSDHDJ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -