Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.208.72] |
|
Страницы: (5) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здравствуйте продолжаю сериию тему из цикла "правильное программирование"
|
Сообщ.
#2
,
|
|
|
Так и в чем вопрос то? Или ты тут будешь какие то лекции с примерами выкладывать?
|
Сообщ.
#3
,
|
|
|
не лекций не будет я больше практик
щас небольшую базу данных слобаю и буду пробовать правильно её программировать c MFC и SQLite. |
Сообщ.
#4
,
|
|
|
так дело пошло, БД взял учебную под названием chinook.db, для практики сойдет, в ней 11 таблиц, но вопрос не в ней.
я уже начал писать демку, настроил SQLite3, все пучком . проблема возникла с выводом на экран, дело в том что я вывожу во вьюшку, которая имеет полосы прокрутки, чтобы отображать все данные в окне, и настраиваю режим преобразования в CExample1View::OnInitialUpdate, но здесь мне надо получить высоту шрифта, чтобы настроить окно вывода по высоте шрифта * число строк результата запроса, я не знаю как получить ее здесь она доступна тока в OnDraw,но OnDraw вызывается уже после OnInitialUpdate, таже фигня и с шириной окна, неизвестна ширина шрифта. хз че делать : void CExample1View::OnInitialUpdate() { CScrollView::OnInitialUpdate(); int recordCount = 0; if (mIsDbConnected) { // Получаем число записей в наборе данных CSqlStatement* stmt = mSQLiteDB.Statement(_T("SELECT COUNT(*) FROM albums")); ASSERT(stmt); stmt->NextRow(); recordCount = stmt->ValueInt(0); delete stmt; } // устанавливаем размеры окна // MM_HIMETRIC = 0.01 mm const int cY = высота шрифта * recordCount; // <--- здесь надо знать параметры шрифта вывода const int cX = ширина таблицы; // <--- CSize sizeTotal(cX, cY); CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2); CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50); SetScrollSizes(MM_HIMETRIC, sizeTotal, sizePage, sizeLine); } в OnDraw вывожу данные. |
Сообщ.
#5
,
|
|
|
так с этим разобралси как два пальца
void CExample1View::OnInitialUpdate() { CScrollView::OnInitialUpdate(); ............................. CClientDC dc(this); TEXTMETRIC tm{ 0 }; LOGFONT lf{ 0 }; _tcscpy_s(lf.lfFaceName, _T("Consolas")); lf.lfHeight = 500; lf.lfWeight = FW_BOLD; SetFont(lf, &dc); dc.SetMapMode(MM_HIMETRIC); dc.GetTextMetrics(&tm); TRACE(_T("tmHeight = %d, tmAveCharWidth = %d\n"), tm.tmHeight, tm.tmAveCharWidth); ........................... CSize sizeTotal(cX, cY); CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2); CSize sizeLine(sizeTotal.cx / 50, sizeTotal.cy / 50); SetScrollSizes(MM_HIMETRIC, sizeTotal); } немного терпения скоро будет и про БД |
Сообщ.
#6
,
|
|
|
вот для начала
Прикреплённый файлExample1.zip (78,25 Кбайт, скачиваний: 131) этот архив можно не смотреть, а смотрите весь процесс написания этого демо на GitHub: https://github.com/Cfon/MFCSQLite3Demo где я пишу как есть в прямом эфире без цензуры совершаю ошибки естественно, исправляю показываю как надо программировать не боясь ошибится, настоящий программист тот кто все время пишет! почему GitHub? все просто сюда большие файлы нельзя прилепить |
Сообщ.
#7
,
|
|
|
Цитата Cfon @ проблема возникла с выводом на экран, дело в том что я вывожу во вьюшку, которая имеет полосы прокрутки, чтобы отображать все данные в окне, и настраиваю режим преобразования в CExample1View::OnInitialUpdate, но здесь мне надо получить высоту шрифта А высоту шрифта можно получить только из БД, подскажите как получить высоту шрифта! |
Сообщ.
#8
,
|
|
|
Цитата ter_nk_ @ А высоту шрифта можно получить только из БД, подскажите как получить высоту шрифта! По разному например из диалога выбора шрифта. |
Сообщ.
#9
,
|
|
|
версия без поддержки страничного просмотра данных готова
1. сделал отображение данных во вьюшку с прокруткой 2. выбор таблиц из меню и тулбара 3. юзал архитектуру документ-вид пока вопросов нет след шаг юзать страничный просмотр данных по 50 строк, а то глючит просмотр при большом кол-ве отображаемых данных 140 мил точно не потянет |
Сообщ.
#10
,
|
|
|
вот ссылка на актуальный проект
https://github.com/Cfon/MFCSQLite3Demo смотрите и учитесь вместе со мной, но или просто критикуйте |
Сообщ.
#11
,
|
|
|
реализовал страничный просмотр данных по 50 строк, юзал не сильно мудреный сиквел :
SELECT * FROM table LIMIT 50 OFFSET n навигация при помощи меню, кнопок на тулбаре, а также кнопок на вьюшке под таблицей с выборкой данных демо выложу на GitHub позже след шаг реализовать сортировку и причесать данные(в первом демо данные всех таблиц шли как есть, надо заменить магические числа на нормальные имена, возможно выкинуть часть полей, с тем чтобы уменьшить объём выводимой инфы на экран с возможностью дальнейшей детализации например по клику на кнопку |
Сообщ.
#12
,
|
|
|
Я кстати смотрел твою пилотную версию в 6 сообщении которую ты выкладывал. Там много критики назрело на самом деле. Но мне реально лень было отписывать. Может потом найду время посмотрю твои последние версии, прокоментирую. Но точно не на выходных )
|
Сообщ.
#13
,
|
|
|
Велком
|
Сообщ.
#14
,
|
|
|
залил на GitHub (Example1.1.zip)
смотрите след маленький шажок https://github.com/Cfon/MFCSQLite3Demo пс. предыдущие версии не удаляю, чтобы проследить всю историю шажков |
Сообщ.
#15
,
|
|
|
Функция сортировки добавлена, для этого юзал след сиквел:
SELECT * FROM table ORDER BY field ASC LIMIT 50 OFFSET n; Сама функциональность реализована добавлением списка на тулбар. https://github.com/Cfon/MFCSQLite3Demo обнаружен косяк! замедление работы при сортировке больших данных, видимо запрос на получение всех данных даже с учетом лимита не эффективен и данные всеравно получаются все в память! буду пробовать решить через добавление ограничения запроса WHERE: SELECT * FROM table WHERE field = 'value' ORDER BY field LIMIT 50 OFFSET n; |