Так же, как и с обычного DC,
создаёшь memory DC, совместимый с твоим экранным DC (CreateCompatibleDC), создаешь совместимый с ним битмап (CreateCompatibleБитмап) и присваиваешь этот битмап созданному memory DC (SelectObject(memoryDC,hBitmap)). После этого все процедуры рисования в memory DC (DrawText,FillRect,FrameRect,Line и т.д. и т.п.) точно также, как в обычном DC.
Как нарисовал все, можешь выводить на экран
BitBlt(SrcDC,,,,,memoryDC,,,,,SRC_COPY)
Самое обидное то, что люди банально не хотят даже почитать хотя бы тот же MSDN.
Пример, который тут приводится, набран в VB 2005, поэтому не факт, что у тебя все из примера заработает.
Dim Img As Image = New Bitmap(100, 100)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim Gr As Graphics = Graphics.FromImage(Img)
Dim Rect As New Rectangle(0, 0, 100, 100)
Dim Br As New Drawing2D.LinearGradientBrush(Rect, Color.Blue, Color.YellowGreen, Drawing2D.LinearGradientMode.Horizontal)
Gr.FillRectangle(Br, Rect)
PictureBox1.Image = Img
End Sub
Так же, как и с обычного DC,
.......
BitBlt(SrcDC,,,,,memoryDC,,,,,SRC_COPY)
Жестоко...
Проблема действительно в руках. У того кто придумал НЕТ, они растут из прямой кишки
Ну теперь самое интересное - вот пример из десятка строк, который делает все, что надо (за исключением того, что рисует просто градиентный прямоугольник, а не то, что нужно автору вопроса).
Почему я это написал без проблем, даже без подглядываний в MSDN, а автор вопроса сделать этого не смог???
Может, и здесь тоже разработчики из Редмонда виноваты? Они должны еще и программы вместо остальных программистов писать? И потом еще плохими быть?...
if (hbmScreen == 0)
errhandler("hbmScreen", hwnd);
// Select the bitmaps into the compatible DC.
if (!SelectObject(hdcCompatible, hbmScreen))
errhandler("Compatible Bitmap Selection", hwnd);
// Hide the application window.
ShowWindow(hwnd, SW_HIDE);
//Copy color data for the entire display into a
//bitmap that is selected into a compatible DC.
BitBlt(hdcCompatible,
0,0,
bmp.bmWidth, bmp.bmHeight,
hdcScreen,
0,0,
SRCCOPY))
Конечно, есть, кто спорит.
Например, в разделе Windows Media Player SDK есть даже информация о том, как создавать для Windows Media Player скины.
Это первое.
Второе.
Зачем ты здесь привел код на Си (учитывая тот факт, что это форум по .NET)?
Просто поумничать, или чтоб не молчать?
Или может ты думаешь, что кто-то станет заниматься этой фигней (т.е. использованием страых АПИ, в которых надо в черт знает какой последовательности создавать/прибивать кисти и перья) когда на руках есть мощная объектная модель, предоставляющая тот же самый функционал плюс еще пару интересных возможностей???
Я не собирался тебя не в чем переубеждать - просто попросил объяснить смысл фразы:
Хотя полезные вещи (с%зд#ные из Delphi) там есь
По поводу отсутствия в .NET хороших технологий - тот, использует .NET (а не просто раз в месяц запускает новую IDE и пишет на форумах, о том, какой большой .NET FW и том, что VB .NET - это тормозной интерпретатор), тот может говорить о налиии/отсутствии там полезных технологий.
Да, привел код чтобы поумничать, а что?
Или быть глупым стало модно с наступлением эры .нет? Я за модой не слежу...
Для того, кто понимает код, разницы нет, на Си он написан, на Бейсике или на Паскале.
А для того, кто вызубрил названия классов и методов, это действительно проблема: понять код написанный на Си.
P.S.
Вернись с вопросу автора и прочти еще раз. Может заметишь в вопросе: Не,как мне нарисованное изображение сохранить в переменную какую нить перем-ую и потом выводить её
И может поймешь, что твои скины тут не к месту
Что касается заявления, что это форум по .net:
На любом другом форуме никто не считает из ряда вон выходящим приведение в одной теме примеров кода написанных на трех - четырех разных языках программирования. И соответствующих одной общей проблематике, одному алгоритму.
Только на форуме .net это загоняет в тупик
Для того, кто понимает код, разницы нет, на Си он написан, на Бейсике или на Паскале.
Да.
Теперь допиши в конце списка языков VB .NET и поймешь всю абсурдность фразы.
Tip: если не заметил - это форум .NET.
А для того, кто вызубрил названия классов и методов, это действительно проблема: понять код написанный на Си.
На меня намекаешь? Зря.
Изучение любой технологии я начинаю с концепций.
Классы и их свойства я не зубрю - я просто понимаю, как их использовать и в любой момент могу обратиться к MSDN.
Для меня нет проблемы понять код, написанный на Си.
Тем более, что в свое время я работал с АПИ достаточно много.
Но в .NET нет необходимости использовать эти АПИ. В .NET есть более удобная объектная модель.
Вернись с вопросу автора и прочти еще раз. Может заметишь в вопросе: Не,как мне нарисованное изображение сохранить в переменную какую нить перем-ую и потом выводить её
Фразу этй я перечитывал и не раз (специально, чтоб ты не придрался к моему коду).
Теперь можешь сказать, что мой код не выполняет поставленную задачу?
По поводу последнего поста.
.NET разрабатывался для того, чтобы упростить программирование.
Такая концепция есть - Codeless Rapid Application Developmen.
Так вот. Объектная модель соответствует этой концепции.
АПИ - нет.
Поэтому приведение на форуме кода на Си (тем более после того, как был приведен рабочий пример на VB .NET) я считаю просто желанием выделитсья.
PS Не имею никакого желания тебя обидеть - речь веду только о технологчиеской и концептуальной части вопроса.
Да, повторяю и подтверждаю, я желаю выделиться и поумничать
Разве нельзя?
Могу кроме Си привести такой же пример ещё на трех языках. Видишь, какой я хвастун и нескромный человек. В общем редиска.
А реклама о возможностях нет меня особо не интересует, поэтому твое красноречие никак на меня не влияет. Вместо просмотра рекламного ролика о крутых возможностях нет (или прочитывания об этих возможностях) я лучше пойду посмотрю телевизор.
Спокойной ночи технологам и концептологам
.NET разрабатывался для того, чтобы упростить программирование.
Такая концепция есть - Codeless Rapid Application Developmen.
Так вот. Объектная модель соответствует этой концепции.
АПИ - нет.
Упрощение программирования за счёт оболванивания населения - это ложный путь. Советую тебе с него сойти как можно скорее и начинать постигать азы программирования. Как принято в мировой практике - начинают с БЕЙСИКА. БЕЙСИК - это только чтобы ты не пугался клавиатуры, а дальше то ведь сложнее.
API (низкоуровневые системные вызовы) нафиг не нужны в БЕЙСИКЕ - полностью согласен. Здесь вы с cresta'ой не найдёте общего языка, т.к. находитесь на разных ступенях (ты в подготовительном классе, а он уже выпускник). API может и написаны гениальными парнями из Редмонда, но универсальными от этого автоматически не становятся. При написании приложения ты можешь воспользоваться частью этих функции как инструментом автоматизации, но даже в этом случае ты не будешь уверен в том что весь используемый код - полезный.
Часть этих функций ты можешь вставить в приложение в переработанном виде, а в конкретных критических участках заменить своими, адаптированными под конкретную ситуацию. Но если для тебя что WIN32 API, что классы .NET всего лишь названия, то о чём ты вообще можешь спорить? .NET - ограничитель фантазии. Это путь лени, причём не твоей лени, а парней из Редмонда, не потрудившихся создать профессиональный инструмент.