亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbdataview.cpp.txt

?? minidatabase一個小型的數據庫管理系統。有創建數據庫
?? TXT
字號:
// DbDataView.cpp : implementation file    
//    
   
#include "stdafx.h"    
#include "minidatabase.h"    
#include "DbDataView.h"    
#include "TextView.h"    
#include "DbTreeView.h"    
#include "MainFrm.h"    
   
#ifdef _DEBUG    
#define new DEBUG_NEW    
#undef THIS_FILE    
static char THIS_FILE[] = __FILE__;   
#endif    
   
#define IDC_GRID_CTRL       1002    
   
/////////////////////////////////////////////////////////////////////////////    
// CDbDataView    
   
IMPLEMENT_DYNCREATE(CDbDataView, CView)   
   
CDbDataView::CDbDataView()   
{   
    m_pTable = NULL;   
}   
   
CDbDataView::~CDbDataView()   
{   
}   
   
void CDbDataView::SetFirstRow(TABLE *table)   
{   
    if (table == NULL)   
        return;   
   
    for (int i = 0; i < m_gridCtrl.GetColumnCount(); i++)   
    {   
        FIELD *f = table->fields + i;   
           
        GV_ITEM Item;   
        Item.mask = GVIF_TEXT | GVIF_FORMAT;   
        Item.row = 0;   
        Item.col = i;   
        Item.nFormat = DT_LEFT | DT_WORDBREAK;   
        Item.szText.Format(_T("%s"), f->name);   
   
        m_gridCtrl.SetItem(&Item);   
    }   
}   
   
CString GetFieldString(FIELD *f, BYTE *buff)   
{   
    CString str;   
    switch (f->type)   
    {   
    case FIELD_TYPE_CHAR:   
        if (f->count > 1)   
            str.Format(_T("%s"), (char *)buff);   
        else   
            str.Format(_T("%c"), (char)(*buff));   
        break;   
    case FIELD_TYPE_BYTE:   
        {   
            CString strOne;   
            BYTE *b = buff;   
            for (int k = 0, last = f->count - 1; k < f->count; k++, b++)   
            {   
                strOne.Format(_T("0x%02x"), *b);   
                str += strOne;   
                if (k < last)   
                    str += _T(", ");   
            }   
        }   
        break;   
    case FIELD_TYPE_SHORT:   
        if (f->count == 1)   
        {   
            str.Format(_T("%d"), *(WORD *)buff);   
        }   
        else   
        {   
            CString strOne;   
            SHORT *v = (SHORT *)buff;   
            str.Empty();   
            for (int k = 0, last = f->count - 1; k < f->count; k++, v++)   
            {   
                strOne.Format(_T("%d"), *v);   
                str += strOne;   
                if (k < last)   
                    str += _T(", ");   
            }   
        }   
        break;   
    case FIELD_TYPE_WORD:   
        {   
            CString strOne;   
            WORD *v = (WORD *)buff;   
            str.Empty();   
            for (int k = 0, last = f->count - 1; k < f->count; k++, v++)   
            {   
                strOne.Format(_T("%u"), *v);   
                str += strOne;   
                if (k < last)   
                    str += _T(", ");   
            }   
        }   
        break;   
    case FIELD_TYPE_INT:   
        {   
            CString strOne;   
            INT *v = (INT *)buff;   
            str.Empty();   
            for (int k = 0, last = f->count - 1; k < f->count; k++, v++)   
            {   
                strOne.Format(_T("%d"), *v);   
                str += strOne;   
                if (k < last)   
                    str += _T(", ");   
            }   
        }   
        break;   
    case FIELD_TYPE_UINT:   
        {   
            CString strOne;   
            UINT *v = (UINT *)buff;   
            str.Empty();   
            for (int k = 0, last = f->count - 1; k < f->count; k++, v++)   
            {   
                strOne.Format(_T("%u"), *v);   
                str += strOne;   
                if (k < last)   
                    str += _T(", ");   
            }   
        }   
        break;   
    }   
   
    return str;   
}   
   
