Чтение онлайн

на главную - закладки

Жанры

Программирование на Visual C++. Архив рассылки

Jenter Алекс

Шрифт:

Gdiplus::Rect rect;

Также, если по каким-то соображениям директива

#pragma comment(lib, "gdiplus.lib")

не устраивает, в опциях компоновщика нужно явно указать библиотеку импорта gdiplus.lib.

На этом пока все. В следующей части мы рассмотрим богатые возможности, которые GDI+ предоставляет для работы с растровыми изображениями.

ВОПРОС – ОТВЕТ 

Как вставлять в программу на C++ двоичные константы?

Автор: Александр Шаргин 

В языке C++ есть

восьмеричные, десятичные и шестнадцатеричные константы. А двоичных – нет. Тем не менее, при помощи препроцессора можно соорудить макрос, который позволит нам смоделировать такие константы. Основная идея – преобразовывать восьмеричную константу в двоичную, выделяя из неё отдельные цифры и умножая их на соответствующий весовой коэффициент. Есть только одна проблема: в тип long влезет не более десяти цифр, а этого хватит только на формирование двоичных констант длиной в байт. Хотелось бы иметь и более длинные двоичные константы. Чтобы решить эту проблему, можно ввести дополнительные макросы, которые будут склеивать короткие двоичные последовательности в более длинные. Эти макросы могут выглядеть примерно так. 

#define BIN8(x) BIN___(0##x)

#define BIN___(x) \

 ( \

 ((x / 01ul) % 010)*(2>>1) + \

 ((x / 010ul) % 010)*(2<<0) + \

 ((x / 0100ul) % 010)*(2<<1) + \

 ((x / 01000ul) % 010)*(2<<2) + \

 ((x / 010000ul) % 010)*(2<<3) + \

 ((x / 0100000ul) % 010)*(2<<4) + \

 ((x / 01000000ul) % 010)*(2<<5) + \

 ((x / 010000000ul) % 010)*(2<<6) \

 )

#define BIN16(x1,x2) \

 ((BIN(x1)<<8)+BIN(x2))

#define BIN24(x1,x2,x3) \

 ((BIN(x1)<<16)+(BIN(x2)<<8)+BIN(x3))

#define BIN32(x1,x2,x3,x4) \

 ((BIN(x1)<<24)+(BIN(x2)<<16)+(BIN(x3)<<8)+BIN(x4))

Для компиляторов, поддерживающих 64-разрядные целые, можно также ввести дополнительный макрос BIN64. Для Visual C++ он будет выглядеть так. 

#define BIN64(x1,x2,x3,x4,x5,x6,x7,x8) \

 ((__int64(BIN32(x1,x2,x3,x4)) << 32) + __int64(BIN32(x5,x6,x7,x8)))
 

Обратите внимание, что к параметру макроса BIN8 при помощи оператора ## принудительно дописывается ведущий ноль, чтобы с ним можно было работать как с восьмеричной константой. Благодаря этому пользователь может смело применять макрос BIN8 как к числу с ведущими нулями, так и без них, и всё будет работать именно так, как он ожидает. 

Использовать наши макросы можно примерно так. 

char i1 = BIN8(101010);

short i2 = BIN16(10110110, 11101110);

long i3 = BIN24(10110111, 00010111, 01000110);

long i4 = BIN32(11101101, 01101000, 01010010, 10111100);
 

Самое

замечательное состоит в том, что, хотя выражения для пересчёта из десятичной системы в двоичную получаются очень громоздкими, они остаются константными, а значит будут вычисляться в процессе компиляции. Это, в частности, означает, что наши двоичные числа можно использовать везде, где требуется константа (для задания размера массива, в метках case оператора switch, для указания ширины битового поля и т. д.). 

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

#define BIN__N(x) (x) | x>>3 | x>>6 | x>>9

#define BIN__B(x) (x) & 0xf | (x)>>12 & 0xf0

#define BIN8(v) (BIN__B(BIN__N(0x##v)))

До встречи через неделю! 

Алекс Jenter [email protected] Duisburg, 2001. Публикуемые в рассылке материалы принадлежат сайту RSDN.

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

Выпуск №58 от 30 декабря 2001 г.

Здравствуйте, дорогие друзья!

Сердечно поздравляю вас всех с наступающим Новым Годом! Пусть он принесет вам как можно больше успехов и радости, откроет новые горизонты и пусть лучезарное настроение никогда вас не покидает! Оно ведь вам особенно необходимо, когда вы например отслеживаете сорок шестую ошибку в программе… ;-)

Но одним поздравлением я сегодня все-таки не ограничусь :-) Cначала хочу внести ясность: предыдущему выпуску номер "58" был присвоен случайно и вне очереди, т.к. на самом деле он только пятьдесят седьмой. В архиве он за этим номером и стоит, так что просьба не искать потерявшийся 57-ой выпуск. ;-)

Cегодня я хочу представить вашему вниманию очень интересную, на мой взгляд, статью Владислава Чистякова из журнала "Технология Клиент-Сервер". Статья посвящена перспективам, ждущих нас уже в совсем недалеком будущем. Как вы вероятно уже знаете, входящая в платформу .NET Common Language Runtime (CLR) призвана поднять переносимость создаваемых приложений на новый уровень. Но давайте не будем забегать вперед…

СТАТЬЯ 

CLR

Common Language Runtime

Автор: Владислав Чистяков

Источник: <Технология Клиент-Сервер>

Прежде чем начинать говорить про VS.Net, необходимо поговорить про .Net и про рекламу в общем. Что же такое .Net и зачем он нужен?

Вы, наверное, заметили, что чем больше Интернет проникает в массы, тем больше нечестного использования этого названия встречается. Например: "Новый процессор Pentium 4 позволит поднять на НОВЫЙ уровень ваши возможности в Интернет". Интересно, ведь если даже у счастливого обладателя этого процессора будет возможность смотреть видеоролик в режиме 1900×1600 (хотя, хоть убей не пойму, как это зависит от процессора?), то где он возьмет канал в Интернет, который даст ему возможность прокачать этот ролик (ну, хотя бы с приемлемым качеством в разрешении 320×240). Но слово магическое – ИНТЕРНЕТ! Всунул его в свой пресс-релиз и порядок, продажи обеспечены.

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

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Честное пионерское! Часть 3

Федин Андрей Анатольевич
3. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Честное пионерское! Часть 3

Обгоняя время

Иванов Дмитрий
13. Девяностые
Фантастика:
попаданцы
5.00
рейтинг книги
Обгоняя время

Страж. Тетралогия

Пехов Алексей Юрьевич
Страж
Фантастика:
фэнтези
9.11
рейтинг книги
Страж. Тетралогия

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Имя нам Легион. Том 4

Дорничев Дмитрий
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 4

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Морской волк. 1-я Трилогия

Савин Владислав
1. Морской волк
Фантастика:
альтернативная история
8.71
рейтинг книги
Морской волк. 1-я Трилогия

Отмороженный 8.0

Гарцевич Евгений Александрович
8. Отмороженный
Фантастика:
постапокалипсис
рпг
аниме
5.00
рейтинг книги
Отмороженный 8.0

Совершенный: охота

Vector
3. Совершенный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Совершенный: охота

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Личник

Валериев Игорь
3. Ермак
Фантастика:
альтернативная история
6.33
рейтинг книги
Личник