自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

现代C++风格的GUI库

http://nanapro.org

  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 ngx_cache_purge

由于nginx直接由ubuntu的apt install nginx安装不支持ngx_cache_purge,因此需要不重新编译nginx的情况下,单独生成ngx_cache_purge模块。5,拷贝ngx_http_cache_purge_module.so到/usr/lib/nginx/modules/4,在nginx源码的objs目录下会生成ngx_http_cache_purge_module.so。然后下载对应版本的nginx源码,和ngx_cache_purge源码。在events前添加。

2024-01-10 05:17:27 435

原创 使用listbox的内嵌控件

Listbox支持内嵌控件是Nana 1.1中引入的新功能。

2015-07-12 21:20:27 2272 1

原创 游览 Nana 1.0

Nana 1.0是Beta阶段的第一个版本

2015-02-09 00:57:34 3299 2

原创 使用Nana 0.8创建一个简单的记事本

本示例创建一个简单的记事本

2014-10-13 16:52:56 3051 1

原创 创建一个图形界面的计算器

在这个示例中,我们将创建一个图形jiemie

2014-10-13 16:19:07 12288 3

原创 Nana 0.8发布了

Nana 0.8 will be the first release of evolution. In this release, some interfaces have been changed, new interfaces are not compatible with version 0.7.x. This release will not contain a C++03 version

2014-10-12 21:55:00 2763 9

原创 Nana开发:版本0.5

在0.5中,引入了一个新的布局类 - class place,该类提供了一个更加简便的方法来实现窗口的布局。class place是将于之绑定的窗口根据设计划分为几个区域,然后将子控件加入到各个区域中。本篇用一个示例来讲解class place的基本用法,然后再介绍place的详细规则。开始示例现在,创建一个用于验证用户账号的登录界面。这个程序看起来如下图所示:首先

2013-04-15 23:50:11 2009 5

原创 Nana开发: 版本0.2.3

