tetro | ||||||||||
Гриша, спасибо за комплемент! Если честно, то по хорошему у меня по программированию только докторская степень (без предыдущих ![]() ![]() Т.е. за перво-принципами это ко мне, а с какой стороны открывают стандарт - это вопрос отдельный... А разговариваю сам с собой я столько лет сколько себя помню ![]() |
||||||||||
GregZ | ||||||||||
Сегодня наконец нашел в электронном виде (DjVu) книжку "Дизайн и эволюция C++" Бьярна Страуструпа на русском языке Её бумажная реинкарнация в моей библиотеке изрядно истрепалась и представляет собой просто жалкое зрелище :) PS кому интересно, лежит у меня на FTP здесь |
||||||||||
niktuba | ||||||||||
Народ, я тут попытался найти в Visual C++ 6.0 функцию, которая позволяет выводить на экран текст в вертикальном направлении - надо к оси Y подпись присобачить. Среди извратов с API TextOut, TabbedTextOut, DrawText, DrawTextEx, к удивлению своему, не обнаружил ни одного, позволяющего менять направление текста. Есть ли простые, не использующие Microsoft Foundation Classes, коды, показывающие, как проще всего напечатать вертикальный текст? |
||||||||||
GregZ | ||||||||||
Не там ищешь. Вывести вертикальный текст способна любая из приведенных тобой функций. Они выводят текст определенным шрифтом. Все что тебе надо - создать его вертикальным. Обрати внимание на четвертый параметр (orientation) функции CreateFont. Он позволяет задавать угол отклонения базовой линии выводимых символом от оси абсцисс. Это сообщение отредактировал GregZ - 13-07-2006 - 10:09 |
||||||||||
niktuba | ||||||||||
Ну как же не там? Тута - на sexnarode ![]() ![]() |
||||||||||
niktuba | ||||||||||
Замечательно! Все получилось. Правда, всякие там TextOut(...) вертикальный текст выравнивают с загибонами, но если покумекать, то все встает на место: ![]() Я только вот чего не понял - чистит ли GDI'шный Device Context за собой созданные графические объекты или нет? В MFC используются классы с конструкторами/деструкторами, и там все понятнее. А в GDI - handles, и все более туманно. Иными словами, в программе BOOL CEChart::fbDrawChart(RECT* aPrcChart, HDC ahDC) { HBRUSH h_ChartBrush = CreateSolidBrush(RGB(250, 250, 100)); HBRUSH h_DefBrush = (HBRUSH__ *)SelectObject(ahDC, h_ChartBrush); FillRect(ahDC, aPrcChart, h_ChartBrush); // Is it sufficient SelectObject(ahDC, h_DefBrush); // or we need DeleteObject(SelectObject(ahDC, h_DefBrush)); // to clear the space allocated by h_ChartBrush ? return TRUE; } // BOOL CEChart::fbDrawChart(RECT* aPrcChart, HDC ahDC) |
||||||||||
JeyLo | ||||||||||
Чистить за собой обязательно, т.е. всегда надо звать DeleteObject. | ||||||||||
niktuba | ||||||||||
Спасибо, так мне сердце и подсказывало ![]() |
||||||||||
JeyLo | ||||||||||
Кто скажет, что делает эта функция без всяких там условных переходов? :))) inline int h3(int m,int y) { return 28+!!(m-2)*2+!(y%4)*!(m-2)+m/8*(1-m%2)+(1-m/8)*(m%2); } |
||||||||||
GregZ | ||||||||||
Скажем тоже само что и
А без +30 (для положительных m) просто превращает все нечетные m в -(m-1). Вот такой же код с использованием тернарного оператора:
Для чего это нужно, не знаю. |
||||||||||
JeyLo | ||||||||||
Не туда думаешь.. :)) | ||||||||||
JeyLo | ||||||||||
cout << h3 ( 2, 2006 ) будет 28, cout << h3 ( 2, 2000 ) будет 29, а cout << 30+2*(1-2%2)+(1-2)*(2%2) будет 32... В смысле код - получение дней в месяце в году чистой математикой. Воооот... :))) |
||||||||||
niktuba | ||||||||||
Создавая программы на С++ мне часто приходится писать документацию, включающую три языка, рисунки и исходный код. Поэтому никуда не деться, приходится для этого дела использовать MS Word. Для автоматического выделения синтаксиса (syntax highlighting) я приспособил ADX_Toys_2_WD http://www.canadiancontent.net/tech/downlo..._Toys_2_WD.html. Но эта утилита довольно глупая, подсвечивает только базовые ключевые слова, а даже #include уже кишка тонка. Есть ли в природе макросы/add-in к Ворду, которые позволяют подсвечивать все ключевые слова и выделять // зеленым комментарии? |
||||||||||
JeyLo | ||||||||||
http://www.codeproject.com/com/wordhighlight.asp | ||||||||||
niktuba | ||||||||||
Замечательно, спасибо! ![]() |
||||||||||
niktuba | ||||||||||
(S)-Народ! Есть ли в Visual С++ 6.0 функция типа LineTo, которая позволяла бы рисовать линию только в пределах известного прямоугольника - например заданной области построения линейного графика? Заранее спасибо за любые комментарии. ![]() Это сообщение отредактировал niktuba - 07-09-2006 - 15:36 |
||||||||||
JeyLo | ||||||||||
Follow the CreateRectRgn & SelectClipRgn ![]() |
||||||||||
tetro | ||||||||||
Наконец-то, на работе, начали переход на 2005 студию. И тут такой вопрос. Есть функция, скажем:
Передается ей референс на массив (например чтобы можно было его удалить) Есть 2 массива:
Раньше (в 2003) оба варианта
Были законны, а теперь только второй. 2005 требует наличия функции:
Об'ясните, чем это стандарту не нравится? (или это МС глюки?) |
||||||||||
guest_from_the_past | ||||||||||
2005 студия абсолютна корректна. Если по-простому: стандарт запрещает сохранять (или передавать в функцию) ссылки на неконстантные временные объекты. Т.е. (простой пример)
2003 студия на этом примере отработает правильно, у нее глюк только со ссылками на указатель, но смысл уловить можно. Откуда берется временный объект? Все просто. Поскольку функция lala у тебя одна, и только для const double*, компилятор перебирая возможные варианты преобразований создает временный объект const double* на основе double* и подставляет его в функцию. Повторю, подставляет _временный_объект_. А дальше облом - ссылку то ты получаешь неконстантную. Добавив const перед ссылкой, можно решить проблему преобразований:
Но боюсь это не то, что тебе надо. Ибо исчезнет возможность изменения значения указателя. Собственно для этого ты его и передавал по ссылке. Воспользуйся введением дополнительной функции:
Либо особенность оптимизации, которая потом выкидывает временный объект, что позволяет поступить так: (не очень хорошо)
const_cast здесь совершенно корректен. PS. я бы порекомендовал избавиться от функций изменяющих указатель, принимаемый в качестве аргумента PPS. на вопросы телезрителей исключительно из уважения к tetro отвечал GregZ, спасибо за внимание Это сообщение отредактировал guest_from_the_past - 12-09-2006 - 01:02 |
||||||||||
tetro | ||||||||||
Отвечу здесь... О существовании там временного объекта я не подумал. А случай (в реальности, не кристалиизированый) - это деаллокаторы (облочки для delete, чтобы корректно удалять 1, 2, 3 и т.д. массивы). Других осмысленных использований этого метода, без организации минного поля в коде я и сам не вижу. |
||||||||||
-=PushPull=- | ||||||||||
GregZ, чего с указателями решили, и почему? аналогичный выбор надо сделать... на счет каста. изврат имхо. я не могу вспомнить ни одного случая, когда мне приходилось бы кастить от родителя к потомку на этапе компиляции. только наоборот. Это сообщение отредактировал -=PushPull=- - 09-12-2006 - 13:56 |