// LoanersDlg.cpp : implementation file // #include "stdafx.h" #include "sp.h" #include "LoanersDlg.h" #include "loanerseditdlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLoanersDlg dialog CLoanersDlg::CLoanersDlg(CWnd* pParent /*=NULL*/) : CDialog(CLoanersDlg::IDD, pParent) { //{{AFX_DATA_INIT(CLoanersDlg) //}}AFX_DATA_INIT m_pApp= (CSpApp*)AfxGetApp(); rsPrint=m_pApp->rsPool->GetRSPrint("CLoanersDlg rsPrint"); rs=m_pApp->rsPool->GetRS("CLoanersDlg"); m_strCriteria=" WHERE (((rentals.returned)=False))"; m_nDateCriteriaX=0; //show rented out items only when startup m_nTypeCriteriaX=2; } CLoanersDlg::~CLoanersDlg() { m_pApp->rsPool->ReleaseRS(&rsPrint->m_nID); m_pApp->rsPool->ReleaseRS(&rs->m_nID); } void CLoanersDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLoanersDlg) DDX_Control(pDX, IDC_CKRECEIVEDDATE, m_ckReceivedDate); DDX_Control(pDX, IDC_CKDUEDATE, m_ckDueDate); DDX_Control(pDX, IDC_CKANYDATE, m_ckAnyDate); DDX_Control(pDX, IDC_CKSENTDATE, m_ckSentDate); DDX_Control(pDX, IDC_CKSHOWRETURNED, m_ckShowReturned); DDX_Control(pDX, IDC_CKSHOWOUT, m_ckShowOut); DDX_Control(pDX, IDC_CKSHOWALLITEMS, m_ckShowAll); DDX_Control(pDX, IDC_REPORT, m_rc); DDX_Control(pDX, IDC_lblTo, m_lblTo); DDX_Control(pDX, IDC_DTTO, m_dtTo); DDX_Control(pDX, IDC_DTFROM, m_dtFrom); //}}AFX_DATA_MAP DDX_Control(pDX, IDC_LBL_SHOW, m_lblShow); } BEGIN_MESSAGE_MAP(CLoanersDlg, CDialog) //{{AFX_MSG_MAP(CLoanersDlg) ON_BN_CLICKED(IDC_CKANYDATE, OnCkanydate) ON_BN_CLICKED(IDC_CKSENTDATE, OnCksentdate) ON_BN_CLICKED(IDC_CKDUEDATE, OnCkduedate) ON_BN_CLICKED(IDC_CKRECEIVEDDATE, OnCkreceiveddate) ON_BN_CLICKED(IDC_CKSHOWRETURNED, OnCkshowreturned) ON_BN_CLICKED(IDC_CKSHOWOUT, OnCkshowout) ON_BN_CLICKED(IDC_CKSHOWALLITEMS, OnCkshowallitems) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTTO, OnDatetimechangeDtto) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTFROM, OnDatetimechangeDtfrom) ON_NOTIFY(RVN_ITEMDBCLICK, IDC_REPORT, OnRvnItemDbClick) ON_NOTIFY(RVN_COLUMNCLICK, IDC_REPORT, OnColumnClick) ON_BN_CLICKED(IDC_BTNPRINT, OnBtnprint) //}}AFX_MSG_MAP ON_COMMAND(ID_NEW, OnNew) ON_COMMAND(ID_DELETE, OnDelete) ON_COMMAND(ID_CLOSE_LOANERS_AND_RENTALS, OnCloseThisScreen) ON_COMMAND(ID_HELPONLOANERS, OnHelponloaners) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLoanersDlg message handlers void CLoanersDlg::OnRvnItemDbClick(NMHDR* pNMHDR, LRESULT* pResult) { LPNMREPORTVIEW lpnmrv = (LPNMREPORTVIEW)pNMHDR; if(lpnmrv->iItem >=0)//-1 if clicked on invalid { CLoanersEditDlg d; CString item=m_rc.GetItemText(lpnmrv->iItem,6); d.SetRentalID(&item); if(d.DoModal()==IDOK) FillView(); } *pResult = FALSE; } BOOL CLoanersDlg::OnInitDialog() { CDialog::OnInitDialog(); m_resize.Create( this ); ShowWindow(SW_HIDE); Security(); CWaitCursor wait; //defaults m_ckShowOut.SetCheck(TRUE); m_ckAnyDate.SetCheck(TRUE); CString profile,q; q.Format("SELECT users.rentalprofile " "FROM users WHERE (((users.id)=%u));",m_pApp->m_lusrID); rs->Query(q); rs->FetchField("rentalprofile",&profile); m_ilReport.Create(IDB_BM2, 16, 1, RGB(255,0,255)); m_rc.SetImageList(&m_ilReport); //ShowWindow(SW_MAXIMIZE); m_rc.InsertColor(0, 0x00C0D8C0); m_rc.InsertColor(1, ::GetSysColor(COLOR_GRAYTEXT)); m_rc.InsertColor(2, 0x00D0C0C0); m_rc.InsertColor(3, 0x00804000); RVCOLUMN rvc; rvc.nFormat = RVCF_TEXT|RVCF_EX_AUTOWIDTH|RVCF_EX_FIXEDWIDTH|RVCF_SUBITEM_IMAGE; rvc.iImage = 1; rvc.lpszText = _T("Status"); rvc.iWidth = 60; m_rc.DefineColumn(0, &rvc); rvc.nFormat = RVCF_TEXT; rvc.lpszText = "Item"; rvc.iWidth = 60; m_rc.DefineColumn(1, &rvc); rvc.lpszText = "At"; rvc.iWidth = 60; m_rc.DefineColumn(2, &rvc); rvc.lpszText = "Out"; rvc.iWidth = 60; m_rc.DefineColumn(3, &rvc); rvc.nFormat = RVCF_TEXT; rvc.lpszText = "Due"; rvc.iWidth = 60; m_rc.DefineColumn(4, &rvc); rvc.lpszText = "Rcvd."; rvc.iWidth = 60; m_rc.DefineColumn(5, &rvc); rvc.nFormat = RVCF_TEXT | RVCF_EX_FIXEDWIDTH; rvc.lpszText = "id"; rvc.iWidth = 0; m_rc.DefineColumn(6, &rvc); rvc.nFormat = RVCF_TEXT; rvc.lpszText = "Ref"; rvc.iWidth = 60; m_rc.DefineColumn(7, &rvc); rvc.nFormat = RVCF_TEXT; rvc.lpszText = "Desc."; rvc.iWidth = 60; m_rc.DefineColumn(8, &rvc); //setup according to users preferences if(!profile.IsEmpty()) m_rc.GetProfile(&profile); else { //not needed when setting by pref //but if there are no preferences then you would need it m_rc.ActivateColumn(0, 0); m_rc.ActivateColumn(1, 1); m_rc.ActivateColumn(2, 2); m_rc.ActivateColumn(3, 3); m_rc.ActivateColumn(4, 4); m_rc.ActivateColumn(5, 5); m_rc.ActivateColumn(6, 6); m_rc.ActivateColumn(7, 7); m_rc.ActivateColumn(8, 8); } m_rc.ModifyStyle(0, RVS_SINGLESELECT); //m_rc.ModifyStyle(0, RVS_SHOWCOLORALTERNATE); //turn off the grids m_rc.ModifyStyle(RVS_SHOWVGRID, 0); m_rc.ModifyStyle(RVS_SHOWHGRID, 0); //retrieve the loaner items and display them FillView(); Layout(); //Use the current width and height as the minimum size m_resize.SetMinimumTrackingSize(); //=================================================== // SET WINDOW SIZE TO MATCH WORK AREA ShowWindow(SW_SHOWMAXIMIZED); CRect workarea; SystemParametersInfo(SPI_GETWORKAREA,0,&workarea,0); SetWindowPos(NULL,workarea.left,workarea.top,workarea.Width(),workarea.Height(),SWP_NOZORDER); //=================================================== //ShowWindow(SW_MAXIMIZE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CLoanersDlg::FillView() { CString q; COleDateTime dtDefault; dtDefault.SetDate(1968,03,12); int x=0; q.Format("SELECT rentals.id, rentals.ref, IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & " "\" \" & [unitmodels].[description] & \" \" & [unitmodels].[model]) AS [desc], [rentals]![description] & " "IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & " "IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn]) AS item, [loanedto] & " "IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company]) " "AS rentor, Format([dateout],\"Short Date\") AS outdate, IIf([datedue]=#%s#,\"na\",Format([datedue], " "\"Short Date\")) AS duedate, IIf([datereturn]=#%s#,\"Out\",Format([datereturn],\"Short Date\")) " "AS retdate, rentals.returned, DateDiff(\"d\",Now(),[datedue]) AS duedays " "FROM ((((rentals LEFT JOIN clients ON rentals.clientlink = clients.id) LEFT JOIN " "units ON rentals.unitlink = units.id) LEFT JOIN parts ON rentals.partlink = parts.id) " "LEFT JOIN unitmodels ON units.model = unitmodels.id) LEFT JOIN nonclients ON unitmodels.manufacturer = nonclients.id " "%s %s;",dtDefault.Format(_T("%m/%d/%Y")), dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy); /* q.Format("SELECT rentals.id, rentals.ref, [rentals]![description] " "& IIf(IsNull([parts]![partnumber]),\"\"," "\"part:\" & [parts]![partnumber] ) & " "IIf(IsNull([units]![sn]),\"\",\"unit:\" & " "[units]![sn]) AS item, [loanedto] & " "IIf(IsNull([clients]![company]), " "[clients]![first] & \" \" & [clients]![last], " "[clients]![company]) AS rentor, Format([dateout], " "\"Short Date\") AS outdate, IIf([datedue]=#%s# " ",\"na\",Format([datedue],\"Short Date\")) AS " "duedate, IIf([datereturn]=#%s#,\"Out\", " "Format([datereturn],\"Short Date\")) AS retdate, " "rentals.returned, DateDiff(\"d\",Now(),[datedue]) AS duedays " "FROM ((rentals LEFT JOIN clients ON " "rentals.clientlink = clients.id) LEFT JOIN units " "ON rentals.unitlink = units.id) LEFT JOIN parts " "ON rentals.partlink = parts.id %s %s;",dtDefault.Format(_T("%m/%d/%Y")), dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy); */ //"WHERE ( ((rentals.datereturn) Between #06/01/2000# And #06/30/2000#) AND ((rentals.returned)=False));"); // "WHERE ( ((rentals.returned)=True) AND ((rentals.dateout) Between #1/1/1990# And #1/1/2000#));"); //WHERE (((rentals.returned)=True) AND ((rentals.dateout) Between #1/1/1990# And #1/1/2001#)) //rs->Query("SELECT rentals.* FROM rentals WHERE (((rentals.id)=0));"); rs->Query(q); //m_pApp->ShowStuff(q); m_rc.DeleteAllItems(); if(rs->IsEmpty()) return; CString strData,strItem,strRentor,strOutdate,strDueDays,strDuedate,strRetdate,strID,strRef,strDesc; COleDateTime dtDate; long lData; long lDueDays; bool bReturned; int nDueDays; rs->MoveFirst(); do { rs->FetchField("item",&strItem); //avoid the underline in the report control //for a single & strItem.Replace("&","&&"); rs->FetchField("rentor",&strRentor); strRentor.Replace("&","&&"); rs->FetchField("outdate",&strOutdate); rs->FetchField("duedate",&strDuedate); rs->FetchField("retdate",&strRetdate); rs->FetchField("duedays",&lDueDays); nDueDays=lDueDays;//atoi(strDueDays); rs->FetchField("id",&lData); strID.Format("%u",lData); rs->FetchField("returned",&bReturned); rs->FetchField("ref",&strRef); rs->FetchField("desc",&strDesc); //Set the look of the row and insert it //LATE! RVITEM rvi; rvi.iItem = x; rvi.iSubItem = 0; rvi.nMask = RVIM_IMAGE|RVIM_PREVIEW|RVIM_STATE|RVIM_LPARAM; rvi.nState = 0; rvi.nPreview = 0;//no preview necessary if(bReturned) rvi.iImage=3;//blank else { rvi.iImage=0;//green light - default if(nDueDays<0)//overdue rvi.iImage=2;//redlight if(nDueDays==0)//due today rvi.iImage=1;//orange light } rvi.lParam = x; m_rc.InsertItem(&rvi); //ITEM rvi.iSubItem = 1; rvi.nMask = RVIM_TEXT; rvi.lpszText = strItem.GetBuffer(strItem.GetLength()); m_rc.SetItem(&rvi); //AT rvi.iSubItem = 2; rvi.lpszText = strRentor.GetBuffer(strRentor.GetLength()); m_rc.SetItem(&rvi); //OUT rvi.iSubItem = 3; rvi.lpszText = strOutdate.GetBuffer(strOutdate.GetLength()); m_rc.SetItem(&rvi); //DUE rvi.iSubItem = 4; rvi.lpszText = strDuedate.GetBuffer(strDuedate.GetLength()); m_rc.SetItem(&rvi); //BACK rvi.iSubItem = 5; if(bReturned==false) rvi.lpszText=" "; else rvi.lpszText = strRetdate.GetBuffer(strRetdate.GetLength()); m_rc.SetItem(&rvi); //ID rvi.iSubItem = 6; rvi.lpszText = strID.GetBuffer(strID.GetLength()); m_rc.SetItem(&rvi); //ref rvi.iSubItem = 7; rvi.lpszText = strRef.GetBuffer(strRef.GetLength()); m_rc.SetItem(&rvi); //description rvi.iSubItem = 8; rvi.lpszText = strDesc.GetBuffer(strDesc.GetLength()); m_rc.SetItem(&rvi); x++; }while(rs->MoveForward()); } //SET CRITERIA FOR QUERY: //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* //*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* void CLoanersDlg::OnCkanydate() { m_nDateCriteriaX=0; ShowDateFields(false); Criteria(); } void CLoanersDlg::OnCksentdate() {/* if(m_nDateCriteriaX==0)//were not dates showing before { //so just show dates and exit m_ckAnyDate.SetCheck(FALSE); ShowDateFields(true); m_nDateCriteriaX=(1); return; } */ ShowDateFields(true); m_nDateCriteriaX=(1); Criteria(); } void CLoanersDlg::OnCkduedate() {/* if(m_nDateCriteriaX==0)//were not dates showing before { //so just show dates and exit m_ckAnyDate.SetCheck(FALSE); ShowDateFields(true); m_nDateCriteriaX=(2); return; }*/ ShowDateFields(true); m_nDateCriteriaX=(2); Criteria(); } void CLoanersDlg::OnCkreceiveddate() { /* if(m_nDateCriteriaX==0)//were not dates showing before { //so just show dates and exit m_ckAnyDate.SetCheck(FALSE); ShowDateFields(true); m_nDateCriteriaX=(3); return; }*/ ShowDateFields(true); m_nDateCriteriaX=(3); Criteria(); } void CLoanersDlg::OnDatetimechangeDtto(NMHDR* pNMHDR, LRESULT* pResult) { Criteria(); *pResult = 0; } void CLoanersDlg::OnDatetimechangeDtfrom(NMHDR* pNMHDR, LRESULT* pResult) { Criteria(); *pResult = 0; } void CLoanersDlg::OnCkshowreturned() { m_nTypeCriteriaX=1; Criteria(); } void CLoanersDlg::OnCkshowout() { m_nTypeCriteriaX=2; Criteria(); } void CLoanersDlg::OnCkshowallitems() { m_nTypeCriteriaX=0; Criteria(); } //set date and type criteria and rebuild list void CLoanersDlg::Criteria() { CString strFrom,strTo,strDatePart,strTypePart; COleDateTime dtData; m_ckAnyDate.SetCheck(FALSE); m_ckDueDate.SetCheck(FALSE); m_ckSentDate.SetCheck(FALSE); m_ckShowAll.SetCheck(FALSE); m_ckShowOut.SetCheck(FALSE); m_ckShowReturned.SetCheck(FALSE); m_ckReceivedDate.SetCheck(FALSE); m_dtFrom.GetTime(dtData); strFrom=dtData.Format(_T("%m/%d/%Y")); m_dtTo.GetTime(dtData); strTo=dtData.Format(_T("%m/%d/%Y")); m_strCriteria.Empty(); switch(m_nDateCriteriaX) { case 1://sent date m_ckSentDate.SetCheck(TRUE); strDatePart.Format("((rentals.dateout) Between #%s# And #%s#)",strFrom,strTo); break; case 2://due date m_ckDueDate.SetCheck(TRUE); strDatePart.Format("((rentals.datedue) Between #%s# And #%s#)",strFrom,strTo); break; case 3://received date m_ckReceivedDate.SetCheck(TRUE); strDatePart.Format("((rentals.datereturn) Between #%s# And #%s#) AND ((rentals.returned)=True)",strFrom,strTo); break; default://any date strDatePart.Empty(); m_ckAnyDate.SetCheck(TRUE); break; } switch(m_nTypeCriteriaX) { case 1://returned strTypePart=" ((rentals.returned)=True)"; m_ckShowReturned.SetCheck(TRUE); break; case 2://out m_ckShowOut.SetCheck(TRUE); strTypePart=" ((rentals.returned)=False)"; break; default://all m_ckShowAll.SetCheck(TRUE); strTypePart.Empty(); break; } //No criteria if(strDatePart.IsEmpty() && strTypePart.IsEmpty()) { m_strCriteria.Empty(); FillView(); return; } //both criteria if(!strDatePart.IsEmpty() && !strTypePart.IsEmpty() ) { m_strCriteria=" WHERE (" + strTypePart + " AND " + strDatePart + ")"; FillView(); return; } //only one criteria if(!strTypePart.IsEmpty()) { m_strCriteria = " WHERE (" + strTypePart+ ")"; FillView(); return; } else { m_strCriteria=" WHERE (" + strDatePart+ ")"; FillView(); return; } } void CLoanersDlg::ShowDateFields(bool bShow) { m_dtFrom.ShowWindow(bShow ? TRUE : FALSE); m_dtTo.ShowWindow(bShow ? TRUE : FALSE); m_lblTo.ShowWindow(bShow ? TRUE : FALSE); } void CLoanersDlg::Security() { int x=m_pApp->Allowed(RLOANERS,true); if(x==2)//read only { m_btnAdd.ShowWindow(FALSE); m_btnDelete.ShowWindow(FALSE); } if(x==0) { m_pApp->SecurityWarning(); CDialog::OnCancel(); } } //SET ORDER BY CLAUSE DEPENDING ON CLICK HERE void CLoanersDlg::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult) { int x; CString str; CFlatHeaderCtrl* header; header=m_rc.GetHeaderCtrl(); //FIND CLICKED COLUMN str=header->m_szHotItemText; if(str=="Status"){x=0;goto OUTTAHERE;} if(str=="Item"){x=1;goto OUTTAHERE;} if(str=="At"){x=2;goto OUTTAHERE;} if(str=="Out"){x=3;goto OUTTAHERE;} if(str=="Due"){x=4;goto OUTTAHERE;} if(str=="Rcvd."){x=5;goto OUTTAHERE;} if(str=="Ref"){x=7;goto OUTTAHERE;} if(str=="Desc."){x=8;goto OUTTAHERE;} OUTTAHERE: bColumnSortAsc[x]=!bColumnSortAsc[x]; switch(x) {//DESC case 0://duedays m_strOrderBy="ORDER BY [datedue]"; break; case 1://item m_strOrderBy="ORDER BY [rentals]![description] & IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn])"; break; case 2://RENTOR m_strOrderBy="ORDER BY [loanedto] & IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company])"; break; case 3://OUTDATE m_strOrderBy="ORDER BY [dateout]"; break; case 4://DUEDATE m_strOrderBy="ORDER BY [datedue]"; break; case 5://backdate/returned m_strOrderBy="ORDER BY rentals.returned,[datereturn]"; break; //case 6: is id number so not sortable case 7://reference number/text m_strOrderBy="ORDER BY rentals.ref"; break; case 8://Description m_strOrderBy="ORDER BY IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & \" \" & [unitmodels].[description] & \" \" & [unitmodels].[model])"; break; } if(!bColumnSortAsc[x]) m_strOrderBy+=" DESC"; header->SetSortColumn(header->GetHotIndex(),bColumnSortAsc[x]); *pResult = TRUE;//TRUE means we handled it here thanks anyway FillView(); } void CLoanersDlg::OnBtnprint() { CString q; COleDateTime dtDefault; dtDefault.SetDate(1968,03,12); q.Format("SELECT rentals.*, IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & " "\" \" & [unitmodels].[description] & \" \" & [unitmodels].[model]) AS [desc], [rentals]![description] & " "IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & " "IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn]) AS item, [loanedto] & " "IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company]) " "AS rentor, Format([dateout],\"Short Date\") AS outdate, IIf([datedue]=#%s#,\"na\",Format([datedue], " "\"Short Date\")) AS duedate, IIf([datereturn]=#%s#,\"Out\",Format([datereturn],\"Short Date\")) " "AS retdate, DateDiff(\"d\",Now(),[datedue]) AS duedays " "FROM ((((rentals LEFT JOIN clients ON rentals.clientlink = clients.id) LEFT JOIN " "units ON rentals.unitlink = units.id) LEFT JOIN parts ON rentals.partlink = parts.id) " "LEFT JOIN unitmodels ON units.model = unitmodels.id) LEFT JOIN nonclients ON unitmodels.manufacturer = nonclients.id " "%s %s;",dtDefault.Format(_T("%m/%d/%Y")), dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy); rsPrint->QueryReadOnly(q); if(rsPrint->IsEmpty()) { AfxMessageBox("Nothing to print!"); return; } //m_pApp->CreateTTX("loaners.ttx",rsPrint->RecordSetPointer()); m_pApp->PrintCMReportRDC("loaners",rsPrint->RecordSetPointer()); } void CLoanersDlg::OnNew() { CLoanersEditDlg d; if(d.DoModal()==IDOK) FillView(); } void CLoanersDlg::OnDelete() { int x; CString q,strID; x=m_rc.GetFirstSelectedItem(); if(x<0) return;//no selection if(AfxMessageBox("Delete the highlighted item? Are you sure?",MB_YESNO)==IDNO) return; strID=m_rc.GetItemText(x,6); q.Format("DELETE rentals.* FROM rentals WHERE (((rentals.id)=%s));",strID); rs->Ex(q); FillView(); } void CLoanersDlg::OnCloseThisScreen() { CString profile,q; //save to user prefs. m_rc.WriteProfile(&profile); q.Format("UPDATE users SET users.rentalprofile = \"%s\" " "WHERE (((users.id)=%u));",profile,m_pApp->m_lusrID); rs->Ex(q); CDialog::OnOK(); } void CLoanersDlg::OnHelponloaners() { WinHelp(0x200A8); // } void CLoanersDlg::Layout(void) { int nVertFactor;//used to scale vertically int nDelta=0;//change in vertical height nVertFactor=0; nDelta=5; m_resize.Add(IDC_LBL_SHOW,0,100,0,0); m_resize.Add(IDC_CKSHOWRETURNED,0,100,0,0); m_resize.Add(IDC_CKSHOWOUT,0,100,0,0); m_resize.Add(IDC_CKSHOWALLITEMS,0,100,0,0); m_resize.Add(IDC_CKANYDATE,0,100,0,0); m_resize.Add(IDC_CKSENTDATE,0,100,0,0); m_resize.Add(IDC_CKDUEDATE,0,100,0,0); m_resize.Add(IDC_CKRECEIVEDDATE,0,100,0,0); m_resize.Add(IDC_DTFROM,0,100,0,0); m_resize.Add(IDC_lblTo,0,100,0,0); m_resize.Add(IDC_DTTO,0,100,0,0); m_resize.Add(IDC_REPORT,0,0,100,100); }