当前位置:  开发笔记 > 编程语言 > 正文

如何使用带有erlang的wxWidget在窗口中绘制一条线?

如何解决《如何使用带有erlang的wxWidget在窗口中绘制一条线?》经验,为你挑选了1个好方法。

我尝试在Erlang中使用wxWidget在窗口中绘制一条线.我试过了:

wx:new(),
Frame = wxFrame:new(wx:null(), ?wxID_ANY, "Hello"),
wxDC:drawLine(50,50),

我收到一个错误:

undefined function wxDC:drawLine/2

我在这里阅读文档,但我不明白如何做到这一点:

http://www.erlang.org/doc/man/wxDC.html#drawLine-3



1> Michael..:

X Windows编程并不是那么简单,我不太确定你期望如何用[50,50]等参数绘制一条线,这最多只是一点,一条线需要2点,而wxDC: drawLine也需要知道在哪里画线,因为你可以有很多帧.

您可以创建一个这样的框架,是(使用-1而不是宏,因为我在这里使用shell):

Wx = wx:new().
Frame = wxFrame:new(wx:null(), -1, "Hello").

现在重要的一点,你不能只绘制框架,你必须注册一个回调来处理REdrawing.这是因为框架可以被任何其他窗口覆盖,或者因为你最小化它,调整它等等.实际上你不一定需要处理所有这些情况的REdraw,但你明白了.

所以,这不是最有效的,因为它通过绘制一条线来响应任何绘制事件,无论事件如何都执行重绘,但显然这将完成工作:

wxFrame:connect(Frame, paint, [{callback,
    fun(_Evt, _Obj) ->
        io:format("paint~n"),
        DrawContext = wxPaintDC:new(Frame),
        wxDC:drawLine(DrawContext, {50, 50}, {150,100}),
        wxPaintDC:destroy(DrawContext)
        end
    }]).

我在那里添加了io:format,这样你就可以看到它在与窗口交互时被调用,或者其他一些窗口与它交互,因为没有io:format调用它的效果有点不可见,除了制作确定你的窗口总是有一条线.

我还使用了绘制上下文.我不会在这里讨论它,我担心这只是你需要了解的一些关于X Windows编程的东西,但基本上,现在要注意,你需要为你的框架绘制一个绘图上下文,并使用它来实际绘制.

最后一件事,你需要实际显示框架,如果你想看到它,像这样:

wxFrame:show(Frame).

现在你应该看到一个带有线条的窗口.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有