Вход/Регистрация
Программирование на Visual C++. Архив рассылки
вернуться

Jenter Алекс

Шрифт:

15. В пустых циклах хорошо явно прописывать continue. Этим вы показываете, что оставили цикл пустым нарочно, а не по ошибке. Пример: while (*p++ = *q++) continue;

Ну, хватит пожалуй. Если кто-то особенно заинтересовался этим вопросом, он может посмотреть более чем 70 подобных правил в Geosoft's C++ Programming Style Guidelines.

Должен заметить, что далеко не со всеми положениями этого документа я согласен. Например, я не считаю нужным обязательно начинать имена функций с маленькой буквы, – действительно важно различать переменные и типы, а функцию от типа отличить гораздо легче. Или еще, например, правило всем private-членам классов давать суффикс "_" — ну вот не нравится и все тут… Я здесь привел самые, на мой взгляд, нужные и, прошу прощения за тавтологию, "правильные" правила; те, которые встречаются практически во всех документах такого типа.

Так что дам еще один, последний, совет: подходите ко всем правилам, необходимость которых для вас не очевидна, с некоторой толикой здравого смысла.

ВОПРОС-ОТВЕТ

Q. Как в VC++ 6.0 можно сделать окно, которое не будет видно на Taskbar'e?

Kirill

A. Самый простой способ – это создать основное окно с расширеным стилем окна WS_EX_TOOLWINDOW:

hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, 0, hInstance, NULL);

При использовании MFC следует перекрыть метод PreCreateWindow:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {

 if (!CMDIFrameWnd::PreCreateWindow(cs)) return FALSE;

 cs.dwExStyle=WS_EX_TOOLWINDOW;

 return TRUE;

}

Но такое решение не всегда приемлемо – у созданного таким образом окна на тайтлбаре может находится только кнопка закрытия, и его заголовок отличается от заголовков других окон (он меньше). Для того, чтобы исправить эти недостатки, сначала создаем невидимое окно со стилем WS_EX_TOOLWINDOW, а затем дочернее окно, которое будет выполнять роль основного окна приложения. Это будет выглядеть следующим образом:

//…

HWND hWnd1,hWnd2;

hInst = hInstance;

hWnd1 = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass1, szTitle, 0, 0, 0, 100, 100, NULL, 0, hInstance, NULL); // cоздаем невидимое окно

// создаем окно, которое будет основным; указываем hWnd1 в кач.родителя:

hWnd2 = CreateWindowEx(0, szWindowClass2, szTitle, WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, hWnd1, 0, hInstance, NULL);

ShowWindow(hWnd1, FALSE); // скрываем 1-ое окно

UpdateWindow(hWnd1);

ShowWindow(hWnd2, nCmdShow); // делаем дочернее окно видимым

UpdateWindow(hWnd2);

Bad Sector

Небольшое дополнение: Если вам нужно убирать кнопку с таскбара только тогда, когда ваше приложение минимизировано (например, чтобы реализовать функцию "минимизировать в системный трей"), то все становится гораздо проще. Достаточно в обработчике OnSysCommand поставить реакцию на минимизацию окна (т.е. когда параметр nID равен SC_MINIMIZE вызывать ShowWindow(hWnd, SW_HIDE)). А при получении соответствующего сообщения от иконки в трее, не забывать восстановить окно. (про работу с системным треем см. выпуск №11).

В ПОИСКАХ ИСТИНЫ

Q. В Visual C++ 6.0 создаётся ImageList с помощью ImageList_LoadImage. Потом две загруженные картинки рисуются в окошке – сначала одна, потом поверх неё другая (используется маска) – функция ImageList_Draw. Проблема в том, что рисуется только в 16 стандартных цветах. Картинка 24-битная. Пробовал и с 256 и 16-цветными, с использованием палитры – эффект тот же. Если не сложно, подскажи, как её нарисовать в 16M цвете (использую только API, без MFC)?

Дрон

Всего вам доброго и не скучайте!

Красноярск, 2000.

Программирование на Visual C++

Выпуск №16 от 23 сентября 2000 г.

Здравствуйте!

Э-э-х, непростая у нас, программистов, профессия! Иногда просто откровенно завидуешь медикам, лингвистам, архитекторам, ученым и всем остальным, которые отучились в институте – и могут спать спокойно: если что-то принципиально новое и появляется в их области, то не слишком часто и точно не слишком помногу. 

У нас же в одночасье, иногда по хотению и велению только ОДНОЙ фирмы, все может перевернуться с головы на ноги (чаще наоборот), и вот ты обнаруживаешь, что никакой ты не специалист, – тебе надо еще учиться, учиться и учиться (не помню кто сказал ;)

Когда смотришь объявления о работе для программистов, частенько кружится голова от всяких аббревиатур и названий на английском языке – 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.

Утешить может только одно: постигая что-то конкретное, мы также постигаем общий принцип, по которому это конкретное сделано. А вот знание общих принципов, господа – действительно помогает. Уже зная пару-тройку языков, новый язык программирования вполне реально изучить за две недели, за месяц – писать на нем сносные программы, за полгода – стать профессионалом. Только через полгода обязательно появится еще что-нибудь новое…;) Поэтому люди сейчас поступают умнее: они осваивают новое еще ДО того, как это новое появится. Нет, они вовсе не путешествуют во времени…

  • Читать дальше
  • 1
  • ...
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: