Linux下的Gtkmm各种实验


gtkmm的对话框实验:

  1. #include <gtkmm.h>   
  2. int main(int argc,char* argv[])   
  3. {   
  4.     Gtk::Main kit(argc,argv);   
  5.     {   
  6.         Gtk::MessageDialog msgbox("有小的生命周期的作用域,\r\n在按了按钮之后对话框会被关闭。",false,Gtk::MESSAGE_WARNING );   
  7.         if (Gtk::RESPONSE_OK==msgbox.run())   
  8.         {   
  9.         }   
  10.     }   
  11.     Gtk::MessageDialog msgbox("没有小的生命周期的作用域,\r\n在按了按钮之后对话框不会关闭。");   
  12.     if (Gtk::RESPONSE_OK==msgbox.run())   
  13.     {   
  14.     }   
  15.     Gtk::Main::run(msgbox);   
  16.     return 0;   
  17. }  

pyGtk的对话框实验

  1. msgbox=gtk.MessageDialog(buttons=gtk.BUTTONS_OK,message_format="test")     
  2. rtn=msgbox.run()             
  3. if rtn==gtk.RESPONSE_OK:     
  4.     msgbox.destroy()    

pyGtk的对话框有destroy(),gtkmm只有destroy_(),但是protected,也就是其派生类的实例才可调用。

函数指针实验

  1. #include <gtkmm.h>   
  2. #include <iostream>   
  3. #include <string>   
  4. using namespace Gtk;   
  5. using namespace std;   
  6. int Add(int a,int b)   
  7. {   
  8.     return a+b;   
  9. }   
  10. typedef int (*pAdd)(int,int);   
  11. int main(int argc,char* argv[])   
  12. {   
  13.     Gtk::Main main(argc,argv);   
  14.     pAdd pAdd;   
  15.     cout<<"Add:"<<Add<<","<<"&Add:"<<&Add<<",Add==&Add:"<<(Add==&Add)<<endl;   
  16.     pAdd=Add;   
  17.     int rtn=pAdd(1,2);   
  18.     cout<<"rtn:"<<rtn<<endl;   
  19.     pAdd=&Add;   
  20.     int r=pAdd(3,4);   
  21.     cout<<"r:"<<r<<endl;   
  22.     //Glib::ustring result(Glib::locale_to_utf8("结论:函数名即是函数的入口地址。"));   
  23.     Glib::ustring result("结论:对函数名取地与函数名的値相同都是函数的入口地址。");   
  24.     cout<<result.c_str() <<endl;   
  25.     cout<<"    使用cout输出的Glib::ustring的中文字符串是不完整的。"<<endl;   
  26.     {   
  27.         Gtk::MessageDialog msgbox(result);   
  28.         msgbox.run();   
  29.         exit(0);   
  30.     }   
  31.     main.run();   
  32.     return 0;   
  33. }  

成员函数指针实验

  1. #include "CTest.h"   
  2. CTest::CTest()   
  3. {   
  4.     //ctor   
  5. }   
  6. int CTest::Add(int a,int b)   
  7. {   
  8.     return a+b;   
  9. }   
  10. CTest::~CTest()   
  11. {   
  12.     //dtor   
  13. }  

 

  1. #include <gtkmm.h>   
  2. #include "CTest.h"   
  3. using namespace Gtk;   
  4. typedef int (CTest::*pAdd) (int,int);//pAdd是个类型   
  5. int main(int argc,char* argv[])   
  6. {   
  7.     pAdd p;//定义变量   
  8.     CTest t;   
  9.     //无法编译通过:p=CTest::Add;   
  10.     //无法编译通过:bool b=(CTest::Add==&CTest::Add);   
  11.     p=&CTest::Add;   
  12.     //error:int rtn=t.*p(1,2);   
  13.     //运算符级别: . 高于 (),而() 高于 *解引用   
  14.     //=>int rtn=(t.)[*(p(1,2))]   
  15.     int rtn=(t.*p)(1,2);   
  16.     return rtn;   
  17. }  

相关内容