最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

wxWidgets實(shí)現(xiàn)無標(biāo)題欄窗口拖動(dòng)效果

 更新時(shí)間:2019年02月20日 11:45:32   作者:zfwjsjzy  
這篇文章主要為大家詳細(xì)介紹了wxWidgets實(shí)現(xiàn)無標(biāo)題欄窗口拖動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

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

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

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

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

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

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

下面給出我自己實(shí)現(xiàn)的一個(gè)可以通過鼠標(biāo)拖拽實(shí)現(xiàn)移動(dòng)的無標(biāo)題欄窗口的代碼,可以對(duì)照上邊的介紹看一下具體的實(shí)現(xiàn)。這個(gè)類實(shí)現(xiàn)的是拖動(dòng)自己,當(dāng)然可以利用在計(jì)算坐標(biāo)之后獲取父窗口來進(jìn)行移動(dòng),那樣就可以實(shí)現(xiàn)鼠標(biāo)在子窗口上拖動(dòng)來實(shí)現(xiàn)整個(gè)窗口的移動(dòng)。也就是自定義的標(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()
};

源文件:MyTitleWnd.cpp

#include "MyTitleWnd.h"
 
BEGIN_EVENT_TABLE(MyTitleWnd, wxFrame)
 EVT_MOUSE_CAPTURE_LOST(MyTitleWnd::OnMouseCaptureLost)
 //EVT_LEFT_DOWN(MyTitleWnd::OnMouseLDown)
 EVT_LEFT_UP(MyTitleWnd::OnMouseLUp)
 EVT_MOUSE_EVENTS(MyTitleWnd::OnMouseMove)
 EVT_LEAVE_WINDOW(MyTitleWnd::OnMouseLeave)
END_EVENT_TABLE()
 
MyTitleWnd::MyTitleWnd(wxWindow *parent, wxWindowID id/*=wxID_ANY*/)
 :wxFrame(parent, id,"", wxDefaultPosition, wxDefaultSize, wxBORDER_NONE)
{
 
}
 
MyTitleWnd::~MyTitleWnd()
{
}
 
void MyTitleWnd::OnMouseMove(wxMouseEvent &event)
{
 if(event.LeftIsDown()&&event.Dragging())
 {
 wxPoint pt = event.GetPosition();
 wxPoint wndLeftTopPt = GetPosition();
 int distanceX = pt.x - mLastPt.x;
 int distanceY = pt.y - mLastPt.y;
 
 wxPoint desPt;
 desPt.x = distanceX + wndLeftTopPt.x;
 desPt.y = distanceY + wndLeftTopPt.y;
 this->Move(desPt);
 
 }
 
 if (event.LeftDown())
 {
 this->CaptureMouse();
 mLastPt = event.GetPosition();
 }
}
 
void MyTitleWnd::OnMouseLeave(wxMouseEvent& event)
{
 if (event.LeftIsDown() && event.Dragging())
 {
 wxPoint pt = event.GetPosition();
 wxPoint wndLeftTopPt = GetPosition();
 int distanceX = pt.x - mLastPt.x;
 int distanceY = pt.y - mLastPt.y;
 
 wxPoint desPt;
 desPt.x = distanceX + wndLeftTopPt.x;
 desPt.y = distanceY + wndLeftTopPt.y;
 this->Move(desPt);
 
 }
}
 
void MyTitleWnd::OnMouseLDown(wxMouseEvent& event)
{
 this->CaptureMouse();
}
 
void MyTitleWnd::OnMouseLUp(wxMouseEvent& event)
{
 if (HasCapture())
 ReleaseMouse();
}
 
void MyTitleWnd::OnMouseCaptureLost(wxMouseCaptureLostEvent& event)
{
 if (HasCapture())
 ReleaseMouse();
}

好了,最后貼出效果圖。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VScode+ESP32簡(jiǎn)單環(huán)境搭建

    VScode+ESP32簡(jiǎn)單環(huán)境搭建

    本文章向大家介紹ESP32-C3搭建環(huán)境教程,主要包括ESP32-C3搭建環(huán)境教程使用實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • EasyX繪制透明背景圖的方法詳解

    EasyX繪制透明背景圖的方法詳解

    這篇文章主要為大家詳細(xì)介紹了EasyX繪制透明背景圖的方法,文中的示例代碼講解詳細(xì),對(duì)我們深入了解EasyX有一定的幫助,需要的可以參考一下
    2023-01-01
  • STL中vector的使用你了解嗎

    STL中vector的使用你了解嗎

    這篇文章主要為大家詳細(xì)介紹了STL中vector的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++學(xué)習(xí)筆記之類成員指針

    C++學(xué)習(xí)筆記之類成員指針

    類成員指針時(shí)指可以指向類的非靜態(tài)成員的指針,下面這篇文章主要給大家介紹了關(guān)于C++類成員指針的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng)

    C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 華為筆試算法題匯總

    華為筆試算法題匯總

    這篇文章主要為大家匯總了華為筆試算法題,每一題都給出了詳細(xì)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • Visual Studio Code安裝和配置的教程

    Visual Studio Code安裝和配置的教程

    這篇文章主要介紹了Visual Studio Code安裝和配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 關(guān)于C/C++中可變參數(shù)的詳細(xì)介紹(va_list,va_start,va_arg,va_end)

    關(guān)于C/C++中可變參數(shù)的詳細(xì)介紹(va_list,va_start,va_arg,va_end)

    可變參數(shù)的函數(shù)原理其實(shí)很簡(jiǎn)單,而va系列是以宏定義來定義的,實(shí)現(xiàn)跟堆棧相關(guān).我們寫一個(gè)可變函數(shù)的C函數(shù)時(shí),有利也有弊,所以在不必要的場(chǎng)合,我們無需用到可變參數(shù)。如果在C++里,我們應(yīng)該利用C++的多態(tài)性來實(shí)現(xiàn)可變參數(shù)的功能,盡量避免用C語言的方式來實(shí)現(xiàn)
    2013-10-10
  • C++/Qt遍歷多維數(shù)組的3種方式示例

    C++/Qt遍歷多維數(shù)組的3種方式示例

    一維數(shù)組對(duì)于存儲(chǔ)和處理一組數(shù)據(jù)很有用,但有時(shí)候,有必要使用多維數(shù)組,下面這篇文章主要給大家介紹了關(guān)于C++/Qt遍歷多維數(shù)組的3種方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 解析wprintf 中使用%I64d格式化輸出LONGLONG的詳細(xì)介紹

    解析wprintf 中使用%I64d格式化輸出LONGLONG的詳細(xì)介紹

    本篇文章是對(duì)wprintf 中使用%I64d格式化輸出LONGLONG進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

兰坪| 抚松县| 山阴县| 洞头县| 岢岚县| 桐柏县| 浮山县| 灵石县| 会东县| 综艺| 平乡县| 五台县| 丹凤县| 怀安县| 时尚| 札达县| 泾阳县| 四平市| 英超| 栖霞市| 武隆县| 惠安县| 宜丰县| 凯里市| 玉环县| 南靖县| 科尔| 湘潭市| 通州区| 韶山市| 尉犁县| 广宁县| 台东县| 湖南省| 准格尔旗| 毕节市| 方正县| 新邵县| 安岳县| 泸溪县| 连云港市|