zoukankan      html  css  js  c++  java
  • 用Go写Windows桌面应用 使用资源文件

    这篇文章具有很强的时效性,是在2012年2月16日写的,这时Go1还没有发布,当前的Go编译器还无法嵌入资源文件。

    上篇。我们做出了一个简单的窗体,但有两个重大缺陷:没有程序图标和没有应用系统主题。现在我们就来着手解决。

    使用图标和系统主题,并将资源文件签入exe

    创建一个资源文件(推荐使用ResEdit),在其中加入图标(用作程序图标)和一个manifest文件(用于启用系统主题),如下图所示。

    image

    现在代码目录里面应该拥有以下文件。

    image

    之后,就要用到windres这个工具了,它的作用是把一个资源文件(*.rc)编译成*.o,之后就可以使用Go的pack工具把*.o一起包装到exe文件里。命令行如下。

    windres resource.rc -o temp-rc.o

    go tool 8g app.go

    go tool pack grc _go_.8 app.8 temp-rc.o

    go tool 8l –s –Hwindowsgui –o app.exe _go_.8

    现在可以看到我们的app.exe已经拥有程序图标了。

    image

    运行之后可以看到,系统主题也有了。

    image

    至此,已经能用Go开发一些小工具了。另外,gform还提供了从资源文件中读取ico、png、jpg的接口,为自绘控件提供了便利。

    资源文件的其他相关函数

    读取图片资源

    gform.NewBitmapFromResource(instance w32.HINSTANCE, resName *uint16, resType *uint16, background Color) (*Bitmap, error)

    用法

    //此处对应资源文件中的ID

    IDR_DROPARROW = 108

    bmp, err := gform.NewBitmapFromResource(

        gform.GetAppInstance(), //应用程序实例

        syscall.StringToUTF16Ptr("PNG"), //资源文件中的资源类型

        w32.MakeIntResource(IDR_DROPARROW), //资源ID

        gform.RGB(139, 190, 37)) //透明填充色

    读取图标资源

    gform.NewIconFromResource(instance w32.HINSTANCE, resId uint16) (*Icon, error)

    用法

    IDI_ICON1 = 101

    ico, err := gform.NewIconFromResource(

        gform.GetAppInstance(), //应用程序实例

        w32.MakeIntResource(IDI_ICON1)) //图标资源ID

     

    读取对话框资源

    gform.NewDialogFromResId(parent Controller, resId uint) *Dialog

    用法

    IDD_MAIN = 103

    mainform = gform.NewDialogFromResId(nil, IDD_MAIN)
    mainform.Center()
    mainform.Show()

    这个就有意思了,在没有完整的窗体设计器出现之前,ResEdit已经可以协助很多控件定位的工作了!Smile

  • 相关阅读:
    移动及pc端实现签名功能
    中文字符长度与英文字符长度的计算
    IE8部分兼容问题及解决方法
    如何本地搭建手机可访问的web网页
    MYSQL索引的作用和创建
    HTTP协议
    data.json
    axios
    axios基本用法
    Component 初识组件
  • 原文地址:https://www.cnblogs.com/AllenDang/p/2354109.html
Copyright © 2011-2022 走看看