Сайт PInvoke.NET

Ноябрь 21st, 2010 от Abizan Нет комментариев »

При работе над одним проектом на C# у меня возникала необходимость использования большого количества WinAPI-функций. Как Вы знаете, импортировать в C# функции из динамически загружаемых библиотек DLL можно, используя технологию P/Invoke. При этом нужно прописать все импорты функций и необходимых структур данных.

На это занятие может уйти некоторое время, которое можно было бы потратить на что-то более полезное :)

На сайте PInvoke.NET собрана огромная коллекция импортов WinAPI-функций и структур данных. Интересующую функцию, структуру или перечисление Вы можете найти воспользовавшись поиском в левой части сайта.

Приведу пример прототипа WinAPI-функции из MSDN и PInvoke.NET:

1
BOOL WINAPI Beep(DWORD dwFreq, DWORD dwDuration);
Прототип функции Beep() из MSDN
1
2
3
[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool Beep(uint dwFreq, uint dwDuration);
Прототип функции Beep() из pinvoke.net

А вот например структура SYSTEM_INFO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef struct _SYSTEM_INFO {
  union {
    DWORD  dwOemId;
    struct {
      WORD wProcessorArchitecture;
      WORD wReserved;
    } ;
  } ;
  DWORD     dwPageSize;
  LPVOID    lpMinimumApplicationAddress;
  LPVOID    lpMaximumApplicationAddress;
  DWORD_PTR dwActiveProcessorMask;
  DWORD     dwNumberOfProcessors;
  DWORD     dwProcessorType;
  DWORD     dwAllocationGranularity;
  WORD      wProcessorLevel;
  WORD      wProcessorRevision;
} SYSTEM_INFO;
Структура SYSTEM_INFO из MSDN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEM_INFO
{
    public ushort processorArchitecture;
    ushort reserved;
    public uint pageSize;
    public IntPtr minimumApplicationAddress;
    public IntPtr maximumApplicationAddress;
    public IntPtr activeProcessorMask;
    public uint numberOfProcessors;
    public uint processorType;
    public uint allocationGranularity;
    public ushort processorLevel;
    public ushort processorRevision;
}
Структура SYSTEM_INFO из pinvoke.net
Вывод

Ресурс PInvoke.NET может здорово сэкономить время при разработке программ на C# под платформу Windows.

C# – как засунуть программу в Tray

Август 26th, 2010 от Abizan 1 комментарий »

Сделать так, чтобы у нашей программы, написанной на C# была иконка в трее проще простого! Для этого в .NET есть класс NotifyIcon. Он даже размещен в палитре компонентов Toolbox.

Вот его основные свойства:

  • BalloonTipIcon – значок для отображения на всплывающей подсказке
  • BalloonTipText – текст для отображения на всплывающей подсказке
  • BalloonTipTitle – заголовок всплывающей подсказки
  • ContextMenuStrip – контекстное меню, которое будет вызываться при щелчке правой кнопкой мыши по значку в трее
  • Icon – Иконка, которая отображается в трее.
  • Text – текст подсказки, отображаемый при наведении указателя мыши на значок в области уведомлений (tray).
  • Visible – свойство, указывающее, виден ли значок в области уведомлений.

У компонента есть все события, которые могут понадобиться программисту. Среди них:

  • BallonTipClicked
  • BallonTipClosed
  • BallonTipShown
  • Click
  • DoubleClick
  • MouseClick
  • MouseDoubleClick
  • MouseDown
  • MouseMove
  • MouseUp

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

Если у Вас есть вопросы по классу NotifyIcon – милости прошу, задавайте их в комментaриях

Программирование игр под J2ME: Управление слоями с помощью LayerManager

Июль 25th, 2010 от Abizan 2 комментариев »

Как Вы помните, классы Sprite и TiledLayer являются потомками класса Layer. Обычно игра состоит хотя бы из одного TiledLayer’а и нескольких Sprite’ов. Класс LayerManager делает работу со слоями гораздо проще. У него есть методы для добавления/удаления и вставки слоев, а также один метод отрисовки всех слоев сразу. Это означает, что Вам не нужно вызывать метод paint() у каждого графического объекта отдельно.
» Читать дальше: Программирование игр под J2ME: Управление слоями с помощью LayerManager

Программирование игр под J2ME: Спрайты

Июль 22nd, 2010 от Abizan Нет комментариев »

В прошлых статьях, посвященных программированию игр под Java 2 ME, мы рисовали троллфейс с помощью класса Image, хотя имеет смысл отрисовывать его как спрайт. Спрайт – графический объект, который можно перемещать и анимировать.

В игровом API Java 2 Micro Edition есть специальный класс Sprite, который используется для отрисовки спрайтов. Этот класс поддерживает методы для проверки столкновений (collisions) с другими игровыми объектами – изображениями, спрайтами и TiledLayer. Анимация спрайта происходит почти также, как использование класса TiledLayer, с помощью набора разных картинок в одном изображении. » Читать дальше: Программирование игр под J2ME: Спрайты

Программирование игр под J2ME: Создание фона с помощью TiledLayer

Июль 3rd, 2010 от Abizan Нет комментариев »

Продолжение цикла статей по программированию игр под Java 2 ME. Здесь рассказывается об использовании класса TiledLayer. Мы будем использовать его для рисования фона.
» Читать дальше: Программирование игр под J2ME: Создание фона с помощью TiledLayer

Копирование материалов сайта допускается только с разрешения администрации сайта.