2015-03-10 4 views
0

Я пытался непосредственно рисовать на экран с помощью следующего кода:OutOfMemory исключения при использовании Graphics.FromHwnd (...)

[DllImport("user32.dll")] 
public static extern IntPtr GetDC(IntPtr ptr); 

static void draw(Rectangle r, Brush b, IntPtr hwnd) 
{ 
    using (Graphics g = Graphics.FromHwnd(hwnd)) 
    { 
     g.FillRectangle(b, r); 
    } 
} 
static void Main(string[] args) 
{ 
    draw(new Rectangle(0, 0, 400, 400), Brushes.PaleGoldenrod, GetDC(IntPtr.Zero)); 
} 

Consulting документации и различных примеры этого должно быть правильным кодом. Тем не менее я получаю OutOfMemoryException в следующей строке:

using(Graphics g = Graphics.FromHwnd(hwnd)) 

Поскольку я запрашивая только одной ручкой, я не понимаю, как возникает это исключение. В этом примере нет другого кода.

+0

Что это значит, что 'hwnd' предположим, что нужно указать? – Tigran

+0

Это возвращается из GetDC, который, согласно его документации, ведет себя следующим образом: hwnd: дескриптор окна, чей DC должен быть восстановлен. Если это значение равно NULL, GetDC получает DC для всего экрана. –

+0

спасибо, что решил! –

ответ

4

DC не является HWND. Заменить Graphics.FromHwnd() на Graphics.FromHDC()

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