Тут я буду писать реализованное API
Первая цель - это демо программа в корой будет несколько окон MessageBox. Это окно с изображением, текстом, кнопками Да, Нет. На нажатии на кнопку Да будет запускаться еще одно окно. При нажатии на Нет, окно будет закрываться. Окна можно будет перемещать и изменять их размер. Система должна корректно перерисовывать весь инетрфейс (используя отсечение). Используется черно-белый графический режим.
Вторая цель - это панель пуск. При нажатии на пуск открывается всплывающее меню со списком возможных действий и программ. Так же на панели находятся кнопки окон и объем свободной памяти.
Реализованное API
Память:
MemAlloc(R1 - размер) - Выделяет память. Возвращает R0-указатель.
MemFree(R0 - указатель) - Освобождает память.
ZeroMemory(R0 - указатель, R1 - размер) - Заполняет память нулями.
iFreeMem - Объем свободной памяти (только для чтения)
Глобальные переменные
iRectX, iRectY, iRectX1, iRectY1 - Используется для передачи параметров во многие функции.
DecComRect() - Уменьшить iRect (iRectX++, iRectY++, iRectX1--, iRectY1--).
Окна:
CreateWindow(R0-предок, R1-указатель на WndProc) - Создает окно. Возвращает R0-указатель на объект.
DestroyWindow(R0-окно) - Уничтожает окно.
SendMessage(R0-окно, R1-сообщение ...) - Переключает контекст задачи, сохраняет регистры R0-R3, R5 и запускает функцию WndProc.
Invalidate(R0-окно) - Поставить окно в очередь на перерисовку.
WindowFromPoint(R0,R1) - Какое окно находится в этой точке. Возвращается R2-указатель на объект.
RedrawWindows() - Перерисовать интерфейс (Разослать сообщения WM_PAINT. Вызывается системой автоматически при простое.)
iGraphWindow - Окно выбранное для функций рисования (только чтение)
Курсор мыши:
iCursorImage - Изображение курсора
iCursorX, iCursorY - Положение курсора мыши на экране (только для чтения)
ShowMouse() - Показывает курсор мыши
HideMouse() - Прячет курсор мыши (Восстанавливает изображение под ним).
Рисование (эти функции рисуют в окне. Учитывается, если окно частично закрыто другим окном):
SetPixel(R1,R2-положение) - рисование точки
BitBlt(R1,R2-положение, R3-изображение) - Вывод изображения (с отсечением определенным в iComRect)
DrawText(R1,R2-положение, R3-текст) - Вывод текста шрифтом 8x10 (с отсечением определенным в iComRect)
Rectangle() - Вывод прямоугольника размером iComRect
FillRect() - Вывод закрашенного прямоугольника размером iComRect
InverseMode(R1) - Включить/выключить инверсный режим для DrawText и FillRect.
Драйвер экрана (рисует на экране):
DrvSetPixel(...), DrvBitBlt(...), DrvDrawText(...), DrvFillRect(...).
DrvXorRect(...) - Рисование пунктирного прямоугольника XOR-ом (Для изменения размера и положения окна)
Объекты интерфейса (функции WndProc):
CtlWindow(...) - Рамка и заголовок окна. Логика изменения размера, перемещения.
События окон:
WM_CONSTRUCTOR - Получить кол-во дополнительной памяти в объекте окна
WM_PAINT - Окно необходимо перерисовать
WM_LBUTTONDOWN - Нажатие левой кнопки мыши
WM_LBUTTONUP - Отпускание левой кнопки мыши
WM_LBUTTONDBLCLK - Двойной клик
WM_MOUSEWHEEL - Колесо мыши
WM_RBUTTONDOWN - Нажатие правой кнопки мыши
WM_RBUTTONUP - Отпускание правой кнопки мыши
WM_MOUSEMOVE - Перемещение курсора мыши
WM_CAPTURECHANGED - Окно потеряло монополию над курсором мыши
WM_SETFOCUS, WM_KILLFOCUS - Окно получило/потеряло фокус.
WM_KEYDOWN - Нажатие клавиши клавиатуры (рассылается, только если фокус на окне)
WM_DESTROY - Окно сейчас будет уничтожено
WM_ACTIVATE - Окно стало/перестало быть активным (только для объектов CtlWindow)
WM_CLOSE - Пользователь хочет закрыть окно
WM_ENABLE - Изменение свойства Enabled окна
WM_MOVE - Окно было перемещено
WM_SIZE - Размер окна был изменен
WM_TIMER - Таймер
Объект окна доступен для чтения программисту. Он содержит поля:
Task - Задача, которой принадлежит окно
Parent - Указатель на окно предка
FirstChild - Указатель на первое окно ребенка
LastChild - Последнее окно ребенок
PrevWindow - Предыдущий брат
NextWindow - Следующий брат
Left, Top - Относительные координаты окна
Width, Height - Размер окна
X, Y, X1, Y1 - Координаты окна относительно экрана
WndProc - Обработчик сообщений окна
Style & FW_Intersect - Окно частично закрыто другими окнами
Style & FW_TabStop - Окно может получить фокус (получать сообщения WM_KEYDOWN)
Style & FW_Visible - Окно отображается
Style & FW_Enabled - Окно доступно пользователю
Style & FW_TopMost - Окно всегда сверху
Планируемое API я временно убрал. Там очень много функций.