gridview.c

来自「linux下的开发库minigui的演示程序1.6.9」· C语言 代码 · 共 324 行

C
324
字号
/* * ** $Id: gridview.c,v 1.3.6.2 2006/06/28 07:21:40 xwyan Exp $ * ** * ** gridview.c: Sample program for MiniGUI Programming Guide * **      Usage of GRID control. * ** * ** Copyright (C) 2004 ~ 2006 Feynman Software. * ** * ** License: GPL * */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/stat.h>#include <sys/types.h>#include <minigui/common.h>#include <minigui/minigui.h>#ifdef _EXT_CTRL_GRIDVIEW#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/control.h>#include <minigui/mgext.h>int ww = 800;int wh = 600;enum {    IDC_GRIDVIEW,};static HWND hGVWnd;static char* colnames[] = {"语文", "数学", "英语", "总分"};static char* scores[] = {"小明", "小强","小亮", "小力", "平均分"};int total(GRIDCELLS* target, GRIDCELLS* source, DWORD dwAddData){    int i, j;    double value = 0;    GRIDCELLDATA data;    GRIDCELLS cells;    GRIDCELLDATANUMBER num;    memset(&data, 0, sizeof(data));    memset(&num, 0, sizeof(num));    data.mask = GVITEM_MAINCONTENT|GVITEM_STYLE;    data.content = &num;    data.style = GV_TYPE_NUMBER;    cells.width = 1;    cells.height = 1;    for(i = 0; i<source->width; i++)    {        cells.column = source->column + i;        for (j = 0; j<source->height; j++)        {            cells.row = source->row + j;            SendMessage(hGVWnd, GRIDM_GETCELLPROPERTY, (WPARAM)&cells, (LPARAM)&data);            value += num.number;        }    }    num.number = value;    num.len_format = -1;    cells.row = target->row;    cells.column = target->column;    SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cells, (LPARAM)&data);        return 0;}int averge(GRIDCELLS* target, GRIDCELLS* source, DWORD dwAddData){    int i, j;    int count = 0;    double value = 0;    GRIDCELLDATA data;    GRIDCELLS cells;    GRIDCELLDATANUMBER num;    memset(&data, 0, sizeof(data));    memset(&num, 0, sizeof(num));    data.content = &num;    data.style = GV_TYPE_NUMBER;    cells.width = 1;    cells.height = 1;    for(i = 0; i<source->width; i++)    {        cells.column = source->column + i;        for (j = 0; j<source->height; j++)        {            data.content = &num;            data.style = GV_TYPE_NUMBER;            cells.row = source->row + j;            SendMessage(hGVWnd, GRIDM_GETCELLPROPERTY, (WPARAM)&cells, (LPARAM)&data);            value += num.number;            count++;        }    }    data.mask = GVITEM_MAINCONTENT;    num.number = value/count;    cells.row = target->row;    cells.column = target->column;    SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cells, (LPARAM)&data);        return 0;}static intControlTestWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){    switch (message)    {        case MSG_CREATE:            {                int i;                GRIDCELLS cellsel;                GRIDCELLDEPENDENCE dep;                GRIDCELLDATA celldata;                GRIDCELLDATAHEADER header;                GRIDCELLDATANUMBER cellnum;                GRIDVIEWDATA gvdata;                gvdata.nr_rows = 4;                gvdata.nr_cols = 3;                gvdata.row_height = 20;                gvdata.col_width  = 60;                hGVWnd = CreateWindowEx (CTRL_GRIDVIEW, "Grid View",                                           WS_CHILD | WS_VISIBLE | WS_VSCROLL |                                           WS_HSCROLL | WS_BORDER, WS_EX_NONE, IDC_GRIDVIEW, 20, 20, 600,                                           300, hWnd, (DWORD)&gvdata);                memset(&header, 0, sizeof(header));                memset(&celldata, 0, sizeof(celldata));                //设置列表头的属性                for (i = 1; i<= 3; i++)                {                    header.buff = colnames[i-1];                    header.len_buff = -1;                    celldata.content = &header;                    celldata.mask = GVITEM_MAINCONTENT;                    celldata.style = GV_TYPE_HEADER;                    cellsel.row = 0;                    cellsel.column = i;                    cellsel.width = 1;                    cellsel.height = 1;                    SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cellsel, (LPARAM)&celldata);                }                //设置行表头的属性                memset(&header, 0, sizeof(header));                memset(&celldata, 0, sizeof(celldata));                for (i = 1; i<= 4; i++)                {                    header.buff =  scores[i-1];                    celldata.content = &header;                    celldata.mask = GVITEM_MAINCONTENT;                    celldata.style = GV_TYPE_HEADER;                    cellsel.row = i;                    cellsel.column = 0;                    cellsel.width = 1;                    cellsel.height = 1;                    SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cellsel, (LPARAM)&celldata);                }                //设置单元格的属性                memset(&celldata, 0, sizeof(celldata));                memset(&cellnum, 0, sizeof(cellnum));                cellnum.number = 50;                cellnum.format = NULL;                celldata.content = &cellnum;                celldata.mask = GVITEM_MAINCONTENT;                celldata.style = GV_TYPE_NUMBER;                cellsel.row = 1;                cellsel.column = 1;                cellsel.width = 3;                cellsel.height = 4;                SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cellsel, (LPARAM)&celldata);                                //增加一列的操作                memset(&header, 0, sizeof(header));                memset(&celldata, 0, sizeof(celldata));                header.buff = "总分";                header.size = -1;                celldata.mask = GVITEM_MAINCONTENT;                celldata.content = &header;                celldata.style = GV_TYPE_HEADER;                SendMessage(hGVWnd, GRIDM_ADDCOLUMN, 3, (LPARAM)&celldata);                //增加一行的操作                memset(&header, 0, sizeof(header));                memset(&celldata, 0, sizeof(celldata));                header.buff = "平均分";                header.size = -1;                celldata.mask = GVITEM_MAINCONTENT;                celldata.content = &header;                celldata.style = GV_TYPE_HEADER;                SendMessage(hGVWnd, GRIDM_ADDROW, 4, (LPARAM)&celldata);                memset(&celldata, 0, sizeof(celldata));                memset(&cellnum, 0, sizeof(cellnum));                cellnum.number = 0;                cellnum.format = NULL;                celldata.content = &cellnum;                celldata.mask = GVITEM_MAINCONTENT;                celldata.style = GV_TYPE_NUMBER;                cellsel.row = 1;                cellsel.column = 4;                cellsel.width = 1;                cellsel.height = 4;                SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cellsel, (LPARAM)&celldata);                cellsel.row = 5;                cellsel.column = 1;                cellsel.width = 4;                cellsel.height = 1;                SendMessage(hGVWnd, GRIDM_SETCELLPROPERTY, (WPARAM)&cellsel, (LPARAM)&celldata);                // 给这个单元格设置求和函数.                memset(&dep, 0, sizeof(dep));                dep.callback = total;                for (i = 1; i<= 4; i++)                {                    dep.source.row = i;                    dep.source.column = 1;                    dep.source.width = 3;                    dep.source.height = 1;                    dep.target.row = i;                    dep.target.column = 4;                    dep.target.width = 1;                    dep.target.height = 1;                    SendMessage(hGVWnd, GRIDM_ADDDEPENDENCE, 0, (LPARAM)&dep);                }                dep.callback = averge;                // 给这个单元格设置求平均值函数.                for (i = 1; i<= 4; i++)                {                    dep.source.row = 1;                    dep.source.column = i;                    dep.source.width = 1;                    dep.source.height = 4;                    dep.target.row = 5;                    dep.target.column = i;                    dep.target.width = 1;                    dep.target.height = 1;                    SendMessage(hGVWnd, GRIDM_ADDDEPENDENCE, 0, (LPARAM)&dep);                }                return 0;            }        case MSG_COMMAND:            break;        case MSG_CLOSE:            DestroyMainWindow (hWnd);            MainWindowCleanup (hWnd);            return 0;                }    return DefaultMainWinProc (hWnd, message, wParam, lParam);}int MiniGUIMain (int argc, const char* argv[]){    MSG Msg;    HWND hMainWnd;    MAINWINCREATE CreateInfo;#ifdef _LITE_VERSION    SetDesktopRect(0, 0, 1024, 768);#endif    if (!InitMiniGUIExt()) {        return 2;    }    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;    CreateInfo.dwExStyle = WS_EX_NONE;    CreateInfo.spCaption = "GridView Controler";    CreateInfo.hMenu = 0;    CreateInfo.hCursor = GetSystemCursor(0);    CreateInfo.hIcon = 0;    CreateInfo.MainWindowProc = ControlTestWinProc;    CreateInfo.lx = 0;    CreateInfo.ty = 0;    CreateInfo.rx = ww;    CreateInfo.by = wh;    CreateInfo.iBkColor = COLOR_lightwhite;    CreateInfo.dwAddData = 0;    CreateInfo.hHosting = HWND_DESKTOP;        hMainWnd = CreateMainWindow (&CreateInfo);        if (hMainWnd == HWND_INVALID)        return -1;    ShowWindow(hMainWnd, SW_SHOWNORMAL);    while (GetMessage(&Msg, hMainWnd)) {        TranslateMessage(&Msg);        DispatchMessage(&Msg);    }    MainWindowThreadCleanup (hMainWnd);    MiniGUIExtCleanUp ();    return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif#elseint MiniGUIMain (int argc, const char* argv[]){    return 0;}#endif /*_EXT_CTRL_GRIDVIEW*/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?