本次更新主要改进了对X11的支持,例如拖放事件和dataexch(剪贴板),这意味着Nana C++ Library可以更好地工作在Linux(X11)平台上。除此之外,本次更新还包含了其他的新特性。class msgboxclass msgbox用于显示一个模式窗口并提示一条简短的信息。一个简单的例子:nana::gui::msgbox m(STR("msgbox e

2012-05-16 21:12:53 2432 16

原创 Nana开发: 图像处理算法接口的介绍

在0.2.2版本中,Nana C++ Library提供了一个灵活配置图像处理算法的机制。对于一个抽象的算法,可能会有多种实现。例如,Nana C++ Library提供了两个图像缩放算法,他们分别是双线性插值算法(bilinear interoplation)和最邻近插值(proximal interoplation),用户可以根据不同的需求来切换算法。参考例子:http://stdex

2012-05-16 17:24:09 2724

原创 Nana开发:图像混合

混合图像是用于创建强大且迷人的用户界面的重要方法之一。这是一篇向导,用于展示如何使用Nana库来混合图像并显示混合的结果。在开始这个向导之前,我们需要准备两张用于混合的图片。image01image02这两张图片是PNG格式的,在使用之前,我们需要开启Nana库对PNG的支持。现在,我们来编码:#include #include #i

2012-02-22 15:41:41 2731 7

原创 开启Nana C++ Library对PNG的支持

在0.2版的发布中,Nana提供了对PNG的支持,但是在默认状态下,为了方便快捷地配置程序库,Nana关闭了支持PNG的特性。对PNG的支持,Nana C++ Library是使用的libpng(www.libpng.org)。因此,有两个不同的策略来支持这一特性。1,使用Nana库附带的libpng2,使用操作系统中提供的libpng,这意味着我们需要自行地安装libpng。

2012-02-22 15:24:42 3636 5

原创 Nana:防止耗时处理导致界面的阻塞

绝大多数事件回调函数都会很快地执行完成,并不会造成对界面的假死。Nana库的事件模型是对事件队列的顺序处理,这意味着当前一个事件处理函数完成之后才会调用下一个。考虑下面的例子:#include #include #include class example : public nana::gui::form{public: example() {

2012-01-04 13:57:50 2980 9

原创 Nana C++ Library:初探

尽管C++是一门强大且语法灵活的语言,实际上,许多程序员并不喜欢用C++开发GUI,这是因为用C++来开发GUI太过复杂。现存的一些C++ GUI框架定义了一些规则,它需要你写出一些死板的代码才能运行,这总会导致一些问题,例如,让你在深度的继承层次中纠结,难以维护。现在,有另一个选择了,Nana C++ Library,一个纯粹的C++库,让你能完全发挥你的C++知识/技巧/手法来编写GUI,这是

2011-12-16 14:10:19 9302 9

原创 函数对象与Lambda

该篇展示两个基本的概念:函数对象和lambda,其中函数对象是构建Nana的基础。函数对象(英文上叫function object或functor)就是能像函数那样调用的对象,一般地讲,就是定义了函数调用操作符operator()的类对象。 函数对象是一项非常不错的技术,与普通函数相比更加通用,因为它可以保持调用之后的状态,并且可以对单个对象的初始化和检测,这点通过static的局部变量来实现

2011-12-06 12:34:31 2539 4

原创 Hello Nana C++ Library

Hello Nana项目网址介绍贴我们开始一个简单的程序,然后一行一行的讲解。1    #include2    #include 3    int main()4    {5        using namespace nana::gui;6        form fm;7        label lab(fm, nana::si

2011-11-05 11:09:06 7145 34

原创 Litecore – 浏览器排版渲染引擎开发手记(二)

解析HTML文档 为了让引擎能够理解HTML文档,需要将文档中的每个单词划分成可被程序理解的标记,因此,需要词法分析器是必须的,也就是tokenizer模块。在仔细分析了HTML的结构之后,发现这个tokenizer的设计与其他编程语言的词法分析器可以有一些不同,只需要设计6个t

2011-07-14 11:11:34 2416

原创 Litecore – 浏览器排版渲染引擎开发手记

此系列的文章用于记录Litecore(http://sourceforge.net/projects/litecore)的开发过程,其中所提到的内容可能会因为认识上的错误或设计上的失误与不足在以后的开发中被否定掉。该系列文章不讨论所谓的市场需求及展望,只涉及C++/HTML/CS

2011-07-12 23:00:59 2829 4

原创 混沌IN C++::所谓的隐晦

难度: 很多人抱怨C++有太多隐晦语法的问题。今天,来谈两个隐晦的语法问题。 一,关于Declarator。有时候,我们会故意制造一个便于理解的编译错误。templateclass static_error{public:    template static_error(T){}};templateclass static_erro

2009-05-08 00:03:00 3265 10

原创 混沌 IN C++::Generic Programming

难度:  Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* F

2008-10-03 14:29:00 1685

原创 混沌 IN C++::is-a的误解

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

2008-09-16 15:14:00 2219 4

原创 混沌 IN C++::转换函数

Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font

2008-09-08 14:48:00 1985 3

原创 混沌 IN C++::Argument Dependent Lookup

难度: Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* F

2008-09-03 21:39:00 2936 4

原创 打造自己的Iterator Adapter – File Iterator

介绍有时,我们需要列出Windows中某个文件夹里的文件。按照常规的方法就是把搜索到的文件在某个链表的尾端插入。例如下面的伪码所示void list_file(const std::string& path, file_list& flist){     while(判断path是否有文件)     {           filst.push_back(文件名);           查找下一个

2005-03-05 03:39:00 5057 2

原创 磨刀霍霍向STL::distance

平时无所事事,无聊中就把STL的代码翻出来看,看到部分代码时就突然有了这个想法,其实这只能算个娱乐项目(可能我是极端份子或者可能是变态),如果你现在也无聊,那不妨也来和我变态一把,嘿嘿这里说的STL其实是SGI STL,下面所有的STL字样都是指的SGI STL,我的STL代码其实就是Dev-C++里面带的。好了废话也差不多说完了,现在正式开始,请把刀拿好,上STL 首先来看看 S

2004-09-14 02:39:00 7056 10

原创 混沌 IN C++::Pointers-to-Member functions 解迷

难度:文前说明:下面涉及到的内容讨论了在GCC 3.2和MS Visual C++6/.NET中,指向成员函数的指针的实现。如果您将本文读完,别忘了文章最后的一点说明。以前有过将指向成员函数的指针转换成一个long而被编译器拒绝的经历吗?这里将说出真相。先来一段颇为“神奇”的代码struct Base1{   int i;   Base1():i(1){}   void

2004-07-23 02:25:00 3532 11

原创 混沌 IN C++::Exception思维

难度: 您的代码中有Exception吗?作为C++中最具争议的东西,就连在使用上也不是一件容易的事,您怎么看待异常呢? 如果想判断一个对象是否构造成功,我们可以用以下的三种方法 1、 struct A { A(int& i) {     //其他代码     if(构造失败)          i = 0;      else          i = 1; } };   int i; A

2004-07-11 21:20:00 3393 12

原创 C++实践::Template实现Observer模式

难度: 用C++ template实现的通用Observer代码。本文并无神秘之处,template只是运用在对状态信息类型的泛化。过多的细节就没必要不讲了,我想各位看官比我更明白吧 /* Design Pattern implementation with C++ template - Observer Author: Jinhao Data: 5/Jul/2004 */ #ifndef _OB

2004-07-05 08:32:00 4141 2

原创 混沌 IN C++::Template Metaprograms

难度:   文前说明:文中涉及到的观点并不是要求你去遵循它,而本文只相当于一篇“科普文章”。其中的关于template的语法在这里就不过多介绍了。例如,下文中提到的条件,都是要意识到是编译期常量。 C++ template 为我们提供了编译期计算的功能。编译器在处理template时,实际上相当于一个解释器的作用。充分利用template可以提高代码的运行速度,可以降低代码维护的复杂度,还可以为代

2004-06-29 05:28:00 5873 29

原创 混沌 IN C++::模板参数的奥秘

难度:   先来一道思考题 templatetypename T, T* p> struct A {};   假若有个int类型的对象i,那么对于下面这段代码 Aint, &i> obj; 这个是合法的吗?     答: Aint, &i> obj; 可能合法 或 可能不合法。 什么东西可以当作模板的参数呢? 部分的内建类型和用户类型,和部分非类型的东西也可以当作模板参数。 非类型模板参数的一个要

2004-06-29 05:26:00 6325 14

原创 混沌 IN C++::动态资源管理陷阱

难度: 先阅读下面的代码然后来解答下面的那个问题   struct A {};   int main() { A *p = new A; p->~A(); free(p); }   问题:new/delete 和 malloc/free 有哪些区别?       答:new/delete 会在分配的内存上调用对象的构造函数和析构函数来初始化和销毁对象,而 malloc/free 却不能。更重要的

2004-06-29 05:25:00 6186 17

原创 混沌 In C++::是类型?还是函数调用?

难度:文前提醒:看这篇文章时须家长陪同并引导,以免走火入魔 先看看下面的代码?    struct A{     A(){}}; templatetypename T>void func(T() ){} int main(){   A a( A() );    //(1), OK   func( A() );   //(2), W

2004-06-29 05:22:00 20049 107

原创 偷窥Boost Conversion Library(一)

开门见山 废话少说一、与多态类型相关的转换1、 polymorphic_cast与dynamic_castdynamic_cast可以安全地将一个指向多态对象的指针向下转换为派生类指针。但是,当dynamic_cast转换失败时,返回的是NULL,也就是说,dynamic_cast的转换成功与否是在运行期确定,而不像其他C++内建cast那样在编译期确定。换言之,如果在进行dyna

2004-04-19 19:02:00 4669 1

原创 偷窥Boost Conversion Library(二)

//(接上)三、与值和类型相关的类型转换1、 lexical_cast在程序开发中,往往需要将数字型对象的值转换为字符文本格式,或反之操作。我们在C/C++标准程序库中可以找到这样的函数来进行转换,例如atoi。但是他们都有个通病,使用复杂,缺少扩展性,更重要的是不够安全。使用lexical_cast就可以把这样的操作简单化。 try{     int i= 100;

2004-04-18 23:57:00 2843

Nana Demo(FreeMe, CodeShow)

Nana C++ Library演示程序。FreeMe包含源代码,其bin目录下也有可执行程序。http://stdex.sourceforge.net

2009-10-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除