void CDbDataView::LoadRecords(TABLE *table)   
{   
    if (table == NULL)   
        return;   
   
    //m_gridCtrl.ShowWindow(SW_HIDE);    
    m_gridCtrl.DeleteAllItems();   
    // 顯示數據    
    m_gridCtrl.SetRowCount((table->max_rows == 1 ? 1 : ((table->used_rows < table->max_rows) ? (table->used_rows + 1) : table->used_rows)) + 1);   
    m_gridCtrl.SetFixedRowCount(1);   
    m_gridCtrl.SetColumnCount(table->field_count);   
    m_gridCtrl.SetFixedColumnCount(0);   
    m_gridCtrl.SetRowResize(FALSE);   
    SetFirstRow(table);   
       
    // 載入數據    
    int nRow = 1;   
    RECORD *record = table->records;   
    do   
    {   
        if (record == NULL)   
            break;   
   
        BYTE *bpos = record->data;   
        for (int i = 0; i < table->field_count; i++)   
        {   
            FIELD *f = table->fields + i;   
               
            GV_ITEM Item;   
            Item.mask = GVIF_TEXT | GVIF_FORMAT;   
            Item.row = nRow;   
            Item.col = i;   
            Item.nFormat = DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS;   
            Item.szText = GetFieldString(f, bpos + f->offset);   
               
            m_gridCtrl.SetItem(&Item);   
        }   
        m_gridCtrl.SetItemData(nRow, 0, (LPARAM)record);   
        nRow++;   
   
        record = record->next;   
    } while (record != table->records);   
   
    m_gridCtrl.AutoSize();   
    m_gridCtrl.ShowWindow(SW_SHOW);   
}   
   
BEGIN_MESSAGE_MAP(CDbDataView, CView)   
    //{{AFX_MSG_MAP(CDbDataView)    
    ON_UPDATE_COMMAND_UI(ID_EDIT_INDICATOR_CRLF, OnUpdateIndicatorCRLF)   
    ON_UPDATE_COMMAND_UI(ID_INDICATOR_OVR, OnUpdateIndicatorOvr)   
    ON_WM_CREATE()   
    ON_WM_DESTROY()   
    ON_WM_SIZE()   
    ON_NOTIFY(GVN_ENDLABELEDIT, IDC_GRID_CTRL, OnEndLabelEditGridCtrl)   
    ON_NOTIFY(GVN_RCLICK, IDC_GRID_CTRL, OnRclickGridCtrl)   
    ON_COMMAND(ID_DELETE_RECORD, OnDeleteRecord)   
    //}}AFX_MSG_MAP    
    ON_MESSAGE(WM_SET_DATA, OnSetData)   
    ON_MESSAGE(WM_HIDE_GRID, OnHideGrid)   
END_MESSAGE_MAP()   
   
/////////////////////////////////////////////////////////////////////////////    
// CDbDataView drawing    
   
void CDbDataView::OnDraw(CDC* pDC)   
{   
    CDocument* pDoc = GetDocument();   
    // TODO: add draw code here    
}   
   
/////////////////////////////////////////////////////////////////////////////    
// CDbDataView diagnostics    
   
#ifdef _DEBUG    
void CDbDataView::AssertValid() const   
{   
    CView::AssertValid();   
}   
   
void CDbDataView::Dump(CDumpContext& dc) const   
{   
    CView::Dump(dc);   
}   
#endif //_DEBUG    
   
/////////////////////////////////////////////////////////////////////////////    
// CDbDataView message handlers    
   
void CDbDataView::OnUpdateIndicatorCRLF(CCmdUI* pCmdUI)   
{   
    pCmdUI->SetText(NULL);   
    pCmdUI->Enable(FALSE);   
}   
   
void CDbDataView::OnUpdateIndicatorOvr(CCmdUI* pCmdUI)   
{   
    pCmdUI->Enable(FALSE);   
}   
   
void CDbDataView::OnSetData(TABLE *table, LPARAM)   
{   
    if (table)   
    {   
        if (m_pTable != table)   
        {   
            m_pTable = table;   
            LoadRecords(m_pTable);   
        }   
    }   
}   
   
void CDbDataView::OnHideGrid(WPARAM, LPARAM)   
{   
    m_pTable = NULL;   
    m_gridCtrl.ShowWindow(SW_HIDE);   
}   
   
int CDbDataView::OnCreate(LPCREATESTRUCT lpCreateStruct)    
{   
    if (CView::OnCreate(lpCreateStruct) == -1)   
        return -1;   
       
    // TODO: Add your specialized creation code here    
    DWORD dwStyle = WS_CHILD | WS_BORDER;   
    m_gridCtrl.Create(CRect(0, 0, 0, 0), this, IDC_GRID_CTRL, dwStyle);   
    m_gridCtrl.SetDoubleBuffering(TRUE);   
   
    return 0;   
}   
   
void CDbDataView::OnDestroy()    
{   
    CView::OnDestroy();   
       
    // TODO: Add your message handler code here    
       
}   
   
void CDbDataView::OnSize(UINT nType, int cx, int cy)    
{   
    CView::OnSize(nType, cx, cy);   
       
    // TODO: Add your message handler code here    
    CRect rcClient;   
    GetClientRect(&rcClient);   
       
    m_gridCtrl.SetWindowPos (&wndTop, rcClient.left, rcClient.top,    
        rcClient.Width(), rcClient.Height(),    
        m_gridCtrl.GetColumnCount() > 0 ? SWP_SHOWWINDOW : SWP_HIDEWINDOW);   
}   
   
void CDbDataView::OnEndLabelEditGridCtrl(NMHDR* pNMHDR, LRESULT* pResult)   
{   
    NM_GRIDVIEW *nmgv = (NM_GRIDVIEW *)pNMHDR;   
   
    // 第0行為固定標題    
    if (m_pTable && nmgv->iRow > 0 && nmgv->iColumn < m_pTable->field_count)   
    {   
        RECORD *record = (RECORD *)m_gridCtrl.GetItemData(nmgv->iRow, 0);   
        if (record == NULL) // 新紀錄    
        {   
            record = (RECORD *)new BYTE[RECORD_HDRSIZE + m_pTable->record_size];   
            // 連入數據庫鏈表    
            if (record)   
            {   
                m_pTable->records = insert_record_link(m_pTable->records, record, NULL);   
                m_gridCtrl.SetItemData(nmgv->iRow, 0, (LPARAM)record);   
                m_pTable->used_rows++;   
                // 插入一條新記錄備用    
                if (m_pTable->used_rows < m_pTable->max_rows)   
                    m_gridCtrl.InsertRow(_T(""));   
            }   
        }   
           
        if (record)   
        {   
            FIELD *f = m_pTable->fields + nmgv->iColumn;   
            BYTE *buff = record->data + f->offset;   
   
            CString strText = m_gridCtrl.GetItemText(nmgv->iRow, nmgv->iColumn);   
            // 檢查缺省值    
            if (f->type == FIELD_TYPE_CHAR && f->count > 1)   
            {   
                char *s = (char *)buff;   
                strncpy(s, strText, f->count);   
            }   
            else if (f->count > 1)   
            {   
                void *ptr = buff;   
                int vcnt = f->count;   
                if (ReadArrayValue(strText, &ptr, &vcnt, f->type) > 0)   
                    MessageBox(_T("不合法的數字數組!"), _T("提示信息"), MB_OK | MB_ICONINFORMATION);   
            }   
            else   
            {   
                if (!IsFitNumber(strText, strText.GetLength()))   
                    MessageBox(_T("不合法的數字!"), _T("提示信息"), MB_OK | MB_ICONINFORMATION);   
                else   
                {   
                    char *szStopped;   
                    ULONG v = StringToULong((char *)(LPCTSTR)strText, &szStopped);   
                    switch (f->type)   
                    {   
                    case FIELD_TYPE_CHAR:   
                    case FIELD_TYPE_BYTE:   
                        *buff = (BYTE)v;   
                        break;   
                    case FIELD_TYPE_SHORT:   
                    case FIELD_TYPE_WORD:   
                        *(WORD *)buff = (WORD)v;   
                        break;   
                    case FIELD_TYPE_INT:   
                    case FIELD_TYPE_UINT:   
                        *(UINT *)buff = (UINT)v;   
                        break;   
                    }   
                }   
            }   
            m_gridCtrl.SetItemText(nmgv->iRow, nmgv->iColumn, GetFieldString(f, buff));   
        }   
    }   
   
    *pResult = 0;   
}   
   
