(同步个人博客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. react 组件的属性
  2. 自学python网站推荐-推荐自学python必入的神仙网站
  3. ASP.NET 3.5 新特性开发向导实践(附项目源码下载)
  4. linux系统重启网络delaying initialization错误的解决方法
  5. centos7 卸载Qt5
  6. poj2392 Space Elevator
  7. SQL 快速入门2.1
  8. CentOS7 安装MongoDB 3.0服务
  9. python内建函数是什么意思_python内建函数是什么意思
  10. 256 变 4096:分库分表扩容如何实现平滑数据迁移?
  11. 最详细 Spring Boot 入门(-)
  12. 2021年起重机械指挥考试资料及起重机械指挥理论考试
  13. PHP云软件短信接口,Thinkphp对接华为云短信接口
  14. 网络时代人物标签(两种)
  15. 告别UAC恼人的弹窗
  16. Win10开了hdr灰蒙蒙的怎么办?
  17. armel、armhf和arm64
  18. 仓库摆放示意图_仓库合理堆放标准,货物入库摆放规范
  19. 为什么机油使用后变红_汽车机油用完后放出油红色怎么回事
  20. 把三角函数以及反正弦三角函数的导数

热门文章

  1. 笔记本卡顿不流畅是什么原因_为什么笔记本总是卡顿?罪魁祸首原来是它们!...
  2. 印刷名片用什么格式的文件好?
  3. 少儿编程:mBlock慧编程:程小奔
  4. 如何快速的下载openstack的所有源代码
  5. qrcode生成二维码微信长按无法识别问题
  6. jira 邮件服务器 535,jira小工具与邮件发送
  7. docker离线安装并导入镜像
  8. 让我们一起写一个前端监控系统吧!
  9. 唐诗300笔记查询,Ajax发送接收,
  10. 奇葩说框架之 Vue更新机制