MS Flex Grid控件的使用(续二)

原创 2001年08月24日 12:38:00

下面我把CGrid的内容和对CGrid的使用转贴一下,该文的原文件来自于
www.vchelp.net上的flex_grid_src.zip文件。对CGrid的使用进行了一下修改,
由于不知道原作者,望见量。

其中CGrid.h和CGrid.cpp是对CFlexGrid的封装,CDlgUserManger是使用CGrid

/****************CGrid.h**************************/

// Grid.h: interface for the CGrid class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GRID_H__91679B43_6C53_11D3_BEF7_00C04F755C52__INCLUDED_)
#define AFX_GRID_H__91679B43_6C53_11D3_BEF7_00C04F755C52__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "msflexgrid.h"


class CGrid : public CMSFlexGrid
{
public:
 CGrid();
 virtual ~CGrid();
  
public :
 
 BOOL GoRight();
 BOOL GoLeft();
 BOOL GoDown();
 BOOL GoUp();
 OnKeyPressGrid(short FAR* KeyAscii) ;
 OnClickGrid();
 void OnEnterCell();
private :
 CString m_GridData;
 BOOL bEditMode;
 BOOL TransferValue (BOOL ToGrid);
};

#endif // !defined(AFX_GRID_H__91679B43_6C53_11D3_BEF7_00C04F755C52__INCLUDED_)


/****************CGrid.cpp**********************/
#include "stdafx.h"
#include "grid.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGrid ::CGrid()
{
 
 
}


CGrid ::~CGrid()
{

}


BOOL CGrid ::GoUp()
 
{
 
 TransferValue(TRUE);
 if (GetRow () > 1 ) {
  int CurrentRow = GetRow();
  CurrentRow --;
  SetRow (CurrentRow );
  TransferValue (FALSE);
  if (! GetRowIsVisible (CurrentRow))
            SetTopRow (CurrentRow  );

 }
 return TRUE;


}


BOOL CGrid ::GoDown()
{
 
 TransferValue(TRUE);
 if ( GetRow () < GetRows () -1) {
  int CurrentRow = GetRow();
  CurrentRow ++;
  SetRow ( CurrentRow);
  TransferValue (FALSE);
  if (! GetRowIsVisible (CurrentRow))
            SetTopRow (CurrentRow );
 }


 return TRUE;

}


BOOL CGrid ::GoLeft()
{
 
 TransferValue(TRUE);
 if ( GetCol () > 1 ) {
  int CurrentCol = GetCol();
  CurrentCol --;
  SetCol (CurrentCol);
  TransferValue (FALSE);
  if (!GetColIsVisible (CurrentCol))
    SetLeftCol (CurrentCol);
 }
 return TRUE;


}


BOOL CGrid ::GoRight()
{
 
 TransferValue(TRUE);
 if ( GetCol () < GetCols() - 1 ) {
  int CurrentCol = GetCol ();
  CurrentCol++;
  SetCol (CurrentCol);
  TransferValue (FALSE);
  if (!GetColIsVisible (CurrentCol))
    SetLeftCol (CurrentCol);
  
 }
 
 return TRUE;
}

 

BOOL CGrid ::TransferValue(BOOL ToGrid)
{
 CString sText;

 if (ToGrid) { file://Transfer value to Grid from Edit Box
  SetText(m_GridData  );
 } else {
  m_GridData  = GetText ();
  SetBackColorSel  (RGB(0,255,255));
 }
 return TRUE;
}

 

BOOL CGrid ::OnKeyPressGrid(short FAR* KeyAscii)
{

    switch ( (int) * KeyAscii) {

   case  VK_BACK : file://Backspace - delete the last character
      m_GridData.Delete  (m_GridData.GetLength ()-1,1);
            break;
   default :
      m_GridData = m_GridData + (TCHAR *) KeyAscii;
         break;
    }
    TransferValue (TRUE);
}


CGrid ::OnClickGrid()
{

 TransferValue (FALSE);
 
}


void CGrid::OnEnterCell()
{
 TransferValue (FALSE);
}