void CDbDataView::OnRclickGridCtrl(NMHDR* pNMHDR, LRESULT* pResult)    
{   
    // TODO: Add your control notification handler code here    
    NM_GRIDVIEW *nmgv = (NM_GRIDVIEW *)pNMHDR;   
   
    POINT ptCursor;   
    ::GetCursorPos(&ptCursor);   
   
    // 彈出菜單    
    CMenu menu, *pSubMenu;   
    int nMenuHeight = GetSystemMetrics(SM_CYMENUSIZE) * 4, cy = GetSystemMetrics(SM_CYSCREEN);   
       
    // Clicking with right button brings up a context menu    
    if (!menu.LoadMenu(IDR_POPUP_DATA))   
        return;   
    if (!(pSubMenu = menu.GetSubMenu(0)))   
        return;   
   
    if (m_gridCtrl.GetItemData(nmgv->iRow, 0) == NULL ||   
        m_pTable->max_rows == 1)   
        pSubMenu->EnableMenuItem(0, MF_BYPOSITION | MF_GRAYED);   
       
    if ((ptCursor.y + nMenuHeight) > cy)   
        ptCursor.y = cy - nMenuHeight - 5;   
       
    // Display and track the popup menu    
    ::TrackPopupMenu(pSubMenu->m_hMenu, 0, ptCursor.x, ptCursor.y, 0,    
                     GetSafeHwnd(), NULL);   
   
    // BUGFIX: See "PRB: Menus for Notification Icons Don't Work Correctly"    
    PostMessage(WM_NULL, 0, 0);   
   
    menu.DestroyMenu();   
       
    *pResult = 0;   
}   
   
