Программирование на Visual C++. Архив рассылки - Алекс Jenter
Шрифт:
Интервал:
Закладка:
COLORREF color=RGB(0,255,255);
Результат этого выражения – длинное целое число, самый младший байт которого содержит интенсивность красного, второй – зеленого и третий байт – синего. В этом случае color будет содержать голубой цвет. Сам макрос RGB(r,g,b) при обработке препроцессором расширяется до ((COLORREF)((BYTE)(r) | ((WORD)(g) <<8)) | (((DWORD)(BYTE)(b))<<16))).
ВОПРОС – ОТВЕТQ. …Как делать окна нестандартной формы? Например, круг (как у диска Компьютерры — там окно обычное, но с помощью прозрачности виден только круг, так?)
eFiA. На этот вопрос пришло довольно много фактически одинаковых ответов, и я сейчас постараюсь объяснить самую суть.
В Windows существует понятие регионов — областей. Каждое окно имеет свою область, которая по умолчанию создается прямоугольной. В WinAPI (и в классе CWnd) существует функция SetWindowRgn(), которая позволяет задать форму этой области. То есть сначала вы создаете область, потом устанавливаете его как форму для окна (это можно сделать, например, в OnInitDialog()). Создать область можно с помощью функций Create…Rgn(). Например, чтобы сделать круглое окно, можно воспользоваться CreateEllipticRgn(). Подробно параметры я описывать не буду – смотрите пример. Замечу только, что регионы можно создавать сложные, составленные из нескольких примитивов. Они образуются путем комбинирования областей (CombineRgn()).
Пример (прислал Sergey Melnikov):
CRect Rect;
GetWindowRect(&Rect);
HRGN hRgn = CreateEllipticRgn(0, 0, Rect.Width(), Rect.Height());
SetWindowRgn(hRgn, TRUE);
А если добавить такой код, получим окно с "прорезью" в виде эллипса:
HRGN hRgn1 = CreateRectRgn(0, 0, Rect.Width(), Rect.Height());
HRGN hRgn2 = CreateEllipticRgn(0, 0, Rect.Width(), Rect.Height());
HRGN hRgn3 = CreateRectRgn(0, 0, Rect.Width(), Rect.Height());
CombineRgn(hRgn3, hRgn1, hRgn2, RGN_DIFF);
SetWindowRgn(hRgn3, TRUE);
Ответ на этот вопрос прислали (в порядке получения): Андрей Колчанов, Ренат Васиков, Ilgar Mashayev, Sergey Skornyakov, LiMar, Sergey Melnikov, Igor Kurilov, Michael Stepanenkov.
Q. …Как загружать 256-цветный курсор в приложении? Т.е. проблема в том что в редакторе ресурсов можно сделать либо только черно-белый курсор, либо еще и цветной, но при этом LoadCursor загружет только ч.б…
George V. SamodumovA. Ответ на этот вопрос часто сводится к рекомендации воспользоваться LoadImage() вместо LoadCursor(). Вот самый полный и интересный ответ из присланных:
Дело в том, что файл курсора имеет схожий формат с файлом иконки, т.е. в одном файле могут находиться несколько изображений разных форматов, например: 16×16×16, 32×32×256 и т.д. При добавлении нового курсора редактор ресурсов VC автоматически создает курсор формата 32×32×2, который вероятно и грузится первым даже если добавлены еще несколько изображений. Поэтому нужно сделать так, чтобы курсор содержал только одно изображение. В редакторе ресурсов выполняем Insert|Cursor, потом открываем его для редактирования и в появившемся меню Image выбираем "New Device Image", а там "Custom" и задаем параметры изображения, например 48×48×256. Редактируем курсор, а потом переключаемся на монохромное изображение и удаляем его: "Image|Open Device Image –> Monochrome32×32", "Image|Delete Device Image". Теперь мы избавились от монохромного изображения и можем грузить курсор функциями: LoadCursor(), LoadCursorFromFile(), LoadImage():
BOOL CSampleDlg::OnInitDialog() {
CDialog::OnInitDialog();
::SetClassLong(m_hWnd, GCL_HCURSOR, (LONG)(HCURSOR)AfxGetApp()->LoadCursor(IDC_CURSOR1));
// Грузим анимационный курсор
(LONG)(HCURSOR)::LoadCursorFromFile("Appstart.ani"));
return TRUE;
}
Alex HinОтвет прислали (в порядке получения): Azanov Max, Dmitri A. Doulepov, Alex Hin, Igor Kurilov.
По многочисленным просьбам уменьшить размер выпуска, одновременно выпуская его чаще, оставшиеся два вопроса будут рассмотрены в следующем выпуске рассылки, который выйдет послезавтра (в субботу).
Предлагаю подписаться на дружественную рассылку:
Visual Basic — Трюки и Хитрости, советы и ответы на вопросы
Всего хорошего!
© Алекс Jenter mailto:[email protected] Красноярск, 2000.Программирование на Visual C++
Выпуск №8 от 08/07/2000
Здравствуйте!
НОВОСТИ Что дядя Билли нам готовит, или Visual Studio Next GenerationМногие из вас наверняка гадали – а что дальше? Какой он будет, новый Visual C++? Какие планы на этот счет у Microsoft? Ну что ж, сейчас завеса тайны более-менее приоткрылась, и можно уже о чем-то говорить.
Прежде всего следует заметить, что Visual Studio 7.0 будет больше ориентирована на разработку Web-приложений. Дело в том, что Microsoft недавно представила свою новую платформу .NET (читается "dot net"), предназначенную для еще большей интеграции интернета в операционную систему. Уже следующая ОС Windows, пока известная под кодовым названием Whistler и ожидаемая только к 2001 году, будет основана на этой платформе. Новая версия Visual Studio должна значительно упростить разработку программ для интернета.
На конференции VC-разработчиков фирмой Microsoft были заявлены основные планируемые изменения и улучшения, которые коснутся Visual C++. Итак, стало известно следующее:
1) Планируется ввести унифицированную среду разработчика (IDE) – теперь VC и VB будут одной средой. Хорошо это или плохо, покажет только время. Я не берусь сейчас давать оценку этому нововведению, потому что очень много будет зависеть от того, как именно это будет реализовано. Из плюсов такого подхода следует отметить то, что теперь независимо от того, на каком языке вы собираетесь программировать, вам нужно освоить только одну среду, а если в будущем вам придется воспользоваться другим языком, изучать другую IDE будет уже не нужно. Тем более это актуально, если вы планируете использовать оба языка.
2) Следующий релиз vs будет включать в себя технологию, называемую "ATL-сервер". Эта технология предложит набор классов-расширений для Active Template Library (ATL) и будет обеспечивать доступ ко всем функциям Internet Information Server (IIS). Microsoft полагает, что это значительно упростит и ускорит процесс создания масштабируемых Web-приложений.
3) Расширение для языка – "attributed programming" – (Я бы перевел как "описательное программирование", программирование за счет свойств). Оно призвано уменьшить объем кода, который программисты должны писать для создания COM+ компонентов. Свойства инкапсулируют доменные понятия (такие, как Data, COM, Web Services) в простые объявления, которые вставляются прямо в исходный код. Эти объявления предоставляют компилятору Visual C++ всю необходимую контекстную информацию, что раньше требовало сотни строк кода.
Следует также отметить, что все новые продукты Microsoft, спроектированные для платформы .NET, будут иметь расширенную поддержку XML.
И, наконец, самое интересное. Microsoft анонсирует новый язык программирования, который будет называться "C#" (читается как "C sharp". Мы, кстати, уже обсуждали связь знака "#" со словом sharp в выпуске №6).
C# — это новый объектно-ориентированный язык программирования, который позволит разработчикам быстро создавать широкий диапазон приложений для новой платформы .NET.
Новый язык будет конкурировать скорее с Java, чем с C++. Естественно, Microsoft совершенно не устраивает Java, прежде всего потому, что Java – это детище Sun Microsystems. Еще одна причина создать альтернативу Java – патологически малая производительность последнего, большей частью обусловленная его мультиплатформенностью. Как и Java, новый язык будет основан на C++. В C# будет встроена поддержка COM и XML, причем последний будет стандартным форматом структурированных данных для посылки через интернет.
В C# любой объект – это COM-объект. Разработчикам больше не придется явно реализовывать IUnknown и другие COM-интерфейсы. Программы на C# также смогут легко использовать любой COM-объект, независимо от того, на каком языке он был написан.
Новый язык спроектирован таким образом, чтобы исключить частые ошибки программистов. Например, "сборка мусора" позволит разрешить главную проблему C++ – неправильно используемые указатели; переменные в C# будут инициализироваться автоматически, а cам язык будет обладать повышенной типовой безопасностью.
Описание языка в формате MS Word (на английском языке, естественно) все интересующиеся могут скачать отсюда.
ВОПРОС – ОТВЕТПрошу прощения у Александра Панченко, который также прислал ответ на вопрос о 256-цветных курсорах, но не был мной упомянут в прошлом выпуске, и у Ивана Невраева (Ivan Nevraev), который также написал ответ на вопрос о нестандартной форме окна.
Сейчас рассмотрим ответы на два оставшихся вопроса из выпуска №5:
Q. Версия Debug работает без проблем, а при запуске версии Release появляется сообщение о недопустимой операции. Хотелось бы знать в чем проблема и пути ее решения.