您的位置:首页 > 其它

Nim如何在windows下使用winapi创建窗口

2015-08-12 02:31 495 查看
之前有人问如何在nim里使用CreateWindow, 所以在睡觉之前花了些时间写了个winapi的窗口, 方便大家学习使用.

如果想查找winapi在nim的相关类型或宏可打开windows.nim然后ctrl+f

(nim0.12版本以后需要用nimble安装oldwinapi才有windows.nim, 位置好象在~/.nimble/pkgs里)

import windows

#var hinst = GetModuleHandle(nil)
#echo repr hinst

proc wndfunc(hwnd: HWND, msg: WINUINT, wparam: WPARAM, lparam: LPARAM): LRESULT{.stdcall.} =
case msg
of WM_CREATE:
discard MessageBox(hwnd, "Hello Nim", nil, 0)
of WM_DESTROY:
PostQuitMessage(0)
else:
result = DefWindowProc(hwnd, msg, wparam, lparam)

var class_name = "app"
var wc:WNDCLASS
wc.style = 0
wc.lpfnWndProc = wndfunc
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = 0
wc.hIcon = 0
wc.hCursor = 0
wc.hbrBackground = GetStockObject(BLACK_BRUSH)
wc.lpszMenuName = nil
wc.lpszClassName = class_name

if RegisterClass(wc) == 0:
echo "Failed to register class"

var hwnd = CreateWindow(class_name, "Nim windows", WS_OVERLAPPEDWINDOW, 100, 100, 240, 160, 0, 0, 0, nil)

discard ShowWindow(hwnd, SW_SHOW);
discard UpdateWindow(hwnd)

var msg:MSG
while GetMessage(addr msg, 0, 0, 0) != 0:
discard TranslateMessage(addr msg)
discard DispatchMessage(addr msg)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: