вторник, 11 февраля 2014 г.

Си и ООП

Наверное, стоило бы ребенка на велосипеде с квадратным колесом ставить сейчас. Сегодня будем фантазировать на тему ООП на С.

Что-то вроде боли или сплиттер в диалоге

Сколько раз собирался, но это уже край) Хочу передать сердешный привет компании Microsoft с ее замечательным фреймворком для программирования на C++ под Windows - MFC (Microsoft Foundation Classes). Я не считаю себя гуру или даже профессионалом C++/Windows. Много раз сталкивался с этим тулом на мелких задачах и каждый раз он меня удивлял своей неоднозначностью. Иногда на нем задача решается элегантно, в 3 строки, которые, если лень, можно еще и обернуть в необходимые классы, нагенерив их Wizard'ом. А порой начинается ад: не понятно что, как и куда пихать, классы путаются с POD-струкрурами, StackOverflow радует примерами на чистом С. Ну так вот. Потом я познакомился с WindowForms в .Net Framework (что казалось полным трапом, ибо совсем все просто О_о ), затем Java с ее AWT/Swing, далее вовсе QtGui. Сердце подсказывало опасаться MFC и тратить время с пользой - собственно на winAPI.

Проект со злосчастным сплиттером - внутри


вторник, 28 января 2014 г.

Конвертирование изображений OpenCV в CBitmap (MFC-winapi).

Так и не смог найти ресурс, где бы это обсуждалось более сниппета кода с использованем каких-то не документированных функций winapi и OpenCV. Что странно, тема-то популярная. В основном помогла разобраться википедия . Русская версия достаточно скудна, потому долго не мог понять, как правильно выравнивать буфер данных в памяти.
Имеем: указатель на структуру IplImage из OpenCV и указатель на CBitmap (тонкая обертка над BITMAP в MFC).



В последнем нас интересует исключительно метод CBitmap::CreateBitmap(), который инициализирует класс.

BOOL CreateBitmap( 
int nWidth,
int nHeight,
UINT nPlanes,
UINT nBitcount,
const void* lpBits
);

пятница, 25 октября 2013 г.

Ошибка mercurial в Windows

Для того, чтобы задать дефолтного пользователя в Mercurial и избежать ошибки: "abort: no username supplied (see "hg help config")" необходимо создать переменную окружения "HGUSER" с значением имени и мыла через пробел: "username user@mail.ru".

С++ работа с XML (TinyXML)



Зачастую необходимо вынести некоторые относительно постоянные настройки программы из хардкода (жестко зафиксированных в коде констант) куда-то во вне, делать какую-то выдачу, пересылать текстовую информацию и даже устраивать мини базу данных. Для этого годится текстовый формат XML.

четверг, 10 октября 2013 г.

Таймер в консольном проекте


Сразу к делу. Тут же оговорюсь, что таймер специфичен для виндов. В примере - каждую секунду пишет на консоль и аппендит в файл текущее системное время. Нарочно даю реализацию коллбековой функцией (запись в файл) и обработчиком в цикле (на консоль). По стилю - пародия на С, если есть грубые ужасные ошибки - не думайте плохо, времени - час ночи. Код под катом.