Пишу приложение в Visual Studio .Net 2003 для Pocket PC. Мне необходимо выводить на экран динамически меняющуюся ломаную (порядка 1000 точек длиной).
Можно ли и нужно ли для ускорения вывода использовать API фунуцию PolyLine?
После долгих поисков нашл что можно как-то так:
[DllImport("gdi32.dll", EntryPoint="PolyLine")]
public static extern bool PolyLine(IntPtr hWnd,Point[] Arr,int N);
Но не знаю как при вызове получить Handle на мой Bitmap:
PolyLine(???,ArrP,NP);
Там не hWnd, и не hBitmap, а hDC. Это описатель контекста устройства (т.к. можно линии рисовать не только на битмапах, но и на принтере, в метафайл, итд.). У Пикчербокса есть свойство Handle. Но это hWnd. Чтобы получить hDC из hWnd можно вызвать GetDC. Потом этот DC можно использовать для PolyLine. По окончании работы с DC надо вызвать ReleaseDC.
Копия ответа из привата (вдруг кому еще пригодится): Есть, в C#, но не в окошке со свойствами. В коде же Handle появляется в подсказке со свойствами и методами. Спокойно работает с GetDC и ReleaseDC. Но не проще ли использовать встроенную в .Net замену PolyLine? Создается массив типа Point. У объектов класса Graphics есть метод DrawPolygon. И все. На самом деле это оболочка PolyLine. Разницы в скорости, скорее всего не будет - PolyLine все равно вызввается через PInvoke, а там потеря в скорости, причем, наверно, одинаковая.
На счёт DrawPolygon согласен, но как тогда быть с функцией PolyPolyLine (она мне тоже нужна :-) ). А вот на счёт Handle, я всё же посмотрел повнимательнее. Он есть в C# в WindowsApplication, а вот в SmartDeviceApplication (т.е. для Pocket PC или Windows CE) его нет :-(. Так что вопрос остаётся открытым.
О! У класса Graphics есть метод GetHdc. Сразу даст DC для PolyPolyLine
Hedge hog добавил 11-07-2005 в 02:51:37:
и ReleaseHdc тоже есть
Hedge hog добавил 11-07-2005 в 02:56:27:
А PolyPolyLine вроде как заменяет метод DrawLines у того же Graphics. И PolyLine вроде тоже. Не тестировал ничего из этого
И всё же ни Graphics.Handle ни Graphics.GetHdc ни Graphics.ReleaseHdc нет в SmartDeviceApplication (т.е. для Pocket PC или Windows CE). А метод DrawLine, конечно, заменяет PolyLine и PolyPolyLine, но он раза в два медленнее :-(