用Nim语言开发windows GUI图形界面程序

前言

本文得到了“樂師”的大力支持,

我们一起调试程序到深夜,要是没有他的帮忙,

我不知道要多久才能迈过这道坎,

另外“归心”还有其他人也提供了帮助,

他们都来自于QQ群:“Nim开发集中营”469329878;

感兴趣的朋友,可以加这个群一起讨论

配置GUI开发环境

我在这篇博客中,写到了Nim开发环境的搭建

那篇博客中说MingW是必选的,

这对于开发一个普通的Nim程序来说,没有问题,但要开发GUI程序,还不够

官方安装包中所包含的的MingW安装包有点问题

如果你用编译命令:--app:gui,编译你的程序,将会出错

如果你不用这个编译命令,那么在你执行你的程序时,会先打开一个命令行窗口,再打开你的GUI程序。

具体为什么会出错,我还不是很清楚

(有可能那个MingW的安装包是64位的,也有可能那个安装包是阉割版的)

所以我们要自己安装一个MingW,

Nim官方网站推荐到MingW官网去下载64位的安装包,

MingW官网,要求你先装一个安装工具,再通过安装工具下载你需要的MingW程序

(说实在的,那个安装工具会搞的你很乱)

我是用“乐师”推荐给我的TDM安装工具安装MingW的

要注意的是,一定要安装32位的MinGW

我现在也不是很清楚为什么64位的MingGW为什么不行

安装好之后需要配置一下环境变量,把如下路径配置到环境变量中:

C:\TDM-GCC-32\bin

(当然你如果装到别的路径下去了,那就另当别论)

然后你应该把Nim的bin路径也配置到环境变量中:

C:\Nim\bin

这样你就可以使用命令行来编译你的程序了

(你用aporia官方提供的IDE来编译你的程序,默认是没有设置--app:gui开关的)

开发GUI程序

好下面我们写个程序

# test a Windows GUI application

import
  windows

#proc MessageBox(hWnd: int, lpText, lpCaption: CString, uType: uint): int
#  {stdcall, import: "MessageBox", header: "<windows.h>"}

discard MessageBox(0, "中文试试", "Nimrod GUI Application", 0)

在这个程序中我们使用了windows模块

你可以在这里看到windows模块提供的API:http://nim-lang.org/docs/windows.html

你还可以使用IUP模块GTK模块开发GUI程序

编译并执行程序

然后通过下面的命令行,来编译这个程序:

nim c --app:gui -d:release  wingui.nim

注:

nim是编译器

c是compile的缩写

-app:gui是编译成gui程序的开关

-d:release是release编译开关

wingui.nim是程序源文件

这行命令必须在程序源文件所在目录下执行

命令执行完成后,在同目录下会生成可执行文件

运行这个程序,你会发现中文乱码:

这是你只要把源码文件改成ANSI或者gb2312编码,重新保存

然后再编译一次,就好了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏雪胖纸的玩蛇日常

django2+uwsgi+nginx上线部署到服务器Ubuntu16.04(最新最详细版)

36260
来自专栏惨绿少年

KICKSTART无人值守安装

1.1 环境说明 [root@test ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [roo...

30500
来自专栏程序员叨叨叨

听说你使用Android Studio遇到了一些小困惑

这个问题通常出现在Android Studio更新失败的时候,原因是download http://services.gradle.org/distributi...

11240
来自专栏编程坑太多

『高级篇』docker之Python开发信息服务(11)

PS:thrift的开发流程是: 先定义thrift的文件,然后通过命令生成对应的python代码。通过实现定义的thrift方法,来完成thrift的调用。

31530
来自专栏.net core新时代

nginx+iis实现负载均衡

  最近在研究分布式系统架构方面的知识,包括负载均衡,数据库读写分离,分布式缓存redis等。本篇先从负载均衡服务架构入手,关于负载均衡百度百科的定义如下:负载...

37580
来自专栏Hadoop实操

HDFS添加 NFS Gateway 角色实例启动失败问题及解决办法

昨天登录公司测试集群的时候,发现HDFS存在告警信息,查看详细信息,发现 NFS Gateway 进程退出,尝试重启该角色实例,执行重启操作后,报如下异常:

1.7K40
来自专栏菩提树下的杨过

redis 学习笔记(6)-cluster集群搭建

上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,...

22150
来自专栏10km的专栏

cmake: 使用jom实现msvc工程并发编译提高速度(-j)

msvc提供的nmake并没有并发编译功能(类似gcc make的-j参数指定并发编译的任务数), 而第三方工具jom(http://wiki.qt.io/...

26580
来自专栏菩提树下的杨过

redis 学习笔记(6)-cluster集群搭建

上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,...

23650
来自专栏令仔很忙

手把手教你搭建和配置Jenkins环境

  搭建Jenkins,首先得安装Jenkins,安装的问题就不说了,一般第一次安装完成后,服务会直接在浏览器中运行,网址:http://localhost:...

55110

扫码关注云+社区

领取腾讯云代金券