Ultimate Grid 支持很多种单元格类型,比如下拉列表、多选按钮、微调按钮、单选按钮等等。如果没有您所需要的标准单元格类型,自定义单元格类型也很容易。

下拉列表、多选按钮等类型的单元格是内嵌的,而要添加非内嵌类型单元格需要调用CUGCtrl::AddCellType() 。

第1步 添加2个文件到项目

把 Ultimate Grid 源代码压缩包里面的CellTypes目录拷贝到D:\UG下

目录情况如下图:

接着再把CellTypes目录下的UGCTSpin.cpp文件添加到"Ultimate Grid"目录下,如下图:

项目“Addtional include directories:”处参数修改成“.\,..\include,..\skel,..\CellTypes”,如下图:

第2步 创建一个单元格类型对象

在MyCug.h头文件中包含UGCTSpin.h文件,再创建一个在MyCug类中类型为CUGSpinButtonType的public成员变量m_spin,代码如下:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "ugctrl.h"

//******* Add the New Header File
#include "UGCTSpin.h"

class MyCug: public CUGCtrl
{

public:

    
//****** Create the New Object
    CUGSpinButtonType m_spin;

第3步 在表格中添加2个类型的单元格

修改MyCug::OnSetup函数如下代码:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void MyCug::OnSetup()
{
    
//******* Declare all variables
    int index , num_cols, num_rows;
    CUGCell cell;
    CString heading, number;

    
//******* Enable the Menu
    EnableMenu(TRUE);

    
//****** Set the Rows and Columns
    SetNumberCols(10);
    SetNumberRows(
10);

    
//******* Get the number of Rows and Columns
    num_rows = GetNumberRows();
    num_cols = GetNumberCols();

    
//******* Add the Top Heading
    for (index = 0; index < num_rows; index++)
    {
        heading.Format(
"%d", index + 1);
        QuickSetText(-
1, index, heading);
        QuickSetAlignment(-
1, index, UG_ALIGNVCENTER );
    }

    
//******* Add the Side Heading
    for (index = 0; index < num_cols; index++)
    {
        heading.Format(
"%d", index + 1);
        QuickSetText(index, -
1, heading);
        QuickSetAlignment(index, -
1, UG_ALIGNVCENTER );
    }

    
//****** Populate the grid
    for (int x = 0; x < num_cols; x++)
    {
        
for(int z = 0; z < num_rows; z++)
        {
            number.Format(
"%d", ((x + 1) * (z + 1)));
            QuickSetText(x, z, number);
            QuickSetAlignment(x, z, UG_ALIGNVCENTER );
        }
    }

    
//****** Set the Spin Button cell type
    int cell_index = AddCellType(&m_spin);
    GetCell(
00, &cell);
    cell.SetCellType(cell_index);
    SetCell(
00, &cell);

    
//***** Set the Droplist cell type
    GetCell(22, &cell);
    cell.SetCellType(UGCT_DROPLIST);
    cell.SetLabelText(
"Sunday\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaterday\n");
    SetCell(
22, &cell);
}

第4步 修改MyCug::OnCellTypeNotify()函数

当用户点击微调按钮或下拉列表按钮时系统会调用MyCug::OnCellTypeNotify()函数。微调按钮有上下两个箭头,用户点击上箭头时,单元格内的数值会增加0.25,反之减少0.25。代码如下图:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int MyCug::OnCellTypeNotify(long ID,int col,long row,long msg,long param)
{
    UNREFERENCED_PARAMETER(ID);
    UNREFERENCED_PARAMETER(col);
    UNREFERENCED_PARAMETER(row);
    UNREFERENCED_PARAMETER(msg);
    UNREFERENCED_PARAMETER(param);

    
//****** Declare a CUGCell object
    CUGCell cell;

    
if (ID == 4 && msg == UGCT_SPINBUTTONUP)
    {
        
double number, newnumber;

        GetCell(col, row, &cell);
        number = cell.GetNumber();
        newnumber = number + 
0.25;
        cell.SetNumber(newnumber);
        SetCell(col, row, &cell);
    }

    
if (ID == 4 && msg == UGCT_SPINBUTTONDOWN)
    {
        
double number;

        GetCell(col, row, &cell);
        number = cell.GetNumber();
        number = number - 
0.25;
        cell.SetNumber(number);
        SetCell(col, row, &cell);
    }
    
    
return TRUE;
}

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