Обрабатывать в консольном приложении - PullRequest
3 голосов
/ 04 августа 2010

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

Ответы [ 3 ]

3 голосов
/ 04 августа 2010

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

MSDN

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

IntPtr hdc = GetDC( null );
if( hdc == null ) 
{
    OopsError();
}
1 голос
/ 05 августа 2010

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

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

1 голос
/ 04 августа 2010

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 для всего экрана.

...