воскресенье, 25 января 2009 г.

Про MFC и Visual С++ Features Pack

Последнее время складывается такое ощущение, что в Microsoft явно что-то не так, причем не так не на уровне идей, а на уровне реализации. Выпущенная Vista имела массу интересного в плане новых визуальных элементов, но при этом жрала ресурсы так, что только держись. Причем первые бетты Windows 7 показывают, что эта прожорливость, отнюдь не необходимое условие хорошей системы. Но пост не про это.

А про Feature Pack для MFC под MSVS 2008.

Как известно MSOffice 2007 вышел в совершенно новом стиле, избавился от меню и панелей управления и получил на замену так называемый Ribbon. Выглядит это прекрасно, с моей точки зрения такой интерфейс намного удобнее старого. И захотелось мне написать одно из давно планированных приожений с использованием этого нового стиля. Ну а элементы управления, для всего этого хозяйства реализованы именно в Feature Pack. Так что я его быстренько поставил, и решил насладится.

Надо отметить что сам по себе Ribbon реализован вполне не плохо. Правда архитектурное решение при котором я создаю нечто при помощи new, а удаляет его уже кто-то другой для меня выглядит несколько пугающе, но с другой стороны почему бы и нет.

В том же пакете шла пара контролов CMFCShellListCtrl и CMFCShellTreeCtrl, которые вполне подходили для моей задачи, и я по дурости своей решил ими воспользоваться. Идиот, что не говори, потому что если бы я написал всю эту ерунду с нуля (тем более, что ShellTree у меня уже был написан под WTL) я бы сэкономил и время и нервы.

Ну начнем с того, что эти сиамские близнецы не хотели разлучаться и работать по одиночке. Это уже насторожило, но с другой стороны мне они тоже были нужны в паре, так что чего бы и нет.

Правда мне надо было показывать в списке не все файлы, а только удовлетворяющие определенным параметрам, а никакой виртуальной функции типа CheckItem в CMFCShellListCtrl предусмотрено не было, и пришлось переопределять всю EnumObjects, что явно говорит о высокой степени проработки архитектуры при рзработке контрола. Причем переопределяя ее пришлось ее маленько раздробить, потому что свалить весь функционал в одну функцию это, конечно, круто, но вроде как не очень.

Дальше больше. Для списка файлов весьма важно вовремя реагировать на изменения этого списка, т.е. на удаление, переименование и т.п. операции с файлами в списке, когда эти операции выполняет некая внешняя программа. Думаете это функционал есть в CMFCShellListCtrl - нет, конечно. Ладно дописать это не сложно. Ну и так по мелочам, пришлось добавить функционала втрое больше того, что было, причем в конечном итоге стало понятно, что проще будет переписать все совсем, чем пользовать исходное гавно.

Идем дальше. CMFCListCtrl. Реализацию продумывали явно не головой, либо в голове того кто над этой реализацией думал, что-то отличное от мозгов. Ну ладно, вы ребята желаете дать возможность менять цвет текста для каждого элемента и даже сделали виртуальную функцию OnGetCellTextColor. Отлично. Но неужели так трудно было подумать, что если эта функция не реализована в наследниках, то все должно работать стандартным образом, т.е. так как работает ListView, например, в проводнике. Полдня разбирался, почему у меня при выставление стиля Tile, все строки в подписе к иконкам радикально черного цвета, хотя во всех других примерах, черный только цвет текста из Column = 0, а текст из остальных колонок серый. Пришлось идти по всем исходникам и разбирать чего там наворочено.

Ладно разобрался.

В том же ListView есть стандартное сообщение LVM_SETSELECTEDCOLUMN оно надо, чтобы фон колонки, например, по которой отсортирован список сделать отличным от остальных. Чудненько. В CMFCListCtrl есть метод EnableMarkSortedColumn, думаю ну отлично, не надо писать руками, пацаны все сделали. Ага, пацаны сделали. Правда руки у пацанов растут из жопы, и сделали они именно этими руками. Вместо того, чтобы кинуть сообщение LVM_SETSELECTEDCOLUMN, они решили красить колонку самостоятельно. Ну а чего, умища то через край, и жажда деятельности зашкаливает. Проблема правда в том, что красится она не целиком, как надо, а только в подложке тех итемов, которые есть в списке. Ну и если переключиться с просмотра LV_REPORT на любой другой, куски этой покраски проглядываются, но это жеж не страшно, главное наботали какой-то херни.

Подводя итог, поработав с одним только контролом, практически пришлось переписать его целиком. Классная библиотека, ничего не скажешь.

понедельник, 12 января 2009 г.

Про менеджмент

Набрел на Менеджмент: краткий словарь заблуждений. Расшифровка "мотивации" и "совещания" сильно повеселила. Вернее сказать в очередной раз удостоверила, что в своем понимании действительности я не одинок, что не может не радовать.

PS. Поставил таг "юмор", хотя какой это юмор на фиг - это жисть.