void CDbDataView::OnDeleteRecord()    
{   
    // TODO: Add your command handler code here    
    CDbTreeView *pTree = (CDbTreeView *)((CMainFrame *)GetParentFrame())->m_pEditDbView[0];   
    CCellRange cr = m_gridCtrl.GetSelectedCellRange();   
    for (int iRow = cr.GetMinRow(); iRow <= cr.GetMaxRow(); iRow++)   
    {   
        RECORD *record = (RECORD *)m_gridCtrl.GetItemData(iRow, 0);   
        if (record)   
        {   
            m_pTable->records = delete_record_link(m_pTable->records, record);   
            m_pTable->used_rows--;   
            if (pTree->IsPrivateMemory(record))   
                delete record;   
            else   
                m_pTable->deleted = insert_record_link(m_pTable->deleted, record, NULL);   
            m_gridCtrl.DeleteRow(cr.GetMinRow());   
        }   
    }   
}   

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品亚洲精品国产欧美| 精品国产一区二区三区久久影院| 欧美四级电影在线观看| 日韩免费电影网站| 一区二区三区四区激情| 精品一二三四区| 欧美日韩一区二区三区四区| 国产欧美日韩另类视频免费观看| 亚洲电影欧美电影有声小说| eeuss鲁片一区二区三区在线看| 欧美日本一区二区| 亚洲欧美日韩国产成人精品影院| 国产精品一区二区不卡| 精品美女被调教视频大全网站| 亚洲一区二区黄色| 色菇凉天天综合网| 国产精品免费丝袜| 高清不卡一二三区| 久久网站热最新地址| 日韩av成人高清| 欧美日韩你懂得| 一个色妞综合视频在线观看| 成人黄色大片在线观看| 欧美激情一区二区三区不卡| 黑人精品欧美一区二区蜜桃 | 亚洲国产精品久久久男人的天堂 | 经典一区二区三区| 日韩欧美一级精品久久| 日本最新不卡在线| 欧美大片拔萝卜| 国产一区二区三区久久悠悠色av| 欧美大黄免费观看| 国内外成人在线| 国产亚洲成年网址在线观看| 丁香五精品蜜臀久久久久99网站| 2023国产一二三区日本精品2022| 国产精品影音先锋| 中文字幕精品一区二区精品绿巨人| 国产综合成人久久大片91| 久久亚洲私人国产精品va媚药| 国产一区二区三区免费看 | 国产麻豆日韩欧美久久| 久久伊99综合婷婷久久伊| 国产在线视频一区二区| 国产日韩综合av| 99re这里只有精品视频首页| 一区二区在线观看不卡| 欧美色综合网站| 麻豆成人av在线| 久久久久久久久岛国免费| 国产91在线看| 一区二区国产视频| 欧美高清视频不卡网| 精品在线亚洲视频| 国产精品国产a级| 欧美亚州韩日在线看免费版国语版| 无吗不卡中文字幕| 欧美精品一区二区在线播放| 成人动漫av在线| 亚洲成在人线免费| 国产无遮挡一区二区三区毛片日本| 成人av资源在线观看| 亚洲高清免费视频| 久久蜜桃一区二区| 在线一区二区三区| 国产揄拍国内精品对白| 中文字幕亚洲在| 欧美一级日韩免费不卡| 成人看片黄a免费看在线| 亚洲电影你懂得| 欧美高清一级片在线观看| 欧美三级视频在线观看| 国产高清不卡一区二区| 亚洲成人av中文| 国产网红主播福利一区二区| 欧美男女性生活在线直播观看| 国产精品99久久久久久久女警| 亚洲精选免费视频| 久久久精品综合| 91精品啪在线观看国产60岁| 成人精品在线视频观看| 麻豆精品蜜桃视频网站| 亚洲国产一二三| 中文字幕亚洲在| 国产视频一区在线播放| 欧美精品一级二级| 91热门视频在线观看| 高清国产一区二区三区| 老司机精品视频一区二区三区| 亚洲男人的天堂av| 国产欧美综合色| 久久天堂av综合合色蜜桃网 | eeuss鲁片一区二区三区在线观看| 五月天激情小说综合| 亚洲欧美另类久久久精品2019| 久久久久久日产精品| 日韩欧美三级在线| 欧美顶级少妇做爰| 欧美人与禽zozo性伦| 欧美视频在线一区二区三区 | 亚洲高清不卡在线| 一区二区三区中文字幕| 中文字幕日韩一区| 国产精品天天看| 国产欧美日本一区视频| 国产婷婷一区二区| 国产亚洲欧美色| 国产亚洲成av人在线观看导航| 精品国产伦一区二区三区观看体验| 欧美一区二区三区在线观看 | 亚洲国产岛国毛片在线| 精品捆绑美女sm三区| 日韩免费视频一区| 久久午夜国产精品| 国产嫩草影院久久久久| 中文字幕不卡在线观看| 亚洲乱码精品一二三四区日韩在线| 国产精品久久久久婷婷二区次| 中文字幕欧美三区| 国产精品久久久久aaaa| 亚洲色图欧美在线| 亚洲主播在线观看| 日本不卡一区二区三区| 久久99精品网久久| 国产aⅴ综合色| 99re热这里只有精品免费视频| 91视频国产资源| 欧美日韩精品一二三区| 日韩女优电影在线观看| 26uuu国产日韩综合| 欧美国产精品v| 17c精品麻豆一区二区免费| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲综合色噜噜狠狠| 午夜av区久久| 激情五月播播久久久精品| 粉嫩av一区二区三区| 91美女福利视频| 制服丝袜一区二区三区| 久久久美女艺术照精彩视频福利播放| 国产精品网友自拍| 亚洲第一在线综合网站| 国产在线视频一区二区| 91久久精品国产91性色tv| 欧美精三区欧美精三区| 久久久99免费| 亚洲综合一二三区| 国产精品影视在线观看| 精品视频资源站| 国产视频一区在线播放| 亚洲国产精品久久人人爱| 国产精一区二区三区| 在线视频国产一区| 精品日韩一区二区三区免费视频| 国产精品水嫩水嫩| 日韩福利视频网| 99re这里都是精品| 26uuu色噜噜精品一区二区| 亚洲精品国产一区二区精华液| 九色综合狠狠综合久久| 色94色欧美sute亚洲线路一ni| 精品国产乱子伦一区| 亚洲午夜日本在线观看| 国产传媒欧美日韩成人| 91精品视频网| 一区二区三区在线观看国产| 国产麻豆日韩欧美久久| 欧美一区二区视频在线观看2020| 国产精品久久精品日日| 黑人巨大精品欧美一区| 在线播放/欧美激情| 樱花草国产18久久久久| 99免费精品在线观看| 久久综合久久综合亚洲| 免费人成黄页网站在线一区二区 | 国产aⅴ综合色| 精品毛片乱码1区2区3区| 午夜av一区二区| 欧美日韩大陆在线| 一区二区三区视频在线看| 国产91对白在线观看九色| 日韩美女视频在线| 首页亚洲欧美制服丝腿| 在线视频观看一区| 一区二区三区丝袜| 色av成人天堂桃色av| 亚洲女与黑人做爰| 色婷婷综合中文久久一本| 一区二区中文字幕在线| 成人av电影在线网| 国产精品福利一区二区| 国产 日韩 欧美大片| 国产亚洲欧美一区在线观看| 国产福利精品一区二区| 久久伊人蜜桃av一区二区| 国产一区999| 日本一区二区视频在线观看| 国产精品综合二区| 中文字幕高清不卡| 色综合天天综合网天天看片|