Skip to content

Latest commit

 

History

History
106 lines (79 loc) · 3.47 KB

winapi.md

File metadata and controls

106 lines (79 loc) · 3.47 KB
tagline platforms
win32 windows & controls
mingw64

Scope

Windows, common controls and dialogs, message loop and system APIs.

Features

  • UTF8 Lua strings everywhere (also works with wide char buffers)
  • bitmap widget for custom painting
  • OpenGL and cairo custom-painting widgets (in separate packages)
  • anchor-based layout model for all controls
  • object system with virtual properties (win.title = 'hello' sets the title)
  • binding helpers for easy binding of new and future APIs
  • all calls are error-checked
  • automatic memory management (ownership; buffers)
  • flags can be passed as 'FLAG1 FLAG2'
  • counting from 1 everywhere.

Status

Current status and issues.

Hello World

local winapi = require'winapi'
require'winapi.windowclass'

local win = winapi.Window{
	w = 500,                --all these are "initial fields"
	h = 300,
	title = 'Lua rulez',
	autoquit = true,        --this is to quit app when the window is closed
	visible = false,        --this field is from BaseWindow
}

function win:on_close()    --this is an event handler
	print'Bye'
end

print(win.title)           --this is how to read the value of a property
win.title = 'Lua rulez!'   --this is how to set the value of a property
win:show()                 --this is a method call

os.exit(winapi.MessageLoop()) --start the message loop

Demos

Check out winapi_demo to see all the controls in action:

screnshot

Also, many modules can be run as standalone scripts, which will showcase their functionality, so there's lots of little demos there too.

Documentation

Architecture

  • [winapi_design] - hi-level overview of the library
  • [winapi_binding] - how the binding works, aka developer documentation
  • [winapi_history] - the reasoning behind various design decisions

Classes

  • [VObject][winapi.vobject] - objects with virtual properties
    • [BaseWindow][winapi.basewindowclass] - base class for top-level windows and controls
      • [Window][winapi.windowclass] - final class for top level windows
      • [Control][winapi.controlclass] - base class for controls
        • [Panel][winapi.panelclass] - custom-painted child windows
          • [BitmapPanel][winapi.bitmappanel] - RGBA [bitmap] panels
            • [CairoPanel][winapi.cairopanel] - [cairo] panels
          • [WGLPanel][winapi.wglpanel] - [OpenGL][opengl] panels
        • [Label][winapi.labelclass] - labels
        • [BaseButton][winapi.basebuttonclass] - base class for buttons
          • [Button][winapi.buttonclass] - push-buttons
          • [CheckBox][winapi.checkboxclass] - checkboxes
          • [RadioButton][winapi.radiobuttonclass] - radio buttons
          • [GroupBox][winapi.groupboxclass] - group boxes
        • [Edit][winapi.editclass] - edit boxes
        • [ComboBox][winapi.comboboxclass] - combo boxes and drop-down lists
        • [ListBox][winapi.listboxclass] - list boxes
        • [ListView][winapi.listviewclass] - list views
        • [TabControl][winapi.tabcontrolclass] - tab bars
        • [Toolbar][winapi.toolbarclass] - toolbars
      • [Tooltip][winapi.tooltipclass] - tooltips
    • [Menu][winapi.menuclass] - menus and menu bars
    • [NotifyIcon][winapi.notifyiconclass] - system tray icons

Functions

The "proc" layer is documented in the code, including API quirks and empirical knowledge, so do check out the source code.

Modules

{{{module_list}}}