Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Win 32 Application создать Grid / 23 сообщений из 23, страница 1 из 1
30.01.2016, 02:18
    #39159074
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
[spoiler Grid в Win 32 Application]
Код: plaintext
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.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
[SIZE=3]Кто-нить пробовал ?[/SIZE]

Итак нам нужны классы для того что бы использовать DBGRID в проекте. Их нужно три класса.
 
Где их взять? При добавлении элемента OCX в проект они автоматически создаются как в шаге "Шаг 362 - DBGrid иVC устанавливаем на диалог". Вам нужно добавить в проект эти файлы. Если вам лень грузите из из проекта на сайте. Кстати там будет и OCX файл на всякий случай. Ну все можно создавать проект. В класс вида включить ссылку на класс GRID.
#endif // _MSC_VER > 1000
#include "msdgridctrl.h"

class CTestViewGridView : public Cview
......
Объявить переменную типа CMsDgridCtrl.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)

// Attributes
public:
	CTestViewGridDoc* GetDocument();

private:
	CMsDgridCtrl cmg;
// Operations
public:
........
};
В момент создания окна создается и GRID.
////////////////////////////////////
// CTestViewGridView message handlers

int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rc;
	GetClientRect(&rc);
	cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, 1234);
	cmg.ShowWindow(SW_SHOW); 
	return 0;
}
В момент изменения размеров меняется и GRID:
void CTestViewGridView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	cmg.MoveWindow(CRect(0,0,cx, cy)); 
}
А вот так выглядит наше приложение.
 


В прошлом шаге мы вставили класс GRID в вид, нам нужно обрабатывать события и AppWizard здесь не помощник будем делать ручками. Объявляем в классе вида что у нас будут извещения.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
	CTestViewGridDoc* GetDocument();

private:
	CMsDgridCtrl cmg;
// Operations
......
};
Реализуем эту таблицу обработки извещений.
BEGIN_EVENTSINK_MAP(CTestViewGridView, CView)
  	ON_EVENT(CMsDgridCtrl, IDC_DBGRID1, -602 /* KeyDown */, OnKeyDownDbgrid1, VTS_PI2 VTS_I2)
END_EVENTSINK_MAP()
Первый параметр это класс, второй идентификатор элемента, его нужно использовать в Create.
int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rc;
	GetClientRect(&rc);
	cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, IDC_DBGRID1);
	cmg.ShowWindow(SW_SHOW); 
	return 0;
}
Дальше идет номер метода, откуда его брать. Проше всего сделать как в "Шаг 363 - Обработка событий DBGRID в VC", получить эту строку и перенести в проект класса с видом. Вообщем передрать можно все кстати и описание функции реакции.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
......
public:
	afx_msg void OnKeyDownDbgrid1(short FAR* KeyCode, short Shift);
	virtual ~CTestViewGridView();
#ifdef _DEBUG
};

Ну и реализовать саму функцию
void CTestViewGridView::OnKeyDownDbgrid1(short FAR* KeyCode, short Shift)
{
	AfxMessageBox("OK");
}
Запускаем и смотрим:
 


[/poiler/]
...
Рейтинг: 0 / 0
30.01.2016, 02:19
    #39159075
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Grid в Win 32 Application
Код: plaintext
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.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
[SIZE=3]Кто-нить пробовал ?[/SIZE]

Итак нам нужны классы для того что бы использовать DBGRID в проекте. Их нужно три класса.
 
Где их взять? При добавлении элемента OCX в проект они автоматически создаются как в шаге "Шаг 362 - DBGrid иVC устанавливаем на диалог". Вам нужно добавить в проект эти файлы. Если вам лень грузите из из проекта на сайте. Кстати там будет и OCX файл на всякий случай. Ну все можно создавать проект. В класс вида включить ссылку на класс GRID.
#endif // _MSC_VER > 1000
#include "msdgridctrl.h"

class CTestViewGridView : public Cview
......
Объявить переменную типа CMsDgridCtrl.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)

// Attributes
public:
	CTestViewGridDoc* GetDocument();

private:
	CMsDgridCtrl cmg;
// Operations
public:
........
};
В момент создания окна создается и GRID.
////////////////////////////////////
// CTestViewGridView message handlers

int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rc;
	GetClientRect(&rc);
	cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, 1234);
	cmg.ShowWindow(SW_SHOW); 
	return 0;
}
В момент изменения размеров меняется и GRID:
void CTestViewGridView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	cmg.MoveWindow(CRect(0,0,cx, cy)); 
}
А вот так выглядит наше приложение.
 


В прошлом шаге мы вставили класс GRID в вид, нам нужно обрабатывать события и AppWizard здесь не помощник будем делать ручками. Объявляем в классе вида что у нас будут извещения.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
	CTestViewGridDoc* GetDocument();

private:
	CMsDgridCtrl cmg;