/*********************对CGrid的使用*********************/
/****************CDlgUserManager.cpp********************/
// DlgUserManager.cpp : implementation file


#include "stdafx.h"
#include "DlgUserManager.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgUserManager dialog


CDlgUserManager::CDlgUserManager(CWnd* pParent /*=NULL*/)
 : CDialog(CDlgUserManager::IDD, pParent)
{
 file://{{AFX_DATA_INIT(CDlgUserManager)
 file://}}AFX_DATA_INIT

}


void CDlgUserManager::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 file://{{AFX_DATA_MAP(CDlgUserManager)
 DDX_Control(pDX, IDC_USER_MANAGER_GRID, m_grid);
 file://}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgUserManager, CDialog)
 file://{{AFX_MSG_MAP(CDlgUserManager)
 ON_WM_DESTROY()
 ON_WM_CREATE()
 file://}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgUserManager message handlers

BOOL CDlgUserManager::OnInitDialog()
{
 CDialog::OnInitDialog();

 CWnd * hwnd = GetDlgItem (IDC_USER_MANAGER_GRID);
 hGrid = hwnd->GetSafeHwnd();


 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}


BEGIN_EVENTSINK_MAP(CDlgUserManager, CDialog)
    file://{{AFX_EVENTSINK_MAP(CDlgUserManager)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -600 /* Click */, OnClickUserManagerGrid, VTS_NONE)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -601 /* DblClick */, OnDblClickUserManagerGrid, VTS_NONE)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -602 /* KeyDown */, OnKeyDownUserManagerGrid, VTS_PI2 VTS_I2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, 74 /* Compare */, OnCompareUserManagerGrid, VTS_I4 VTS_I4 VTS_PI2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -603 /* KeyPress */, OnKeyPressUserManagerGrid, VTS_PI2)
 ON_EVENT(CDlgUserManager, IDC_USER_MANAGER_GRID, -605 /* MouseDown */, OnMouseDownUserManagerGrid, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
 file://}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CDlgUserManager::OnClickUserManagerGrid()
{
 // TODO: Add your control notification handler code here
  m_grid.OnClickGrid ();
}

void CDlgUserManager::OnDblClickUserManagerGrid()
{
 // TODO: Add your control notification handler code here
 m_grid.OnClickGrid ();
 
}

void CDlgUserManager::OnKeyPressUserManagerGrid(short FAR* KeyAscii)
{
 // TODO: Add your control notification handler code here
 m_grid.OnKeyPressGrid ( KeyAscii);
 
}


BOOL CDlgUserManager::PreTranslateMessage(MSG* pMsg)
{
 // TODO: Add your specialized code here and/or call the base class
 if (pMsg->message == WM_KEYDOWN  && (pMsg->hwnd == hGrid  ) ) {
 
  switch (pMsg->wParam ) {

        case VK_UP :
   m_grid.GoUp ();
   return TRUE;
   
  case VK_DOWN:
   m_grid.GoDown();
   return TRUE;
   
  case VK_LEFT :
   m_grid.GoLeft();
   return TRUE;
   
  case VK_RIGHT:
   m_grid.GoRight();
   return TRUE;
   
  }
  
   
 }  

 return CDialog::PreTranslateMessage(pMsg);
}


void CDlgUserManager::OnOK()
{
  
 try{
  file://delete all records of users
  _variant_t vRecsAffected(0L);


  _bstr_t bstrDelete("Delete from 3pw");
  (((CSltg2001App *)AfxGetApp())->m_SltgDbConn)->Execute(bstrDelete,&vRecsAffected,adOptionUnspecified);

  _bstr_t bstrInsert;
  CString strUser,strPasswd;
  for(int i=1;i<m_grid.GetRows();i++){
   strUser=m_grid.GetTextMatrix(i,1);
   if(strUser=="") continue;
   strPasswd=m_grid.GetTextMatrix(i,2);
   if(strPasswd.IsEmpty())
    strPasswd="";
   bstrInsert= ("insert into 3PW (用户名,密码) values ('" + _bstr_t((LPCTSTR)(strUser)) + _bstr_t("'")+_bstr_t(_T(","))+_bstr_t("'") + _bstr_t((LPCTSTR)(strPasswd)) + _bstr_t("'")+_bstr_t(")") );
   (((CSltg2001App *)AfxGetApp())->m_SltgDbConn)->Execute(bstrInsert,&vRecsAffected,adOptionUnspecified);
   
  }
  
  
 }
 
 catch(_com_error e){
  CString sError=e.ErrorMessage();
  AfxMessageBox(sError);
 }
 catch(...){
  AfxMessageBox("不能处理的错误");
 }
 
 
 CDialog::OnOK();
}
主要是增加了几个消息处理函数。
OnClickUserManagerGrid
OnDblClickUserManagerGrid
OnKeyDownUserManagerGrid
OnKeyPressUserManagerGrid
PreTranslateMessage
其中主要是PreTranslateMessage
最后的OnOK()函数是具体连接数据库,并把网格中的数据存到数据库中。
希望上面的内容能对大家有益。

。。。。。。。待续。。。。。。。。。。。。。。


 

VS中添加MS Flex Grid控件

在VS2008中遇到的问题:         当我从“项目”--“添加类”---“MFC”--- “MFC Class From ActiveX Control”--在“从以下来源添加类”中选择“注册...
  • u011544943
  • u011544943
  • 2013年07月29日 19:13
  • 1733

MS Flex Grid控件的使用(续三)

MS Flex Grid控件对于复杂的Cell内容表示就很困难了。在www.vchelp.net上有一个程序,是将一个列的cell作成了CheckBox。我们可以将Grid的一列的输入加入录入参照,就...
  • funone
  • funone
  • 2001年08月27日 10:18
  • 681

MS Flex Grid控件的使用(续一)

更正::: 上篇文章中的网址www.vchelp.com应该更改为www.vchelp.net.     首先在控件的属性,设置固定行数和列数,一般都是一。然后定义网格控件。     令CGrid m...
  • funone
  • funone
  • 2001年08月24日 10:29
  • 1025

MS Flex Grid控件的使用

       MS Flex Grid控件是微软的一个网格控件,可以用于显示数据库中的信息,对于一些比较简单的显示方式,还是比较方便的。    加入MS Flex Grid控件控件的方法:      ...
  • funone
  • funone
  • 2001年08月24日 10:13
  • 1962

Flex mx:Grid的调整心得

主程序代码
  • Qiustion
  • Qiustion
  • 2014年04月04日 18:10
  • 2129

FLEXGRID控件的使用方法(转载MSTOP (陈建华) )

下面我给大家讲一下MSHFLEXGRID常用的属性,方法事件,还有一些不能不知道的技巧.1)  MSHFLEXGRID的重要属性.MSHFLEXGRID的属性非常多,其实绝大部分的属性和网格的显示的外...
  • wangtopcool
  • wangtopcool
  • 2006年05月10日 14:21
  • 5315

FlexGrid控件排序方法

    首先,指定针对哪一行进行排序;然后设置排序方法即可,1为升序,2为降序。需要注意的是,如果数据量很大,排序之前可以先将FlexGrid控件设置为不可见,排序结束后再恢复为可见;或者SetRed...
  • zzpzheng
  • zzpzheng
  • 2006年03月08日 17:38
  • 3298

全新 FlexGrid 功能演示 Demo 正式上线

日前,全新FlexGrid功能演示Demo正式上线。新Demo包含了FlexGrid几个常用的功能:分组、滚动、冻结、自定义单元格类型、搜索面板、表格过滤器、树形结构、合并单元等。...
  • sinat_35256924
  • sinat_35256924
  • 2017年06月01日 11:18
  • 993

MFC FlexGrid控件的使用示例

MFC FlexGrid控件的使用 一、创建一个FlexGrid            二、为FlexGrid绑定一个变量              三、编写代码设置属性   ...
  • u013329580
  • u013329580
  • 2015年10月14日 09:54
  • 1880

Grid控件使用示例

  • dszgf5717
  • dszgf5717
  • 2013年08月11日 21:50
  • 681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MS Flex Grid控件的使用(续二)
举报原因:
原因补充:

(最多只允许输入30个字)