wxWidgets實現(xiàn)無標(biāo)題欄窗口拖動效果-創(chuàng)新互聯(lián)

本文實例為大家分享了wxWidgets實現(xiàn)無標(biāo)題欄窗口拖動的具體代碼,供大家參考,具體內(nèi)容如下

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),平江企業(yè)網(wǎng)站建設(shè),平江品牌網(wǎng)站建設(shè),網(wǎng)站定制,平江網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,平江網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

最近需要做一個自定義的標(biāo)題欄,而其中最重要的就是要實現(xiàn)窗口的拖動。默認(rèn)情況下有標(biāo)題欄,都可以通過拖動系統(tǒng)默認(rèn)的標(biāo)題欄,但是自定義的標(biāo)題欄需要自己實現(xiàn)拖動。

實現(xiàn)無標(biāo)題窗口的拖動,在MFC中可以在鼠標(biāo)在窗口中拖動時,發(fā)送虛假的消息給窗口來進行實現(xiàn)(注:MFC可以發(fā)送鼠標(biāo)在標(biāo)題欄拖動的消息)。但是在wxWidgets中,暫時沒有看到類似的消息。因工作需要,才學(xué)習(xí)wxWidgets不久。如果有知道相關(guān)消息的朋友,請發(fā)消息告訴。而自己實現(xiàn)拖動,大致可以分為三個步驟。

1、在鼠標(biāo)左鍵按下時,記錄下鼠標(biāo)位置,使用CaptureMouse來進行鼠標(biāo)捕獲 。注意,這里如果不捕獲鼠標(biāo),那么也能實現(xiàn)拖動窗口,但是會出現(xiàn)一個小問題,就是當(dāng)鼠標(biāo)在窗口邊緣快速的拖出窗口的時候,窗口不能進行移動。因為系統(tǒng)對鼠標(biāo)的移動事件的發(fā)送是有事件間隔的,窗口收到該消息時鼠標(biāo)已經(jīng)離開了窗口,所以不能正確拖動。一定要記得設(shè)置鼠標(biāo)捕獲。

2、當(dāng)鼠標(biāo)拖動的時候(在鼠標(biāo)事件中判斷鼠標(biāo)左鍵按下且在拖拽),計算鼠標(biāo)新的位置相對之前的位移向量,并移動窗口到相應(yīng)的位置。

3、處理鼠標(biāo)左鍵抬起事件,在鼠標(biāo)抬起事件中使用ReleaseMouse來釋放之前捕獲的鼠標(biāo)。

4、處理EVT_MOUSE_CAPTURE_LOST(func)事件,在其中釋放鼠標(biāo)捕獲。官方文檔有說明,對鼠標(biāo)進行捕獲必須處理該事件,并在其中釋放鼠標(biāo)捕獲。因為彈出對話框等情況會導(dǎo)致鼠標(biāo)是按下的,但是父窗口卻失去了鼠標(biāo)焦點的狀況,所以必須處理該事件釋放鼠標(biāo)。

下面給出我自己實現(xiàn)的一個可以通過鼠標(biāo)拖拽實現(xiàn)移動的無標(biāo)題欄窗口的代碼,可以對照上邊的介紹看一下具體的實現(xiàn)。這個類實現(xiàn)的是拖動自己,當(dāng)然可以利用在計算坐標(biāo)之后獲取父窗口來進行移動,那樣就可以實現(xiàn)鼠標(biāo)在子窗口上拖動來實現(xiàn)整個窗口的移動。也就是自定義的標(biāo)題欄應(yīng)該具有的基本功能。

頭文件:MyTitleWnd.h

#pragma once
#include <wx/wx.h>
 
class MyTitleWnd:public wxFrame
{
public:
 MyTitleWnd(wxWindow *parent,wxWindowID id=wxID_ANY);
 virtual ~MyTitleWnd();
 void OnMouseMove(wxMouseEvent& event);
 void OnMouseLeave(wxMouseEvent& event);
 void OnMouseLDown(wxMouseEvent& event);
 void OnMouseLUp(wxMouseEvent& event);
 void OnMouseCaptureLost(wxMouseCaptureLostEvent& event);
private:
 wxPoint mLastPt;
 
 wxString mText;
 DECLARE_EVENT_TABLE()
};

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站muchs.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:wxWidgets實現(xiàn)無標(biāo)題欄窗口拖動效果-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article38/dcjcsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、網(wǎng)站維護、建站公司網(wǎng)站策劃、移動網(wǎng)站建設(shè)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)