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

原创
2015/08/12 02:31
阅读数 2.5K

之前有人问如何在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)
展开阅读全文
打赏
2
3 收藏
分享
加载中
我试了下,
看 liulun的例子,http://www.cnblogs.com/liulun/p/4714858.html
环境可以使用默认的,命令行下运行 nimble install oldwinapi
源码改下
import oldwinapi\windows
discard MessageBox(0, "中文试试", "Nimrod GUI Application", 0)

这样是可以编译运行的

2017/09/13 17:54
回复
举报
更多评论
打赏
1 评论
3 收藏
2
分享
返回顶部
顶部