Linux下的Gtkmm各种实验
Linux下的Gtkmm各种实验
gtkmm的对话框实验:
- #include <gtkmm.h>
- int main(int argc,char* argv[])
- {
- Gtk::Main kit(argc,argv);
- {
- Gtk::MessageDialog msgbox("有小的生命周期的作用域,\r\n在按了按钮之后对话框会被关闭。",false,Gtk::MESSAGE_WARNING );
- if (Gtk::RESPONSE_OK==msgbox.run())
- {
- }
- }
- Gtk::MessageDialog msgbox("没有小的生命周期的作用域,\r\n在按了按钮之后对话框不会关闭。");
- if (Gtk::RESPONSE_OK==msgbox.run())
- {
- }
- Gtk::Main::run(msgbox);
- return 0;
- }
pyGtk的对话框实验
- msgbox=gtk.MessageDialog(buttons=gtk.BUTTONS_OK,message_format="test")
- rtn=msgbox.run()
- if rtn==gtk.RESPONSE_OK:
- msgbox.destroy()
pyGtk的对话框有destroy(),gtkmm只有destroy_(),但是protected,也就是其派生类的实例才可调用。
函数指针实验
- #include <gtkmm.h>
- #include <iostream>
- #include <string>
- using namespace Gtk;
- using namespace std;
- int Add(int a,int b)
- {
- return a+b;
- }
- typedef int (*pAdd)(int,int);
- int main(int argc,char* argv[])
- {
- Gtk::Main main(argc,argv);
- pAdd pAdd;
- cout<<"Add:"<<Add<<","<<"&Add:"<<&Add<<",Add==&Add:"<<(Add==&Add)<<endl;
- pAdd=Add;
- int rtn=pAdd(1,2);
- cout<<"rtn:"<<rtn<<endl;
- pAdd=&Add;
- int r=pAdd(3,4);
- cout<<"r:"<<r<<endl;
- //Glib::ustring result(Glib::locale_to_utf8("结论:函数名即是函数的入口地址。"));
- Glib::ustring result("结论:对函数名取地与函数名的値相同都是函数的入口地址。");
- cout<<result.c_str() <<endl;
- cout<<" 使用cout输出的Glib::ustring的中文字符串是不完整的。"<<endl;
- {
- Gtk::MessageDialog msgbox(result);
- msgbox.run();
- exit(0);
- }
- main.run();
- return 0;
- }
成员函数指针实验
- #include "CTest.h"
- CTest::CTest()
- {
- //ctor
- }
- int CTest::Add(int a,int b)
- {
- return a+b;
- }
- CTest::~CTest()
- {
- //dtor
- }
- #include <gtkmm.h>
- #include "CTest.h"
- using namespace Gtk;
- typedef int (CTest::*pAdd) (int,int);//pAdd是个类型
- int main(int argc,char* argv[])
- {
- pAdd p;//定义变量
- CTest t;
- //无法编译通过:p=CTest::Add;
- //无法编译通过:bool b=(CTest::Add==&CTest::Add);
- p=&CTest::Add;
- //error:int rtn=t.*p(1,2);
- //运算符级别: . 高于 (),而() 高于 *解引用
- //=>int rtn=(t.)[*(p(1,2))]
- int rtn=(t.*p)(1,2);
- return rtn;
- }
评论暂时关闭