2010-08-03 6 views
3

У меня есть консольное приложение в .net, которое я обрабатываю с помощью некоторых шрифтов. Я использую Win32API для этого, и один из них требует контекста устройства для загрузки шрифта - фактически IntPtr hdc = GetDC(handle of screen element). Очевидно, что в моем приложении нет этих дескрипторов, так как это консольное приложение. Есть ли способ обойти это?Ручка в консольном приложении

+0

@TCLo - Какие win32 API вам нужно передать ручку? Документация MSDN может дать нам больше информации о том, какой конкретный DC будет работать для вас, поэтому мы можем рассказать вам, как его захватить. –

ответ

1

IntPtr hdc = GetDC(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle); работает в .Net приложениях консоли просто отлично.

Я не верю null будет работать в .NET, как он начинает Ошибки, аргумент: не могу конвертировать из '<null>' в 'System.IntPtr'

+0

спасибо, хорошо работает. – Stan

3

В win32 GetDC (нуль) должно дать контекст назад (на весь экран)

MSDN

Таким образом, вы должны быть в состоянии сделать что-то вроде

IntPtr hdc = GetDC(null); 
if(hdc == null) 
{ 
    OopsError(); 
} 
1

GetConsoleWindow() (http://msdn.microsoft.com/en-us/library/ms683175.aspx) :

Извлекает ручку окна, используемую консолью связанных с вызывающим процессом.

В качестве альтернативы, передача NULL может работать. Из GetDC() документации (http://msdn.microsoft.com/en-us/library/dd144871.aspx):

Дескриптор окна которого DC должен быть восстановлен. Если это значение равно NULL, GetDC получает DC для всего экрана.

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