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

之前有人问如何在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)

转载于:https://my.oschina.net/angluca/blog/491008

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值