// Operations
......
};
Реализуем эту таблицу обработки извещений.
BEGIN_EVENTSINK_MAP(CTestViewGridView, CView)
  	ON_EVENT(CMsDgridCtrl, IDC_DBGRID1, -602 /* KeyDown */, OnKeyDownDbgrid1, VTS_PI2 VTS_I2)
END_EVENTSINK_MAP()
Первый параметр это класс, второй идентификатор элемента, его нужно использовать в Create.
int CTestViewGridView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CRect rc;
	GetClientRect(&rc);
	cmg.Create(_T("STATIC"), "Hi", WS_CHILD | WS_VISIBLE, CRect(0, 0, 400, 200), this, IDC_DBGRID1);
	cmg.ShowWindow(SW_SHOW); 
	return 0;
}
Дальше идет номер метода, откуда его брать. Проше всего сделать как в "Шаг 363 - Обработка событий DBGRID в VC", получить эту строку и перенести в проект класса с видом. Вообщем передрать можно все кстати и описание функции реакции.
class CTestViewGridView : public CView
{
protected: // create from serialization only
	CTestViewGridView();
	DECLARE_DYNCREATE(CTestViewGridView)
	DECLARE_EVENTSINK_MAP()
// Attributes
public:
......
public:
	afx_msg void OnKeyDownDbgrid1(short FAR* KeyCode, short Shift);
	virtual ~CTestViewGridView();
#ifdef _DEBUG
};

Ну и реализовать саму функцию
void CTestViewGridView::OnKeyDownDbgrid1(short FAR* KeyCode, short Shift)
{
	AfxMessageBox("OK");
}
Запускаем и смотрим:
 


...
Рейтинг: 0 / 0
30.01.2016, 09:14
    #39159105
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Лизоблюд,
если ты хочешь использовать ActiveX control Microsoft DBGrid, то я сразу же не-а советую тебе это делать.

Очень дурацкий.

рекомендую использовать стандартный контрол SysListView32.

Конечно, возможно какое-то применение и DBGrid, но учти, что с такими понятиями как удобство, кастомизация придется сразу распрощаться...
...
Рейтинг: 0 / 0
30.01.2016, 12:08
    #39159141
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
MasterZivЛизоблюд,
если ты хочешь использовать ActiveX control Microsoft DBGrid, то я сразу же не-а советую тебе это делать.

Очень дурацкий.

рекомендую использовать стандартный контрол SysListView32.

Конечно, возможно какое-то применение и DBGrid, но учти, что с такими понятиями как удобство, кастомизация придется сразу распрощаться...
Но ведь это список, а мне нужна таблица.
Можно самому создать таблицу ?
...
Рейтинг: 0 / 0
30.01.2016, 12:55
    #39159150
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Лизоблюд Но ведь это список, а мне нужна таблица.
Можно самому создать таблицу ?
Таблица это структура. Сделать не сложно, но хотелось и визуальное представление как FlexGrid
...
Рейтинг: 0 / 0
30.01.2016, 13:57
    #39159167
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдНо ведь это список, а мне нужна таблица.
В режиме "Report" это очень даже таблица.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
30.01.2016, 16:12
    #39159212
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдMasterZivЛизоблюд,
если ты хочешь использовать ActiveX control Microsoft DBGrid, то я сразу же не-а советую тебе это делать.

Очень дурацкий.

рекомендую использовать стандартный контрол SysListView32.

Конечно, возможно какое-то применение и DBGrid, но учти, что с такими понятиями как удобство, кастомизация придется сразу распрощаться...
Но ведь это список, а мне нужна таблица.
Можно самому создать таблицу ?


Почитай внимательно документацию.
...
Рейтинг: 0 / 0
30.01.2016, 16:21
    #39159213
Sheraton_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Зачем использовать трупные технологии, проще использовать wxWidgets в которой есть wxGrid.
...
Рейтинг: 0 / 0
30.01.2016, 16:57
    #39159226
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Sheraton_Зачем использовать трупные технологии, проще использовать wxWidgets в которой есть wxGrid.
Линуксовая абракадабра.
А как насчет QT? стоит заморачиваться ?
...
Рейтинг: 0 / 0
30.01.2016, 20:18
    #39159275
Sheraton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдЛинуксовая абракадабра.
А как насчет QT? стоит заморачиваться ?

При чем тут линукс? Ты можешь всю жизнь пользоваться wxWidgets и даже не знать, что эта библиотека позволяет собирать приложения не только под Win но и под Linux и Mac. wxWidgets удобная и компактная (в сравнении с Qt) библиотека, которая создает быстродействующие интерфейсы. С wxWidgets просто приятно работать вне зависимости от операционной системы. Отличительной особенностью библиотеки wxWidgets является то, что она использует родные виджеты (контролы) из операционной системы (при наличии таковых разумеется). Кто-то считает это недостатком, а кто-то преимуществом, у каждого свои цели. Учитывая, что родного виджета (контрола) Grid для операционных систем нет, то wxWidgets использует свой, т.е. созданный в wxWidgets.

Qt как и wxWidgets и GTK+ имеет свои преимущества и недостатки. Каждый выбирает библиотеку для своих нужд и целей. Но при всех недостатках и достоинствах, Qt гораздо лучше чем MFC, C#, Java и прочей ереси.
...
Рейтинг: 0 / 0
30.01.2016, 21:05
    #39159290
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Sheraton Qt как и wxWidgets и GTK+ имеет свои преимущества и недостатки. Каждый выбирает библиотеку для своих нужд и целей. Но при всех недостатках и достоинствах, Qt гораздо лучше чем MFC, C#, Java и прочей ереси.
Пробовал скачивать. Качается только документация.
...
Рейтинг: 0 / 0
30.01.2016, 21:07
    #39159291
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдSheraton Qt как и wxWidgets и GTK+ имеет свои преимущества и недостатки. Каждый выбирает библиотеку для своих нужд и целей. Но при всех недостатках и достоинствах, Qt гораздо лучше чем MFC, C#, Java и прочей ереси.
Пробовал скачивать. Качается только документация.
И еще вопрос насколько эта библиотека стыкуется с win 32 Application.
Если работать с AppWizard[exe], то меня FlexGrid вполне устраивает.
...
Рейтинг: 0 / 0
30.01.2016, 21:08
    #39159292
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдЛизоблюдпропущено...

Пробовал скачивать. Качается только документация.
И еще вопрос насколько эта библиотека стыкуется с win 32 Application.
Если работать с AppWizard[exe], то меня FlexGrid вполне устраивает.
Если переходить с AppWizard[exe] на win 32 Application, то меня интересует только grid. С остальными элементами у меня проблем нет.
...
Рейтинг: 0 / 0
30.01.2016, 21:12
    #39159295
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Начал разбираться с CGrid в MFC, т.к. примеры либо для win API, либо на сайтах с непонятным доступом.
...
Рейтинг: 0 / 0
31.01.2016, 12:32
    #39159414
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
MasterZivЛизоблюд,
если ты хочешь использовать ActiveX control Microsoft DBGrid, то я сразу же не-а советую тебе это делать.

Очень дурацкий.

рекомендую использовать стандартный контрол SysListView32.

Конечно, возможно какое-то применение и DBGrid, но учти, что с такими понятиями как удобство, кастомизация придется сразу распрощаться...
А где посмотреть коду создания и работы ?
То, что я находил, какие-то обрывки кодов.
...
Рейтинг: 0 / 0
31.01.2016, 13:19
    #39159424
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
старенького babygrid может достаточно будет?
...
Рейтинг: 0 / 0
31.01.2016, 13:28
    #39159425
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдSheraton_Зачем использовать трупные технологии, проще использовать wxWidgets в которой есть wxGrid.
Линуксовая абракадабра.
А как насчет QT? стоит заморачиваться ?

Стоит.
...
Рейтинг: 0 / 0
31.01.2016, 13:29
    #39159427
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
ЛизоблюдНачал разбираться с CGrid в MFC, т.к. примеры либо для win API, либо на сайтах с непонятным доступом.

Нет такого класса в MFC.
...
Рейтинг: 0 / 0
31.01.2016, 13:56
    #39159440
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Очень много всего на сайте(см.картинку). Но вход по регистрации, а условия пользования какие-то мутные (чота пра финансы).
...
Рейтинг: 0 / 0
01.02.2016, 01:21
    #39159696
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Да, на codeproject очень много разных вариантов гридов, и извращений с ними.
Хороших я там не помно, да вообще сайт печально знаменит обильным количеством говнокода.

Хотя конечно за все варианты гридов я не могу отвечать (что все плохие), ну и точно даже
плохие варианты могут натолкнуть на мысли для новых реализаций.
...
Рейтинг: 0 / 0
01.02.2016, 06:49
    #39159734
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Лизоблюд,

Надо отталкиваться от задачи. Что от гриды требуется?

Вообще ListView32 довольно гибкая штука: цвета, виртуальность, привязка к данным. Можно для удобства за пару часов написать свой враппер для работы с.
Вот про кастомную высоту ячеек не помню только...
При желании простая добротная грида делается за неделю :)
...
Рейтинг: 0 / 0
01.02.2016, 07:58
    #39159751
Лизоблюд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
CEMbЛизоблюд,

Надо отталкиваться от задачи. Что от гриды требуется?

Вообще ListView32 довольно гибкая штука: цвета, виртуальность, привязка к данным. Можно для удобства за пару часов написать свой враппер для работы с.
Вот про кастомную высоту ячеек не помню только...
При желании простая добротная грида делается за неделю :)
Где хоть что-нибудь по ней можно посмотреть ?
...
Рейтинг: 0 / 0
01.02.2016, 09:38
    #39159799
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Win 32 Application создать Grid
Лизоблюд,

В MSDN,как ни странно...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Win 32 Application создать Grid / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]