2010-03-18
■[Nimrod] Nimrod で空ウインドウを出してみた
Nimrod Programming Language で、空ウインドウを出してみた.
import
windows
const
NULL = 0
proc wndProc(hWnd: HWND, msg: UINT, wParam: WPARAM, lParam: LPARAM): LRESULT{.stdcall.} =
case msg
of WM_DESTROY:
PostQuitMessage(0)
else:
return DefWindowProc(hWnd, msg, wParam, lParam)
return 0
proc winMain(hinst: HINST, hinstPrev: HINST, lpszCmdLine: LPSTR, nCmdShow: int): int{.stdcall.} =
const
szClassName = "WCN_HELLO_WINDOWS"
var
wndClass: WNDCLASS
hWnd: HWND
msg: MSG
wndClass.style = CS_HREDRAW or CS_VREDRAW
wndClass.lpfnWndProc = wndProc
wndClass.cbClsExtra = 0
wndClass.cbWndExtra = 0
wndClass.hInstance = hInst
wndClass.hIcon = NULL
wndClass.hCursor = LoadCursor(0, IDC_ARROW())
wndClass.hbrBackground = GetStockObject(WHITE_BRUSH)
wndClass.lpszMenuName = nil
wndClass.lpszClassName = szClassName
if RegisterClass(wndClass) == 0:
return 0
hWnd = CreateWindow(
szClassName,
"Hello Windows!",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
nil)
discard ShowWindow(hWnd, nCmdShow)
discard UpdateWindow(hWnd)
while GetMessage(msg, NULL, 0, 0) != 0:
discard TranslateMessage(msg)
discard DispatchMessage(msg)
return msg.wParam
var
hInst: HINST
si: STARTUPINFO
nCmdShow: int
hInst = GetModuleHandle(nil)
si.dwFlags = 0
GetStartupInfo(si)
nCmdShow = if (si.dwFlags and STARTF_USESHOWWINDOW) != 0: int(si.wShowWindow) else: SW_SHOWDEFAULT
discard winMain(hinst, 0, "", nCmdShow)
Nimrod 0.8.8 で試したところ、OS ビルトインの DLL にしか依存しない実行ファイルが 96.3KB (strip で 69.0KB) で生成されたので、なかなか良い感じ. が、余りにも情報がなさすぎてアレですw