<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 12.4 wxHtmlWindow wxWidgets在其內建幫助系統中使用了wxHtmlWindow控件,如果你希望你的程序可以顯示格式化文件,圖片等(比如在生成報表的時候),你可以使用這個控件.這個控件可以支持標準HTML標記的一個子集,包括表格(但是不支持框架),GIF動畫,高亮鏈接顯示,字體顯示,背景色,列表,居中或者右對齊,水平條以及字符編碼等.雖然它不支持CSS,你還是可以通過已經的或者自定義的標記來達到同樣的效果.其中的HTML文本也支持拷貝到剪貼板以及從剪貼板以普通文本的方式拷貝回應用程序. 下圖演示了自帶的samples/html/test例子編譯運行以后的樣子: ![](img/mht100%281%29.tmp) 和一個完整的瀏覽器不同,wxHtmlWindow是小而快的,因此你可以在你的程序中大方的使用它,下圖演示了在一個關于對話框中使用wxHtmlWindow的例子: ![](img/mht112%281%29.tmp) 下面的代碼用來創建上面的例子,在這個例子中,HTML控件首先使自己的大小滿足其內部的HTML文本的需要,然后對話框的布局控件在調整自己的大小已滿足HTML控件的需要. ``` #include "wx/html/htmlwin.h" void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxBoxSizer *topsizer; wxHtmlWindow *html; wxDialog dlg(this, wxID_ANY, wxString(_("About"))); topsizer = new wxBoxSizer(wxVERTICAL); html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER); html->SetBorders(0); html->LoadPage(wxT("data/about.htm")); // 讓HTML控件的大小滿足其內部HTML文本需要的大小 html->SetSize(html->GetInternalRepresentation()->GetWidth(), html->GetInternalRepresentation()->GetHeight()); topsizer->Add(html, 1, wxALL, 10); topsizer->Add(new wxStaticLine(&dlg, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 10); wxButton *but = new wxButton(&dlg, wxID_OK, _("OK")); but->SetDefault(); topsizer->Add(but, 0, wxALL | wxALIGN_RIGHT, 15); dlg.SetSizer(topsizer); topsizer->Fit(&dlg); dlg.ShowModal(); } ``` 下面列出的是例子中的HTML文本: ``` <html> <body bgcolor="#FFFFFF"> <table cellspacing=3 cellpadding=4 width="100%"> <tr> <td bgcolor="#101010"> <center> <font size=+2 color="#FFFFFF"><b><br>wxHTML Library Sample 0.2.0<br></b> </font> </center> </td> </tr> <tr> <td bgcolor="#73A183"> <b><font size=+1>Copyright (C) 1999 Vaclav Slavik</font></b><p> <font size=-1> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td width="65%"> Vaclav Slavik<p> </td> <td valign=top> <img src="logo.png"> </td> </tr> </table> <font size=1> Licenced under wxWindows Library Licence, Version 3. </font> </font> </td> </tr> </table> </body> </html> ``` 請參考第4章,"基礎窗口類"中,"wxListBox和wxCheckListBox"小節中關于wxHtmlListBox的內容. wxHtmlWindow窗口類型 | wxHW_SCROLLBAR_NEVER | 不要顯示滾動條. | |:--- |:--- | | wxHW_SCROLLBAR_AUTO | 只在需要的時候顯示滾動條. | | wxHW_NO_SELECTION | 用戶不可以選擇其中的文本(默認可以). | wxHtmlWindow成員函數 GetInternalRepresentation函數返回最頂層的wxHtmlContainerCell控件,使用它的GetWidth和GetHeight函數可以得到整個HTML區域的大致大小. LoadFile加載一個HTML文件然后顯示它. LoadPage則可以傳遞一個URL. 有效的URL包括: http://www.wxwindows.org/front.htm # 一個URL file:myapp.zip#zip:html/index.htm # 一個zip文件中特定的文件 SetPage則直接傳遞要顯示的HTML字符串. OnCellClicked函數在有鼠標單擊某個HTML元素的時候被調用.它的參數包括wxHtmlCell指針, X和Y座標, 一個wxMouseEvent引用.其默認行為為:如果這個元素是一個超鏈接,則調用OnLinkClicked函數. OnLinkClicked函數的參數為wxHtmlLinkInfo類型,它的默認行為是調用LoadPage函數加載當前鏈接.你可以重載這種行為,比如,在你的關于對話框中,你可以在用戶單擊某個鏈接的時候使用默認的瀏覽器打開你的主頁. 其它可以重載的函數包括OnOpeningURL,它在某個URL正被打開的時候調用, OnCellMouseHover函數,當鼠標移過某個HTML元素的時候被調用. ReadCustomization和WriteCustomization函數則用來保存字體和邊界信息,它們的參數包括一個wxConfig*指針以及一個可選的位于配置中的路徑. 你可以使用SelectAll,SelectLine和SelectWord函數來進行文本選擇,SelectionToText將當前選擇區域以純文本的方式返回,ToText函數則將整頁以純文本的方式返回. SetBorders函數用來設置HTML周圍的邊框,SetFonts函數則用來設置字體名稱,你還可以給七個預定義的字體大小指定整數類型點單位的具體大小. AppendToPage函數在當前的HTML文本中添加內容并且刷新窗口. 你可以編寫一個自定義的wxHtmlFilter以用來讀取特定的文件,你可以使用AddFilter函數將其在wxHtmlWindow類中登記.比如,你可以寫一個自定義的過濾器用來解密并顯示加密的HTML電子雜志. GetOpenedAnchor, GetOpenedPage和GetOpenedPageTitle函數用來返回當前網頁的一些相關信息. wxHtmlWindow有自己的訪問歷史機制,你可以通過HistoryBack, HistoryForward, HistoryCanBack, HistoryCanForward和HistoryClear函數來使用它. 在網頁中集成窗口控件 你可以在網頁中集成你自己的窗口控件,甚至包括那些你自定義的控件,如下圖所示.這是通過制作一個定制的標簽處理函數來實現的,這個定制的標簽處理函數用來處理某些特定的標簽并相應的在網頁窗口中插入自己的窗口. ![](img/mht115%281%29.tmp) 上圖演示了某個HTML窗口的一部分,是由下面的網頁產生的: ``` <mybind name="(small one)" x=150 y=30> <hr> <mybind name="a widget with floating width" float=y x="50" y=50> <hr> Here you can find multiple widgets at the same line:<br> here <mybind name="widget_1" x="100" y=30> ...and here: <mybind name="widget_2" x="150" y=30> ``` 用于實現特定的HTML標記mybind的代碼如下所示: ``` #include "wx/html/m_templ.h" TAG_HANDLER_BEGIN(MYBIND, "MYBIND") TAG_HANDLER_PROC(tag) { wxWindow *wnd; int ax, ay; int fl = 0; tag.ScanParam(wxT("X"), wxT("%i"), &ax); tag.ScanParam(wxT("Y"), wxT("%i"), &ay); if (tag.HasParam(wxT("FLOAT"))) fl = ax; wnd = new wxTextCtrl(m_WParser->GetWindow(), wxID_ANY, tag.GetParam(wxT("NAME")), wxPoint(0,0), wxSize(ax, ay), wxTE_MULTILINE); wnd->Show(true); m_WParser->GetContainer()->InsertCell(new wxHtmlWidgetCell(wnd, fl)); return false; } TAG_HANDLER_END(MYBIND) TAGS_MODULE_BEGIN(MyBind) TAGS_MODULE_ADD(MYBIND) TAGS_MODULE_END(MyBind) ``` 這種技術在你想使用wxHtmlWindow來創建整個應用程序界面的時候是比較有用的,你可以用一些教本來產生HTML文件以響應用戶輸入,就象一個網頁表單一樣.另外一個例子是當你需要搜集用戶的注冊信息的時候,你可以提供這樣一個界面,其中包含文本框,用戶可以輸入相關的信息然后點擊"注冊"按鈕以便將他輸入的信息發送到你的組織.或者你也可以使用這種技術來給用戶產生一個報告,報告中包含一些復選框,以便可以可以針對他感興趣的內容進行詳細查看. 關于制作自定義HTML標記的更詳細的內容,請參考samples/html/widget目錄中的例子,或者wxWidgets參考手冊. HTML打印 通常如果你的應用程序中使用了wxHtmlWindow,那么你也希望能夠打印這些HTML文件.wxWidgets提供了一個 wxHtmlEasyPrinting類來用一種簡單的方法打印HTML文件.你需要作的是創建一個這個類的實例,然后使用本地HTML文件調用 PreviewFile和PrintFile函數.你還可以調用PageSetup函數來顯示打印設置對話框,使用GetPrintData函數和 GetPageSetupData獲取用戶的打印設置和頁面設置.可以通過SetHeader和SetFooter函數定制頁眉和頁腳,其中可以包含預定義的宏@PAGENUM@(當前頁碼)和@PAGESCNT@(總頁數). 下面的代碼取自samples/html/printing,演示了上述控件的基本使用方法以及怎樣更改默認的字體: ``` #include "wx/html/htmlwin.h" #include "wx/html/htmprint.h" MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size) { ... m_Name = wxT("testfile.htm"); m_Prn = new wxHtmlEasyPrinting(_("Easy Printing Demo"), this); m_Prn->SetHeader(m_Name + wxT("(@PAGENUM@/@PAGESCNT@)&lt;hr&gt;"), wxPAGE_ALL); } MyFrame::~MyFrame() { delete m_Prn; } void MyFrame::OnPageSetup(wxCommandEvent& event) { m_Prn->PageSetup(); } void MyFrame::OnPrint(wxCommandEvent& event) { m_Prn->PrintFile(m_Name); } void MyFrame::OnPreview(wxCommandEvent& event) { m_Prn->PreviewFile(m_Name); } void MyFrame::OnPrintSmall(wxCommandEvent& event) { int fontsizes[] = { 4, 6, 8, 10, 12, 20, 24 }; m_Prn->SetFonts(wxEmptyString, wxEmptyString, fontsizes); } void MyFrame::OnPrintNormal(wxCommandEvent& event) { m_Prn->SetFonts(wxEmptyString, wxEmptyString, 0); } void MyFrame::OnPrintHuge(wxCommandEvent& event) { int fontsizes[] = { 20, 26, 28, 30, 32, 40, 44 }; m_Prn->SetFonts(wxEmptyString, wxEmptyString, fontsizes); } wxWidgets自帶的samples/html例子演示了上述所有的知識,請參考. ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看