GridCtrl學習筆記(1)建立使用GridCtrl的工程


1、同事給的和我在網上找的開源代碼是一樣的。
(我http://www.codeproject.com/KB/miscctrl/gridctrl.aspx下載Keith Rule的源碼,包括他的實例源碼
2、關於以下兩個寫法:
DDX_GridControl(pDX, IDC_GRIDCTRL, m_pGrid);//推薦
DDX_Control(pDX, IDC_GRIDCTRL, m_pGrid);
Grid的基本類是源於CWnd的CgridCtrl。為了使用它,你可以使用微軟的 VC++的對話框編輯器,把一個普通的控件放在對話框上,並且輸入"MFCGridCtrl"(不包括引號)作為類名。Grid的子類使用DDX機制(可以通過ClassWizard來進行默認設置),使用DDX_GridControl函數代替DDX_Control(可以通過手動設置 ClassWizard的輸入來實現)。這些保證你的控件作為一個注冊對象而不會產生一些莫名其妙的WIN95問題。
3、建立工程步驟:
(1)在rc中選擇並添加custom control控件;
一定要把Class設置為MFCGridCtrl哦;

(2)在Dlg.h中做聲明:
// GridControlTest02Dlg.h : header file
//
 
#pragma once
#include "GridCtrl_src/GridCtrl.h"
class CGridControlTest02DlgAutoProxy;
 
 
// CGridControlTest02Dlg dialog
class CGridControlTest02Dlg : public CDialogEx
{
    DECLARE_DYNAMIC(CGridControlTest02Dlg);
    friend class CGridControlTest02DlgAutoProxy;
 
// Construction
public:
    CGridControlTest02Dlg(CWnd* pParent = NULL);    // standard constructor
    virtual ~CGridControlTest02Dlg();
    CGridCtrl m_pGrid;
    void GridCtrlInit();
 
// Dialog Data
    enum { IDD = IDD_GRIDCONTROLTEST02_DIALOG };
 
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
(3)在Dlg.cpp中做聲明及添加初始化函數:
要注意了哦:要把聲明放在對應的class里,我一開始放錯了class,編譯時無法通過,TAT,都是淚。
void CGridControlTest02Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
     DDX_GridControl(pDX, IDC_GRIDCTRL, m_pGrid);
}
BOOL CGridControlTest02Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    // Add "About..." menu item to system menu.
 
    // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
 
    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }
 
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);            // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
 
    ShowWindow(SW_MINIMIZE);
 
    // TODO: Add extra initialization here
     GridCtrlInit();
 
    return TRUE;  // return TRUE  unless you set the focus to a control
}
 
  1. voidCGridControlTest04Dlg::GridCtrlInit()
  2. {
  3. m_pGrid.SetEditable(true);
  4. m_pGrid.SetTextBkColor(RGB(0xFF,0xFF,0xE0));//黃色背景
  5. m_pGrid.SetRowCount(101);//初始為100行
  6. m_pGrid.SetColumnCount(26);//初始化為25列
  7. m_pGrid.SetFixedRowCount(1);//表頭為一行
  8. m_pGrid.SetFixedColumnCount(1);//表頭為一列
  9. for(int row =0; row < m_pGrid.GetRowCount(); row++)
  10. for(int col =0; col < m_pGrid.GetColumnCount(); col++)
  11. {
  12. //設置表格顯示屬性
  13. GV_ITEM Item;
  14. Item.mask = GVIF_TEXT|GVIF_FORMAT;
  15. Item.row = row;
  16. Item.col = col;
  17. m_pGrid.SetRowHeight(row,25);//設置各行高
  18. m_pGrid.SetColumnWidth(0,64);//設置0列寬
  19. m_pGrid.SetColumnWidth(col,64);//設置各列寬
  20. if(row==0&&col==0)//第(0,0)格
  21. {
  22. Item.nFormat = DT_CENTER|DT_WORDBREAK;
  23. Item.strText.Format(_T("報表顯示"),col);
  24. }
  25. elseif(row <1)//設置0行表頭顯示
  26. {
  27. Item.nFormat = DT_CENTER|DT_WORDBREAK;
  28. Item.strText.Format(_T(" 項目%d"),col);
  29. }
  30. elseif(col <1)//設置0列表頭顯示
  31. {
  32. if(row< m_pGrid.GetRowCount())
  33. {
  34. Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
  35. Item.strText.Format(_T("第%d次"),row);
  36. }
  37. }
  38. else
  39. {
  40. Item.nFormat = DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
  41. Item.strText.Format(_T(""),2);
  42. }
  43. m_pGrid.SetItem(&Item);
  44. }
  45. }
 
 
 
(4)把源碼整個文件夾復制到 E:\LHL\Work\ProjectsDebug\SE\Visual Studio 2010\Projects\GridControlTest02\GridControlTest02
然后建立文件夾存放cpp及h文件

解釋:

gridctrl.cpp, gridctrl.h Grid控件資源文件和頭文件

gridcellbase.cpp, gridcellbase.h 單元格的基礎類

gridcell.cpp, gridcell.h 單元格的默認執行文件

CellRange.h CcellID和CcellRange類的定義

MemDC.h Keith Rule's的直接存儲類

InPlaceEdit.cpp, InPlaceEdit.h 定位編輯窗口的源文件和頭文件

GridDropTarget.cpp, GridDropTarget.h Grid容器的drag和drop對象 只有在gridctrl.h中沒有定義 GRIDCONTROL_NO_DRAGDROP的時候才有必要使用。

Titletip.cpp, Titletip.h 從Zafir Anjum那里的到的單元格標題提示. 只有在gridctrl.h中沒有定義 GRIDCONTROL_NO_TITLETIPS 的時候才有必要使用

(5)運行結果如下:

 
 
 
 
 
 
 

附件列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM