<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 10.4 使用wxCursor編程 光標用來指示鼠標指針當前的位置.你可以給某個窗口指定不同的光標以便提示用戶這個窗口期待某種類型的鼠標操作.和圖標一樣,光標也是一種始終帶有透明遮罩的小圖片,可以使用一般的構造函數或者是平臺相關的構造函數來創建.其中的一些構造函數還需要相對于整個圖片的左上角指定一個熱點位置,當鼠標點擊的時候,熱點所在的位置將作為鼠標點擊的位置. 下表列舉了光標相關的函數 | wxCursor | 光標可以從wxImage對象,二進制數據,系統定義的光標標識符以及光標文件來創建. | |:--- |:--- | | Ok | 如果光標數據已經具備,則返回True. | 創建一個光標 創建光標最簡單的方法是通過系統提供的光標標識符,如下面的例子所示: wxCursor cursor(wxCURSOR_WAIT); 下表列出了目前支持的光標標識符和它們的光標的樣子(依照平臺的不同會有些變化) | wxCURSOR_ARROW | ![](img/mhtB973%281%29.tmp) | 標準光標. | |:--- |:--- |:--- |:--- | | wxCURSOR_RIGHT_ARROW | ![](img/mhtB986%281%29.tmp) | 標準反向光標. | | wxCURSOR_BLANK | 透明光標. | | wxCURSOR_BULLSEYE | ![](img/mhtB989%281%29.tmp) | 近視眼. | | wxCURSOR_CROSS | ![](img/mhtB99B%281%29.tmp) | 十字. | | wxCURSOR_HAND | ![](img/mhtB99E%281%29.tmp) | 手. | | wxCURSOR_IBEAM | ![](img/mhtB9B1%281%29.tmp) | I字光標. | | wxCURSOR_LEFT_BUTTON | ![](img/mhtB9B4%281%29.tmp) | 按左鍵(GTK+ only). | | wxCURSOR_MAGNIFIER | ![](img/mhtB9B7%281%29.tmp) | 放大鏡. | | wxCURSOR_MIDDLE_BUTTON | ![](img/mhtB9B1%281%29.tmp) | 按中鍵(譯者注:原書圖片有誤) (GTK+ only). | | wxCURSOR_NO_ENTRY | ![](img/mhtB9CA%281%29.tmp) | 禁止通行. | | wxCURSOR_PAINT_BRUSH | ![](img/mhtB9CD%281%29.tmp) | 畫刷. | | wxCURSOR_PENCIL | ![](img/mhtB9DF%281%29.tmp) | 鉛筆. | | wxCURSOR_POINT_LEFT | ![](img/mhtB9E2%281%29.tmp) | 向左. | | wxCURSOR_POINT_RIGHT | ![](img/mhtB9F5%281%29.tmp) | 向右. | | wxCURSOR_QUESTION_ARROW | ![](img/mhtB9F8%281%29.tmp) | 帶問號的箭頭. | | wxCURSOR_RIGHT_BUTTON | ![](img/mhtB9B1%281%29.tmp) | 按右鍵(譯者注:圖片有誤) (GTK+ only). | | wxCURSOR_SIZENESW | ![](img/mhtBA0A%281%29.tmp) | 東北到西南伸縮. | | wxCURSOR_SIZENS | ![](img/mhtBA0D%281%29.tmp) | 南北伸縮. | | wxCURSOR_SIZENWSE | ![](img/mhtBA20%281%29.tmp) | 西北到東南伸縮. | | wxCURSOR_SIZEWE | ![](img/mhtBA23%281%29.tmp) | 東西伸縮. | | wxCURSOR_SIZING | ![](img/mhtBA26%281%29.tmp) | 一般伸縮. | | wxCURSOR_SPRAYCAN | ![](img/mhtB9CD%281%29.tmp) | 畫刷. | | wxCURSOR_WAIT | ![](img/mhtBA39%281%29.tmp) | 等待. | | wxCURSOR_WATCH | ![](img/mhtBA3C%281%29.tmp) | 查看. | | wxCURSOR_ARROWWAIT | ![](img/mhtBA4E%281%29.tmp) | 后臺忙. | 你還可以使用預定義光標指針wxSTANDARD_CURSOR, wxHOURGLASS_CURSOR和wxCROSS_CURSOR. 另外在windows和Mac平臺上還可以從對應的資源文件中加載光標: ``` //windows平臺 wxCursor cursor(wxT("cursor_resource"), wxBITMAP_TYPE_CUR_RESOURCE, hotSpotX, hotSpotY); // Mac平臺 wxCursor cursor(wxT("cursor_resource"), wxBITMAP_TYPE_MACCUR_RESOURCE); ``` 你還可以通過wxImage對象創建光標,而"熱點"則要通過wxImage::SetOptionInt函數設置.之所以要設置熱點, 是因為很多光標不太適合使用默認的左上角作為熱點,比如對于十字光標來說,你可能希望將其十字交叉的地方作為熱點.下面的代碼演示了怎樣從一個PNG文件中產生設置了熱點的光標: ``` // 用wxImage創建光標 wxImage image(wxT("cursor.png"), wxBITMAP_TYPE_PNG); image.SetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_X, 5); image.SetOptionInt(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 5); wxCursor cursor(image); ``` 使用wxCursor 每個窗口都可以設置一個對應的光標,這個光標在鼠標進入這個窗口的時候顯示,如果一個窗口沒有設置光標,其父窗口的光標將被顯示,如果所有的父窗口都沒有設置光標,則系統默認光標被顯示: 使用下面的代碼給窗口設置一個光標: ``` window->SetCursor(wxCursor(wxCURSOR_WAIT)); ``` 使用wxSetCursorEvent 在windows系統或者是Mac OS X系統上,有一些小地方我們需要注意一下.舉個例子,如果你自己實現了一個容器類,比方說是一個分割窗口,并且給它設置了一個特殊的光標(比如說 wxCURSOR_WE用來表明某個分割條是可以被拉動的),然后你在這個分割窗口中放置了兩個子窗口,如果你沒有給這兩個子窗口設置光標的話,當光標在子窗口上移動時,它們可能會不恰當的顯示其父窗口,那個wxCURSOR_WE光標.而本來你是希望只有在鼠標移動到分割條上的時候才顯示的. 要告訴wxWidgets某個光標只應該在某種情況下被顯示,你可以增加一個wxSetCursorEvent事件的處理函數,這個事件在Windows和Mac平臺上,當需要設置光標的時候(通常是鼠標在窗口間移動的時候)被產生.在這個事件處理函數中可以調用 wxSetCursorEvent::SetCursor來設置一個特殊的光標.如下所示: ``` BEGIN_EVENT_TABLE(wxSplitterWindow, wxWindow) EVT_SET_CURSOR(wxSplitterWindow::OnSetCursor) END_EVENT_TABLE() // 指示光標只應該被設置給分割條 void wxSplitterWindow::OnSetCursor(wxSetCursorEvent& event) { if ( SashHitTest(event.GetX(), event.GetY(), 0) ) { // 使用默認的處理 event.Skip(); } //else:什么也不作,換句話說,不調用Skip.則事件表不會被繼續搜索 } ``` 在這個例子中,當鼠標指針移過分割條的時候,SashHitTest函數返回True,因此Skip函數被調用,事件表調用失敗,這和沒有定義這個事件表的效果是一樣的,導致wxWidgets象往常一樣顯示指定給窗口的光標(wxCURSOR_WE).而如果SashHitTest函數返回False,則表明光標是在子窗口上移動,這時候應該不顯示我們指定的光標,因此我們不調用Skip函數,讓事件表匹配成功,則事件表將不會在繼續匹配,這將使得wxWidgets認為這個窗口沒有被指定光標,因此.在這種情況下,即使子窗口自己沒有光標(象wxTextCtrl這種控件,一般系統會指定一個它自己的光標,不過wxWidgets對這個是不感知的),也將不會使用我們指定給父窗口的光標.
                  <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>

                              哎呀哎呀视频在线观看