Golang、python在window下设计界面UI第一节。

说起界面,这是一道坎,有人或许会说,GO为什么要写界面UI呢,这本来不是GO擅长的部分,也不是GO该干的事情,这句话我就不爱听了。

举个列子,比如我们用GO语言写个服务器,这个服务器就是用作直播视频聊天的服务器,它的功能包含直播房间在线列表人员,当然GO语言设计的时候,服务器记录了在线列表的 userId、roomId、token、level、ip、chatConent等等。比如我们要监视某个房间的人员列表,看他是否用协议刷了人气,其实就是统计一个IP上有多少帐号,或者监控房间里面是否有机器人在发言,并随时封禁它,或者统计在线直播列表的人数等等,我们用命令行是能够操作上述的东西,但是这么多的动作你能记得住那么多的命令吗?

而且上述那么多的东西显示在黑色框子里面,眼睛看久了不累吗?一旦命令行用错了,承担起后果吗?

在命令行里面去选择一个用户或者房间那是一件多么痛苦的事情啊。

而且这些后台管理员又不是技术人员,很可能会出错。

因此界面是必须有的。

GO语言中选择界面是一件纠结的事情,github上面GO-UI要么项目几年没人更新了,要么简单的功能让人不多看一眼。

比如 谷歌自带gxui已经死掉了,goqt的下载一大堆的东西去配置,go-gtk配置也麻烦,而且功能也是简单。

假如在linux下,我建议还是选择后面的两个,那是没得选择的选择。

在WINODWS 目前推荐https://github.com/lxn/walk 这个东西,目前在GITHUB上最新的版本是需要GO1.8去构建的,否则百分百会出错。

下载下来看下demo

有复制粘帖、数据绑定、图片显示、webkit、绘图、listbox、托盘、tab、滑动条、拖动文件、进度条、按钮、选择框、单选框等等。功能挺全面的,可以去实验下。

 

先来了解下句柄,什么叫做句柄?句柄可以说是windows上集合所有打开了的界面程序上的控件ID一样,代表了唯一身份,其实底层还是指针,每次打开程序,句柄由系统随机分配命名,不存在两个句柄是一样的。句柄包含了窗口句柄和控件句柄。

walk下载下来的包这么小,而且编译出来的程序也这么小,那就肯定是调用了WINDOWS内置的一些com组件和active控件,这些东西存在于DLL中,一般位于在system32目录下或者程序运行的当前目录下,像QT5这些不是调用window内置的,因此QT编译出来的程序是找不到控件句柄的。比如QQ、YY、迅雷这些软件是找不到控件的句柄的,只能找到窗口句柄,因为这些控件是DX画出来了。

句柄是一个类似整数一样的数值。

在windows设计不同语言的交互的时候,dll文件是一条逃不过去的坑,先来看下C/C++、GO的类型不同的定义

 

Win32 C/C++ golang 字符对照表

    WIN32类型        C/C++ 类型            GO 类型
    HANDLE             void *                    uintptr
    BYTE                  unsigned char        uint8, byte
    SHORT               short                      int16
    WORD               unsigned short       uint16
    INT                    int                          int32, int
    UINT                 unsigned int           uint32
    LONG                long                       int32
    BOOL                int                           int
    DWORD            unsigned long         uint32
    ULONG             unsigned long         uint32
    CHAR                char                        byte
    WCHAR             wchar_t                   uint16
    LPSTR                utf8/char *              *byte
    LPCSTR              const utf8/char *     *byte, syscall.StringBytePtr(), xc.UTF8PtrToSting()
    LPWSTR             wchar_t *                 *uint16
    LPCWSTR           const wchar_t *        *uint16, syscall.StringToUTF16Ptr()
    FLOAT               float                          float32
    DOUBLE            double                      float64
    LONGLONG       __int64                       int64
    DWORD64         unsigned __int64        uint64

 

 

 

转载于:https://my.oschina.net/u/248241/blog/861547

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值