(同步个人博客http://sxysxy.org/blogs/67 到csdn..)

前传

和dram神犇做了个交♂易,我来发布一些关于制作一个Gui库的教程。借用林则徐的两句名言来描述我现在的心情:(这里省略14个字)

简介

这里我以半年多前我开坑的 XYGui 为讲解的对象。XYGui是一个几乎完全使用ruby语言开发的,简洁快速的,支持opengl等高级功能的Gui框架,是我学OI颓废之时抽空制作的….

你需要准备:

windows系统,ruby 2.x(32位),devkit for ruby(ruby需要的这些东西都可以在 这里 下载到)+不怕折腾的强大内心。

先说点别的

  • 为什么我要做这个gui库

受不了tk难看的界面和低下的执行效率(在windows下),受不了fxruby非native的界面与对中文不良好的支持(fxruby编码的问题好像在win和Linux上都有)…(为此甚至我都与fxruby维护者要撕起来啦(x))。希望有一个自己高度理解,掌握的gui库(这样我就能快速开发出图形界面应用)。于是我一怒之下就自己写了个(x

  • 为什么选择ruby语言

除了作为我编程语言上的”母语”所带来的的特殊感情外,还有这样的原因: (就我所言) 优美的函数式编程的支持(之后泥萌将会看到,XYGui的example代码充满函数式的倾向);成熟的技术(在制作这个gui库之前,我向兰兰姐姐(泥萌说的”花姐”)学到了ruby与机器语言互相调用的姿势);想搞”大”新闻的心思(hh)

准备发车

配好环境,我们先来一发ruby调用windows api函数创建窗口的程序(注意请使用32位ruby解释器!,64位的解决办法我以后会给出)

假设你是会用一点ruby的,也会些windows api,那么复制下面的代码,到window_test.rb,执行它。代码看起来还让人觉得很麻烦呢。

require 'win32api'TITLE = "Window_Test"  #窗口标题
CLASS_NAME = "Window_Test_Class"  #窗口类# API
def callAPI(dll, procname, *arg)Win32API.new(dll, procname, arg.map{|e| e.is_a?(String)? "p":"L"}.join, "L").call *arg
end#prepare
hInstance = callAPI("kernel32", "GetModuleHandle", 0)
DefProc = callAPI("kernel32", "GetProcAddress", callAPI("kernel32", "GetModuleHandle", "user32"), "DefWindowProcA")#window class
wndclass = [0, DefProc, #lpfnWndProc0, 0, hInstance,callAPI("user32", "LoadIcon", hInstance, 32512), #IconcallAPI("user32", "LoadCursor", 0, 32512), #IDC_ARROW6, #COLOR_WINDOW_FRAME0, CLASS_NAME].pack("LLLLLLLLLp")if callAPI("user32", "RegisterClass", wndclass) == 0callAPI("user32", "MessageBox", 0, "Window class Error", "Error", 0)exit
endhWnd = callAPI("user32", "CreateWindowEx", 0, CLASS_NAME, TITLE,0xcf0000 | 0x10000000, #WS_OVERLAPPEDWINDOW | WS_VISIBLE100, 100, 400, 300, 0, 0, hInstance, 0)msg = "\0"*28 #MSG
while callAPI("user32", "GetMessage", msg, 0, 0, 0) callAPI("user32", "TranslateMessage", msg)callAPI("user32", "DispatchMessage", msg)
end

不出意外的话,会出现这样一个窗口

能拖拽,缩放。但是如果你是在命令行里面启动这个脚本的话,点击窗口右上角的x,然后会发现其实脚本并没有退出,因为我们是并没有处理按下x退出这样的事件的。。。所以只是关掉了窗口,程序并没有退出。但是至少窗口出来了!

但是

显然你是不希望每次都要写那么多的,你是希望能够把它封装起来,成为Gui库。好我当然会继续讲的….

第(一)节就到这里啦

一个简单图形界面框架XYGui的设计与实现 (一)相关推荐

  1. Matlab中如何使用appdesigner设计工具建立一个简单的界面

    Matlab中如何使用appdesigner设计工具建立一个简单的界面(数据的输入.处理和保存) 以使用不同算法处理图像的功能为例 建立一个新的空白界面,matlab中输入appdesigner,打开 ...

  2. 一个简单交互界面的实现

    一个简单交互界面的实现 这个界面本来是今年做NXP智能车的时候为了更改参数方便设计的,这其实又是一套用状态机的思想来实现的一个显示框架. 这个显示界面只是一个操作逻辑,所以它的的移植性还是挺高的,虽然 ...

  3. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  4. 用C#实现一个简单的图书管理系统(课程设计)

    用C#(sharp)实现一个简单的图书管理系统(课程设计) 学校的数据库课程结束了,要求完成一个课程设计,于是我用C#实现了一个简单的图书管理系统(ADO.NET) 源码放在了github上,仅供参考 ...

  5. 做一个支持图形界面的操作系统(上)

    分类: OS2006-05-01 20:00 856人阅读 评论(0) 收藏 举报 原文:http://www.binghua.com/Article/Class6/Class7/200409/267 ...

  6. 做一个支持图形界面的操作系统(zz)

    原文:http://www.binghua.com/Article/Class6/Class7/200409/267.html (转载及引用请注明明原作者及出处) (pdf: http://www.b ...

  7. 搭建一个简单springboot后端框架

    前言 框架知识是每个程序员都应该或多或少都要有所了解,作为后端开发更是以后进阶架构师必备的知识储备:以此为出发点,我们可以从搭建一个简单的后端框架开始,了解相关的技术点和搭建思路. 我们可以从创建项目 ...

  8. HTML5.0实例练习(三) --制作一个简单登陆界面

    今天分享一个简单的实例--制作一个简单登陆界面 代码如下: 代码执行结果如下: 这里面用到了<table><th><td><tr>这些表格标签,这些在这 ...

  9. 快速搭建一个简单的SSM框架

    1.准备工作 mysql数据库 idea工具 说明:本次是搭建一个SSM框架,首先要确保电脑配置好1.8以上的JDK(因为1.8以下的jdk某些东西不支持),mysql数据库直接使用不方便可以安装一个 ...

最新文章

  1. 快速清除SQL Server数据库日志的方法
  2. Python基础(list和tuple)可变集合和‘不可变’集合
  3. java 泛型int_Java 泛型
  4. 智能实验室-身份证号码查询(IDio) 1.4.0.140
  5. mapreduce简单的gzip压缩
  6. LeetCode Smallest Range
  7. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...
  8. 很抱歉 此功能看似已中断 并需要修复。请使用Windows控制面板中的“程序与功能”选项修复
  9. bootstrap怎么强制不换行_【Word考点】页面设置:页边距、分隔符要怎么设置?如何分栏?...
  10. 手机浏览器被强制跳转_Azure front door 强制http redirect to https
  11. cvFloodFill() 漫水填充算法
  12. 解压文件win10自动删除
  13. SEM实验室常见仪器计量问题详解及仪器标准大全附
  14. Product Requirement Document
  15. Java程序设计(二)
  16. 中国石油大学华东2013-2014-1c语言a卷_答案,中国石油大学(华东)2012—2013学年第二学期期中A卷试卷答案...
  17. 纪念海子离去20周年
  18. JS获取时间戳 10位数时间戳
  19. 摘自_sina_海派与京派画作_吴昌硕_徐渭_齐白石
  20. [前端] 前端bootstrap col-xs-6 col-md-3的布局意思

热门文章

  1. ACPI\HPQ0004、ACPI\HPQ0004
  2. css 立体字效果text-shadow
  3. FPGA BPI FLSAH远程升级Quick boot
  4. 鼠标左键单击双击冲突的一种解决方法
  5. js保留小数位数,四舍五入和非四舍五入
  6. 初级Matlab画图经验简单记录以及错误使用plot矢量长度必须相同问题解决
  7. 3.Libgdx扩展学习之Box2D_夹具
  8. 凝聚共识,共话发展,“五真•黄十字”引领亚健康专业调理机构标准化建设再提速
  9. tty文件命令 linux,什么是Linux上的TTY? (以及如何使用tty命令) | MOS86
  10. c mysql日期时间格式_mysql 日期和时间格式转换实现语句