2015-09-20 4 views
-2

У меня возникли трудности с использованием Win API GetWindowDC, чтобы получить действительный hDC для рисования.Использование GetWindowDC для рисования

Я использую vb.net 2013, и я попытался разбить изображения на форму, нарисовать строку, нарисовать прямоугольник и ничего.

Я работаю в Win7 все тесты.

Должен ли я отключить aero с функциями DWM, это трюк с рукояткой или что это такое? Я уже опубликовал вопрос «draw in titlebar vb.net 2013», в котором не было ответа, где у меня есть какой-то код, но сейчас мне просто нужен рабочий пример. Вся помощь приветствуется.


Но здесь приведен еще один код, который тоже не работает.

Select Case m.Msg 
     Case WinAPI.Win32Messages.WM_NCPAINT 

      Dim hDC As IntPtr = WinAPI.GetWindowDC(m.HWnd) 
      Dim g As Graphics = Graphics.FromHwnd(hDC) 

      g.DrawString("TESTE", New Font("ARIAL", 16), New SolidBrush(Color.Black), 5, 5) 
      g.Dispose() 

      WinAPI.ReleaseDC(m.HWnd, hDC) 

Ошибка OutOfMemory, и ничто не рисуется в любом месте, даже если тесты выполняются для клиентской зоны.

Это простая цель. Как рисовать во всех областях формы, и из этого я обработаю рисунок.

Хорошо, спасибо хотя бы за помощь в правильном редактировании. О Graphics.FromHDC, да, я попробовал.

Но здесь приведен еще один код, который тоже не работает.

Select Case m.Msg 
    Case WinAPI.Win32Messages.WM_NCPAINT 

     Dim hDC As IntPtr = WinAPI.GetWindowDC(m.HWnd) 
     Dim g As Graphics = Graphics.FromHwnd(hDC) 

     g.DrawString("TESTE", New Font("ARIAL", 16), New SolidBrush(Color.Black), 5, 5) 
     g.Dispose() 

     WinAPI.ReleaseDC(m.HWnd, hDC) 

Ошибка OutOfMemory, и ничто не рисуется нигде, даже с помощью тестов, выполненных для клиентской зоны.

Это простая цель. Как рисовать во всех областях формы, и из этого я обработаю рисунок. И слишком плохо для отрицательных голосов. Не помогает, потому что если люди, которые быстро голосуют против ... стараются быть такими же быстрыми, когда читают все, что помещается в вопросе, и выясняя, что это не просто «gimme gimme codez» - другой ссылочный вопрос имеет код.

Люди, которые знают много забывают, что как только вы, где, как я, и не знаю много о предмете ... может даже не знать, как задавать правильные вопросы ...

Благодарность за помогите, если кто-то может это предоставить.

+0

* «Plz giev me tezzzzz» * не является чем-то, что должно быть частью вопроса о stackoverflow. Вам нужно показать ** ваш ** код и задать конкретный вопрос. Вы хотите визуализировать область клиента или неклиентскую область окна? Является ли приложение под вашим контролем? Что вы пробовали? Как это случилось? – IInspectable

+0

Документация для [WM_NCPAINT] (https://msdn.microsoft.com/en-us/library/dd145212.aspx) содержит рабочий пример кода. – IInspectable

ответ

1

Graphics.FromHwnd() принимает ручку окна, а не постоянный ток (ключ в названии). Вместо этого попробуйте Graphics.FromHdc().

+0

Да. Я пробовал это как первый запуск, но ничего не произошло. Ошибок нет, но ничего не было. – JDF

Смежные вопросы