📄 browsevw.cpp
字号:
// browsevw.cpp : implementation of the CDBaseBrowserView class
//
// This is a part of the Objective Grid C++ Library.
// Copyright (C) 1995 ClassWorks, Stefan Hoenig.
// All rights reserved.
//
// This source code is only intended as a supplement to
// the Objective Grid Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding
// the Objective Grid product.
//
#include "stdafx.h"
#include "gridapp.h"
#include "browsevw.h"
#include <limits.h>
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDBaseBrowserView
IMPLEMENT_DYNCREATE(CDBaseBrowserView, CMyGridView)
CDBaseBrowserView::CDBaseBrowserView()
{
}
CDBaseBrowserView::~CDBaseBrowserView()
{
}
BEGIN_MESSAGE_MAP(CDBaseBrowserView, CMyGridView)
//{{AFX_MSG_MAP(CDBaseBrowserView)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDBaseBrowserView diagnostics
#ifdef _DEBUG
void CDBaseBrowserView::AssertValid() const
{
CMyGridView::AssertValid();
}
void CDBaseBrowserView::Dump(CDumpContext& dc) const
{
CMyGridView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDBaseBrowserView message handlers
void CDBaseBrowserView::OnInitialUpdate()
{
BOOL bNew = (GetParam() == NULL);
// Link grid to document,
SetParam(&GetDocument()->m_param, FALSE /* do not destroy*/);
CMyGridView::OnInitialUpdate();
EnableHints(TRUE); // I have several views connected with one doc
}
// Bind gridview to DBase file
ROWCOL CDBaseBrowserView::GetRowCount()
{
return GetDocument()->m_dbfile.nRecordCount;
}
ROWCOL CDBaseBrowserView::GetColCount()
{
return GetDocument()->m_dbfile.nFieldCount;
}
CField* CDBaseBrowserView::GetField(ROWCOL nCol)
{
return GetDocument()->m_dbfile.GetField(GetFieldId(nCol));
}
int CDBaseBrowserView::GetFieldId(ROWCOL nCol)
{
ASSERT(nCol >= 1 && nCol <= INT_MAX);
long nField = -1;
GetDocument()->m_columnIdMap.Lookup(nCol, nField);
return (int) (nField);
}
BOOL CDBaseBrowserView::GetStyleRowCol(ROWCOL nRow, ROWCOL nCol, CGXStyle& style, GXModifyType mt, int nType)
{
if (mt == gxRemove) // not supported
return FALSE;
// Note: I do not distinct between gxApplyNew, gxCopy and gxOverride
ASSERT(nRow <= LONG_MAX);
long nRecord = (long) nRow;
if (nType == -1)
{
// here you can return the style for a complete row, column or table
return FALSE;
}
else if (nRow == 0 && nCol == 0)
{
// style for the top-left button
return FALSE;
}
else if (nRow == 0)
{
// Column headers
style.SetValue(GetField(nCol)->name);
}
else if (GetDocument()->m_dbfile.Seek(nRecord-1))
{
if (nCol == 0)
{
// Row headers
char sz[20];
wsprintf(sz, "%5lu%c", nRow, GetDocument()->m_dbfile.IsDeleted() ? '*' : ' ');
style.SetValue(sz);
}
else
{
// Cell value
CString s;
CField* fld = GetField(nCol);
GetDocument()->m_dbfile.GetValue(GetFieldId(nCol), s);
style
.SetValue(s)
.SetMaxLength(fld->len);
switch (fld->type)
{
case 'N': style.SetBaseStyle(GetDocument()->m_wStyleNumeric); break;
case 'C': style.SetBaseStyle(GetDocument()->m_wStyleText); break;
case 'D': style.SetBaseStyle(GetDocument()->m_wStyleDate); break;
case 'L': style.SetBaseStyle(GetDocument()->m_wStyleLogical); break;
}
}
return TRUE;
}
// unreferenced:
mt;
return FALSE;
}
BOOL CDBaseBrowserView::StoreStyleRowCol(ROWCOL nRow, ROWCOL nCol, const CGXStyle* pStyle, GXModifyType mt, int nType)
{
if (mt == gxRemove) // not supported
return FALSE;
// Note: I do not distinct between gxApplyNew, gxCopy and gxOverride
ASSERT(nRow <= LONG_MAX);
long nRecord = (long) nRow;
if (nType == -1)
{
// here you could store the style for a complete row, column or table
return FALSE;
}
else if (nRow == 0 && nCol == 0)
{
// style for the top-left button
return FALSE;
}
else if (nRow == 0)
{
// Column headers
return FALSE;
}
else if (GetDocument()->m_dbfile.Seek(nRecord-1))
{
if (nCol == 0)
{
// Row headers
return FALSE;
}
else
{
// Cell value
if (pStyle->GetIncludeValue())
GetDocument()->m_dbfile.SetValue(GetFieldId(nCol), pStyle->GetValue());
SetModifiedFlag();
return TRUE;
}
}
// unreferenced:
mt;
return FALSE;
}
int CDBaseBrowserView::GetColWidth(ROWCOL nCol)
{
ASSERT(nCol <= INT_MAX);
if (nCol > 0)
{
// GX_NXAVGWIDTH is average logical width of a char
// Width_LPtoDP converts from logical to pixel value
if (IsColHidden(nCol))
return 0;
else
return Width_LPtoDP( GetField(nCol)->width * GX_NXAVGWIDTH);
}
return CMyGridView::GetColWidth(nCol);
}
BOOL CDBaseBrowserView::StoreColWidth(ROWCOL nCol, int nWidth)
{
ASSERT(nCol <= INT_MAX);
if (nCol > 0)
{
// GX_NXAVGWIDTH is average logical width of a char
// Width_DPtoLP converts from pixel to logical value
GetField(nCol)->width = (short) (Width_DPtoLP(nWidth) / GX_NXAVGWIDTH);
SetModifiedFlag();
return TRUE;
}
return CMyGridView::StoreColWidth(nCol, nWidth);
}
BOOL CDBaseBrowserView::StoreMoveCols(ROWCOL nFromCol, ROWCOL nToCol, ROWCOL nDestCol, BOOL bProcessed)
{
GetDocument()->m_columnIdMap.Move(nFromCol, nToCol, nDestCol);
SetModifiedFlag();
return CMyGridView::StoreMoveCols(nFromCol, nToCol, nDestCol, bProcessed = TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -