真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++GUI之wxWidgets(2)-hello,world-創(chuàng)新互聯(lián)

目錄
    • wxWidgets的頭文件
    • 事件
    • main入口函數(shù)
    • 狀態(tài)欄
    • 事件處理程序

創(chuàng)新互聯(lián)公司企業(yè)建站,十載網(wǎng)站建設經(jīng)驗,專注于網(wǎng)站建設技術,精于網(wǎng)頁設計,有多年建站和網(wǎng)站代運營經(jīng)驗,設計師為客戶打造網(wǎng)絡企業(yè)風格,提供周到的建站售前咨詢和貼心的售后服務。對于成都做網(wǎng)站、網(wǎng)站建設中不同領域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。wxWidgets的頭文件

首先必須包含wxWidgets的頭文件。
1、可以在一個文件一個文件的基礎上完成(如wx/window.h)
2、使用一個全局包含(wx/wx.h),其中包括大多數(shù)常用的頭文件(雖然不是所有的頭文件,因為wxWidgets的頭文件太多,無法拉入所有的頭文件)。
對于支持預編譯頭文件的平臺,如WX_PRECOMP所示,這個全局頭文件wx/wx.h已經(jīng)包含在wx/wxprec.h中,所以我們可以只需要包含wx/wxprec.h。

#include#ifndef WX_PRECOMP
    #include#endif
事件

實際上,每個應用都應該定義一個派生自wxApp的新類。通過重寫wxApp的OnInit()虛方法,程序可以被初始化,例如創(chuàng)建一個新的主窗口。

現(xiàn)在程序如下了

#include#ifndef WX_PRECOMP
    #include#endif


// application class
class MyApp : public wxApp
{public:
    virtual bool OnInit();
};

主窗口是通過從wxFrame派生一個類并在構造函數(shù)中為其提供一個菜單和一個狀態(tài)欄來創(chuàng)建的。此外,任何希望響應“事件”(如鼠標單擊、菜單消息或按鈕)的類都必須使用下面的宏聲明一個事件表。

class MyFrame : public wxFrame
{public:
    MyFrame();
 
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};

最后,對這類事件的響應是通過“事件處理程序”完成的,它只是函數(shù)(或功能詞,如果使用c++ 11則包括lambdas),接受與被處理事件對應的類型的事件參數(shù),例如wxCommandEvent用于來自簡單控件的事件,如按鈕、文本字段和菜單項。
對三個菜單項做出反應:自定義的“Hello”,以及“Exit”和“About”項(任何程序通常都應該實現(xiàn)后兩者)。注意,這些處理程序不需要是虛擬的或公共的。

為了能夠?qū)Σ藛蚊钭龀龇磻?,它必須被賦予一個唯一的標識符,可以定義為const變量或enum元素。后者經(jīng)常被使用,因為通常需要許多這樣的常量:

enum
{ID_Hello = 1
};

不需要為“About”和“Exit”定義標識符,因為wxWidgets已經(jīng)預先定義了標準值,如wxID_ABOUT和wxID_EXIT。您應該盡可能地使用它們,因為它們可以由特定的平臺以特殊的方式處理。

main入口函數(shù)

和所有程序一樣,必須有一個“main”函數(shù)。在wxWidgets下,main是在wxIMPLEMENT_APP()宏中實現(xiàn)的,它創(chuàng)建指定類的應用程序?qū)嵗㈤_始運行GUI事件循環(huán)。它可以簡單地這樣使用:

wxIMPLEMENT_APP(MyApp);

如上所述,wxApp::OnInit()在啟動時被調(diào)用,應該用來初始化程序,可能會顯示一個“啟動畫面”并創(chuàng)建主窗口(或幾個)。默認情況下,框架是隱藏創(chuàng)建的,以允許在顯示它們之前創(chuàng)建子窗口。因此,我們需要顯式地顯示它們。最后,從這個方法返回true,表示成功初始化:

bool MyApp::OnInit()
{MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}

現(xiàn)在程序如下了

#include#ifndef WX_PRECOMP
    #include#endif


// application class
class MyApp : public wxApp
{public:
    virtual bool OnInit();
};

wxIMPLEMENT_APP(MyApp);

bool MyApp::OnInit()
{MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}

在主窗口(或稍后)的構造函數(shù)中,創(chuàng)建了一個包含菜單項的菜單,以及一個將顯示在主窗口底部的狀態(tài)欄。兩者都必須綁定到具有各自調(diào)用的幀。

MyFrame::MyFrame()
        : wxFrame(NULL, wxID_ANY, "Hello World")
{wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
 
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
 
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    menuBar->Append(menuHelp, "&Help");
 
    SetMenuBar(menuBar);
 
    CreateStatusBar();
    SetStatusText("Welcome to wxWidgets!");
    』

下面是2個菜單項

wxMenu *menuFile = new wxMenu;
menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                 "Help string shown in status bar for this menu item");
menuFile->AppendSeparator();
menuFile->Append(wxID_EXIT);
 
wxMenu *menuHelp = new wxMenu;
menuHelp->Append(wxID_ABOUT);
SetMenuBar(menuBar);
狀態(tài)欄
CreateStatusBar();
SetStatusText("Welcome to wxWidgets!");

注意,我們不需要為標準菜單項wxID_ABOUT和wxID_EXIT指定標簽——它們將被賦予標準(甚至正確翻譯)標簽和標準加速器,以適應當前平臺,使我們的程序行為更加本機。因此,您應該盡可能重用標準id(參見Stock Items)。

事件處理程序

我們還必須將我們的事件處理程序連接到我們想在其中處理的事件。為此,我們調(diào)用Bind()將所有帶有指定ID的菜單事件(由wxEVT_MENU事件類型標識)發(fā)送到給定函數(shù)。傳遞給Bind()的參數(shù)為
1、事件類型,例如wxEVT_MENU, wxEVT_BUTTON, wxEVT_SIZE,或wxWidgets使用的許多其他事件之一。

2、一個指針,指向要調(diào)用的方法和要調(diào)用它的對象。在本例中,我們只需調(diào)用自己的函數(shù),并將this指針傳遞給對象本身。我們可以調(diào)用另一個對象的方法,或者非成員函數(shù)的方法——實際上,任何可以用wxCommandEvent調(diào)用的對象都可以在這里使用。

3、一個可選標識符,允許我們只選擇wxEVT_MENU類型的一些事件,即來自具有給定ID的菜單項的事件,而不是在提供的處理程序中處理所有事件。這主要用于菜單項,很少用于其他類型的事件。

Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);

下面是標準的事件處理程序?qū)崿F(xiàn)。OnExit()通過調(diào)用Close()關閉主窗口。參數(shù)true表示其他窗口沒有否決權,例如在詢問“您真的想關閉嗎?”之后。如果沒有其他主窗口,應用程序?qū)⑼顺觥?/p>

void MyFrame::OnExit(wxCommandEvent& event)
{Close(true);
}

MyFrame::OnAbout()將顯示一個包含一些文本的小窗口。在本例中是一個典型的“關于”窗口,其中包含有關程序的信息。

void MyFrame::OnAbout(wxCommandEvent& event)
{wxMessageBox("This is a wxWidgets Hello World example",
                 "About Hello World", wxOK | wxICON_INFORMATION);
}

自定義菜單命令處理程序的實現(xiàn)可以執(zhí)行程序需要執(zhí)行的任何任務,在這種情況下,我們將簡單地顯示來自它的一條消息,以適合Hello World示例:

void MyFrame::OnHello(wxCommandEvent& event)
{wxLogMessage("Hello world from wxWidgets!");
}

在c++ 11程序中,使用未命名的lambdas而不是函數(shù)作為事件處理程序是很方便的,特別是在處理來自控件的事件時,因為這允許將創(chuàng)建控件的代碼和處理其事件的代碼放在同一個位置。例如,在這里,我們可以用just替換wxID_EXIT處理程序

Bind(wxEVT_MENU, [=](wxCommandEvent&) {Close(true); }, wxID_EXIT);

全部程序如下

// wxWidgets "Hello World" Program
 
// For compilers that support precompilation, includes "wx/wx.h".
#include#ifndef WX_PRECOMP
    #include#endif
 
class MyApp : public wxApp
{public:
    virtual bool OnInit();
};
 
class MyFrame : public wxFrame
{public:
    MyFrame();
 
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
};
 
enum
{ID_Hello = 1
};
 
wxIMPLEMENT_APP(MyApp);
 
bool MyApp::OnInit()
{MyFrame *frame = new MyFrame();
    frame->Show(true);
    return true;
}
 
MyFrame::MyFrame()
    : wxFrame(NULL, wxID_ANY, "Hello World")
{wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
 
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
 
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append(menuFile, "&File");
    menuBar->Append(menuHelp, "&Help");
 
    SetMenuBar( menuBar );
 
    CreateStatusBar();
    SetStatusText("Welcome to wxWidgets!");
 
    Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello);
    Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT);
    Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT);
}
 
void MyFrame::OnExit(wxCommandEvent& event)
{Close(true);
}
 
void MyFrame::OnAbout(wxCommandEvent& event)
{wxMessageBox("This is a wxWidgets Hello World example",
                 "About Hello World", wxOK | wxICON_INFORMATION);
}
 
void MyFrame::OnHello(wxCommandEvent& event)
{wxLogMessage("Hello world from wxWidgets!");
}

運行結果如下
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


名稱欄目:C++GUI之wxWidgets(2)-hello,world-創(chuàng)新互聯(lián)
新聞來源:http://weahome.cn/article/igjhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部