一个简单图形界面框架XYGui的设计与实现 (五)
来源:互联网 发布:不能让算法决定内容 编辑:程序博客网 时间:2024/05/06 21:38
(同步个人博客http://sxysxy.org/blogs/72 到csdn)
到这里,没有什么技术含量的东西差不多就说完了,剩下的就是更没有技术含量的体力活了。
修改XYGui_ext.c里面的窗口过程,让窗口能够响应更多的交互事件:
比如支持拖拽文件到窗口:
case WM_DROPFILES: // Drop files into the window // wParam is HDrop (Win32) __tmpcptr1__ = (char *)malloc(sizeof(char) * 256); __tmp2__ = DragQueryFile((HDROP)wParam, 0xffffffff, NULL, 0); __arg1__ = rb_ary_new(); for(__tmp1__ = 0; __tmp1__ < __tmp2__; __tmp1__++) { DragQueryFile((HDROP)wParam, __tmp1__, __tmpcptr1__, 256); __arg2__ = rb_str_new2(__tmpcptr1__); rb_funcall(__arg1__, rb_intern("push"), 1, __arg2__); } free(__tmpcptr1__); DragFinish((HDROP)wParam); __arg2__ = rb_hash_new(); rb_hash_aset(__arg2__, ID2SYM(rb_intern("files")), __arg1__); XYWidgetCall("ON_DROPFILES", self, __arg2__); break;
相应菜单,按钮点击等
__tmp1__ = LOWORD(wParam); if(lParam == 0) // Command caused by menu { rb_funcall(self, rb_intern("menuCall"), 1, INT2NUM(__tmp1__)); }else { // Command caused by a child control switch(HIWORD(wParam)) { case EN_UPDATE: rb_funcall(self, rb_intern("childCall"), 4, INT2FIX(__tmp1__), ID2SYM(rb_intern("ON_CHANGED")), self, Qnil); break; case EN_CHANGE: rb_funcall(self, rb_intern("childCall"), 4, INT2FIX(__tmp1__), ID2SYM(rb_intern("ON_CHANGING")), self, Qnil); break; default: rb_funcall(self, rb_intern("childCall"), 4, INT2FIX(__tmp1__), ID2SYM(rb_intern("ON_COMMAND")), self, Qnil); break; } } break;
等
其实你应该发现了,当你封装好XYApp,XYWidget,XYWindow之后,想要其他种类的控件,比如按钮,文本框,大可以复制/粘贴,改一下类名,重写下create方法,就好了…完全就是体力活了,多查查msdn,这些都出来了…
对opengl的支持:
需要api SetPixelFormat一下,使得控件支持opengl绘图,然后用system32下opengl32.dll配置好绘图上下文环境即可,具体见xy_gllabel.rb
def enableGL #pfd @dc = WinAPI.call("user32", "GetDC", @handle) pfd = [40, 1, #size = 40, version = 1 37, #support opengl, double buffers, and draw to window 0, #pixel type :RGBA 24, #color bits 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, #0 * 18 Do not care... 0, #layerMask 0, 0].pack("ssLccccccccccccccccccccLLL") format = WinAPI.call("gdi32", "ChoosePixelFormat", @dc, pfd) WinAPI.call("gdi32", "SetPixelFormat", @dc, format, pfd) @glrc = WinAPI.call("opengl32", "wglCreateContext", @dc) WinAPI.call("opengl32", "wglMakeCurrent", @dc, @glrc) WinAPI.call("user32", "ReleaseDC", @handle, @dc) end
基本绘图以及图片功能的支持
封装gdi/gdi+即可,不用多说…
最后,完结撒花
这一系列以XYGui为例的,讲解开发一个简单的gui库的文章就结束了。我的OI生涯也结束了呢QnQ…
0 0
- 一个简单图形界面框架XYGui的设计与实现 (五)
- 一个简单图形界面框架XYGui的设计与实现 (一)
- [综合] 一个简单图形界面框架XYGui的设计与实现 (二)
- 一个简单图形界面框架XYGui的设计与实现 (三)
- 一个简单图形界面框架XYGui的设计与实现 (四)
- 【远程调用框架】如何实现一个简单的RPC框架(五)优化三:软负载中心设计与实现
- 【远程调用框架】如何实现一个简单的RPC框架(一)想法与设计
- 一个脑残壳的框架设计与实现
- 基于Netty的RPC简单框架实现(五):功能测试与性能测试
- Java实现一个简单的RPC框架(五) 基于Socket的传输层实现
- go实现一个简单的游戏服务器框架(lotou)基本设计
- Mina框架实现最简单的服务端(五)
- 一个为OpenFlow规则分配与端点规则实施而设计的通用最优化框架(五)
- deeplearning系列(五)实现一个简单的深度神经网络
- 设计和实现一个简单的hdfs的备份恢复与容灾系统(1)
- 一个简单的matlab图形界面程序GUI
- JAVA 一个简单的图形界面计算器
- 一个简单的rpc框架的实现
- POJ 1798 Dory's Phonebook 未完成
- Excel VBA On Error Resume Next错误处理
- 网易笔试编程-统计回文
- mysql sql语句大全
- DataTable与Model格式的转换
- 一个简单图形界面框架XYGui的设计与实现 (五)
- (OK) kernel create framebuffer device - /dev/graphics/fb0
- 字符串处理操作
- 冰雹数
- 安卓自定义控件(三)实现自定义View
- how to download rpm spec source tarball
- PHICOMM无线路由器连接到另一个路由器上
- cmd下获取系统时间
- 世界八大通讯社