Здравствуйте!
Э-э-х, непростая у
нас, программистов, профессия! Иногда просто откровенно завидуешь медикам,
лингвистам, архитекторам, ученым и всем остальным, которые отучились в
институте - и могут спать спокойно: если что-то принципиально новое и появляется
в их области, то не слишком часто и точно не слишком помногу.
У нас же
в одночасье, иногда по хотению и велению только ОДНОЙ фирмы, все может
перевернуться с головы на ноги (чаще наоборот), и вот ты обнаруживаешь, что
никокой ты не специалист, - тебе надо еще учиться, учиться и учиться (не помню
кто сказал ;)
Когда смотришь объявления о работе для программистов,
частенько кружится голова от всяких аббревиатур и названий на английском языке -
MFC, ATL, COM, ASP, PHP, SQL, HTML, DHTML, XML, UML, VB, VBA, VBScript, C++,
Java, JavaScript, Perl, CGI, TCP/IP, OpenGL, DirectX и пр. и пр.
Кстати, я в парочке объявлений уже заметил C# , хотя он еще даже не вышел!
И
вот видишь в объявлении совершенно непредсказуемую комбинацию из четырех-пяти
вышеперечисленных названий, и думаешь - неужели есть кто-то, кто это все знает?
Да еще имеет 2-3 года опыта работы с этим?
А вот в том-то и дело, что
таких людей не слишком много. Есть один практический совет: если вы хотя бы на
60% удовлетворяете требованиям работодателя, посылайте
резюме!
Мне могут возразить, что мол старые технологии остаются
востребованными всегда, наряду с новыми. Я скажу одно: когда вы последний раз
видели, чтобы требовался программист под MS-DOS? А я помню время, когда под
Windows (тогда еще 3.1) программировали считанные единицы (и то все считали это
недостойным занятием), а большинство работало именно в DOS.
Утешить
может только одно: постигая что-то конкретное, мы также постигаем общий принцип,
по которому это конкретное сделано. А вот знание общих принципов, господа -
действительно помогает. Уже зная пару-тройку языков, новый язык программирования
вполне реально изучить за две недели, за месяц - писать на нем сносные
программы, за полгода - стать профессионалом. Только через полгода обязательно
появится еще что-нибудь новое...;) Поэтому люди сейчас
поступают умнее: они осваивают новое еще ДО того,
как это новое появится. Нет, они вовсе не
путешествуют во времени...
/ / / / ОБРАТНАЯ СВЯЗЬ / / / / / / / / / / / /
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/
Статья про
WTL в 14-ом выпуске не осталась незамеченной. Некоторые заитересовались этой
темой, некоторые захотели высказать свое мнение. Вот одно
из таких писем:
Добрый день (вечер, ночь, утро) Алекс и подписчики
"Программирование на Visual С++" (в случае, если мое письмо опубликуют в
рассылке).
После
прочтения выпуска No.14 у меня появилась пара мыслей по поводу будущего MFC и
WTL. Точнее, мысли эти у меня есть давно (месяца два-три), возможно, вы об
этом тоже знаете. То, что MFC умирает - это факт. С самого начала она была
мертворожденной. Постоянные баги, внутренняя сложность, обилие
недокументированных внутренних структур и функций - все это не делает
библиотеку хорошей. Я уже не говорю о ее монстрообразности. Да, с ней удобно
работать. Но стоят ли проблемы удобства? Можно говорить очень долго о
достоинствах и недостатках MFC, но факт остается фактом: будущего у нее нет.
Что касается WTL, то здесь тоже все непросто. Точнее, если верить одному
из мэнэджеров Майкрософт (к сожалению, не помню кто), то все очень просто: у
WTL будущего тоже нет. В одном из выступлений он заметил, что WTL не будет
поддерживаться Майкрософт. Правда, не исключено, что WTL получит свое
развитие.
Ну и последнее. Я думаю, все слышали о проекте Майкрософт .NET.
Я занимаюсь им в свободное время и могу сказать одно: это действительно
отличная вещь. Пока еще сырая, нет даже беты, но уже в следующем обновлении
MSDN (октябрь) должна появиться Visual Studio 7 Beta (или Visual Studio.Net).
Не хочу рассказывать о .NET, не для маленького письма тема, к тому же, я не
настолько хороший лектор, как Jeffrey Richter и Don Box. Поэтому всем, кто
интересуется, могу посоветовать пару ссылок: http://www.msdn.microsoft.com/net/
, http://www.andymcm.com/ и
замечательный список рассылки DOTNET на http://discuss.develop.com.
- Alex
Ivanoff
/ /
/ ВОПРОС-ОТВЕТ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / / / / / / / /
Q1| В Visual C++ 6.0 создаётся ImageList с помощью ImageList_LoadImage. Потом две загруженные картинки рисуются в окошке - сначала одна, потом поверх неё другая (используется маска) - функция ImageList_Draw. Проблема в том, что рисуется только в 16 стандартных цветах. Картинка 24-битная. Пробовал и с 256 и 16-цветными, с использованием палитры - эффект тот же. Если не сложно, подскажи, как её нарисовать в 16M цвете (использую только API, без MFC)? - Дрон
Насколько я понимаю, в функцию ImageList_LoadImage следует передать флаг LR_CREATEDIBSECTION, чтобы избежать преобразований цветов в изображении.|A
-
Alexander Shargin
Такой же ответ на этот вопрос прислал David Potashinsky. Большое спасибо всем, кто откликнулся.
У меня выдалось немного свободного времени, поэтому следующий вопрос я не стал помещать в рубрику "В поисках истины", а ответил на него сам:
Q2| Меня попросили сделать страничку свойств (CPropertySheet), которая является главным окном приложения, минимизируемой. Означенная просьба неожиданно оказалась не столь простой как кажется на первый взгляд. Добавить собственно значок минимизации - нет проблем: в CPropertySheet::OnInitDialog добавляем ModifyStyle(0, WS_MINIMIZEBOX). Одно плохо - не работает он. - Олег
|A Сначала скажу, что эта идея - property sheet в качестве главного окна приложения - довольно неудачная. Сейчас объясню, почему. С точки зрения Windows Ваше приложение является не окном в полном смысле слова, а диалогом, причем таким диалогом, кнопка которого на панель задач не выводится. Т.о. при минимизации произойдет вовсе не то, что Вы ожидали - он минимизируется а-ля windows 3.1 (или как дочернее окно MDI) - в левый нижний угол.
Можно конечно ухитриться и сделать так, чтобы показывалась кнопка на таскбаре (см. предыдущий выпуск), но приемлемый, на мой взгляд, выход в данной ситуации - минимизировать в системный трей.
Теперь - что надо сделать, чтобы кнопка минимизации заработала:
При нажатии на эту кнопку для такого окна генерации события WM_SYSCOMMAND не происходит, и обрабатывать его нет смысла. Поэтому в класс-наследник CPropertySheet нужно добавить обработчик события WM_NCLBUTTONDOWN (non-client left button down, это событие происходит, когда нажимается левая кнопка мыши в неклиентской области окна, а значок минимизации как раз и находится в этой области):
void CMinSheet::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CPropertySheet::OnNcLButtonDown(nHitTest, point);
if (nHitTest == HTMINBUTTON)
{
IsIconic()? ShowWindow(SW_RESTORE): ShowWindow(SW_MINIMIZE);
}
}
Заметьте, что в свернутом состоянии кнопка минимизации (minimize) становится кнопкой восстановления (restore).
Повторю, в этом случае минимизироваться диалог будет в левый нижний угол. Лучше всего вместо минимизации его прятать [ ShowWindow(SW_HIDE); ] и выводить иконку в трее (как это делать см. выпуск рассылки No.11).
Если кто-то из вас, уважаемые подписчики, не согласен в чем-то с этим ответом, или есть какие-нибудь дополнения - обязательно напишите.Подробно про класс CPropertySheet вы сможете прочитать в следующем выпуске.
/ / / В ПОИСКАХ
ИСТИНЫ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
/ / / / / /
Q| Возникла вот
такая задачка. Имеется некоторое разбиение SDI на несколько view при помощи
сплиттеров (A). Как его изменить не убивая окна (на B или C)? -
Nikita Zeemin
+--+----+ +--+----+ +--+----+
| | | | | | + +____+
+--+----+ +--+ | + + +
| | | | | + + +
A +-------+ B +--+----+ C +--+----+
До встречи!
©Алекс Jenter
mailto:jenter@mail.ru
Красноярск, 2000.