1. 程式人生 > >無邊框對話方塊拖動改變大小的實現總結

無邊框對話方塊拖動改變大小的實現總結

UINT CTestDlg::OnNcHitTest( CPoint point )
{
CPoint ptCur;
CRect rect;
GetCursorPos( &ptCur );
GetWindowRect( &rect );

if( CRect(rect.left, rect.top, rect.left+3, rect.top+3).PtInRect( ptCur ) )  
return HTTOPLEFT;
else if( CRect(rect.right-3, rect.top, rect.right, rect.top+3).PtInRect( ptCur ) )
return HTTOPRIGHT;
else if( CRect(rect.left, rect.bottom-3, rect.left+3, rect.bottom).PtInRect( ptCur ) )
return HTBOTTOMLEFT;
else if( CRect(rect.right-3, rect.bottom-3, rect.right, rect.bottom).PtInRect( ptCur ) )
return HTBOTTOMRIGHT;
else if ( CRect(rect.left, rect.top, rect.left+3, rect.bottom).PtInRect( ptCur ) )
return HTLEFT;
else if( CRect(rect.right-3, rect.top, rect.right, rect.bottom).PtInRect( ptCur ) )
return HTRIGHT;
else if( CRect(rect.left, rect.top, rect.right-128, rect.top+3).PtInRect( ptCur ) ) // 128 Min,Max,Close
return HTTOP;
else if( CRect(rect.left, rect.bottom-3, rect.right, rect.bottom).PtInRect( ptCur ) )
return HTBOTTOM;

    return CDialog::OnNcHitTest(point);
}

BOOL CTestDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
CPoint ptCur;
CRect rect;
GetCursorPos( &ptCur );
GetWindowRect( &rect );

if ( rect.Width() >= m_nCxFullScreen-3 && rect.Height() >= m_nCyFullScreen-3 )
return CDialog::OnSetCursor(pWnd, nHitTest, message);

if( CRect(rect.left, rect.top, rect.left+3, rect.top+3).PtInRect( ptCur ) || CRect(rect.right-3, rect.bottom-3, rect.right, rect.bottom).PtInRect( ptCur ) )
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
return 0;
}
else if( CRect(rect.left, rect.bottom-3, rect.left+3, rect.bottom).PtInRect( ptCur ) || CRect(rect.left, rect.bottom-3, rect.left+3, rect.bottom).PtInRect( ptCur ) )
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
return 0;
}
else if( CRect(rect.left, rect.top, rect.right-128, rect.top+3).PtInRect( ptCur ) || CRect(rect.left, rect.bottom-3, rect.right, rect.bottom).PtInRect( ptCur ) )
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
return 0;
}
else if( CRect(rect.left, rect.top, rect.left+3, rect.bottom).PtInRect( ptCur ) || CRect(rect.right-3, rect.top, rect.right, rect.bottom).PtInRect( ptCur ) )
{
SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
return 0;
}

return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

void CTestDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
switch( nHitTest )
{
case HTTOP:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
return;
case HTBOTTOM:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
return;
case HTLEFT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
return;
case HTRIGHT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
return;
case HTTOPLEFT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
return;
case HTTOPRIGHT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
return;
case HTBOTTOMLEFT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
return;
case HTBOTTOMRIGHT:
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
return;
default:
CDialog::OnNcLButtonDown( nHitTest, point );
}


相關推薦

邊框對話方塊改變大小實現總結

UINT CTestDlg::OnNcHitTest( CPoint point ) { CPoint ptCur; CRect rect; GetCursorPos( &ptCur ); GetWindowRect( &rect ); if( CRect(rect.left, rect.

Qt 標題邊框程序的改變大小

又一 through poi rip 有時 target ram internal 以及 最近做項目遇到的問題,總結下。 有時候我們覺得系統的標題欄和按鈕太醜太呆板,想做自己的標題欄以及最大化、最小化、關閉,菜單按鈕,我們就需要 [cpp] view p

WPF邊框視窗滑鼠縮放大小

通常,我們會 通過AllowsTransparency=”True”、 WindowStyle=”None” 這兩個屬性將wpf視窗的邊框去掉,由於邊框沒了,我們就不能通過滑鼠指標懸停在某一邊上拖動改變視窗的大小,此時若要能調整視窗大小,官方倒也提供了個屬性:R

C# 鼠標點擊移動窗體代碼,可以實現邊框窗體的

點擊 obj cat += tar sender see sed false private static bool IsDrag = false; private int enterX; private int enterY;

矩形拽移動,四個角改變大小

http enter pos 變化 tails per posit ems sca 原創是https://blog.csdn.net/liujava621/article/details/30495103,我這裏做了修改,侵權刪。 上幹貨:這裏首先要註意操作四個角的時候,框

C#Winform實現邊框窗體滑鼠

在有時候我們為了實現軟體的美觀,我們需要把窗體的邊框隱藏,但是問題也會隨之而來,在屬性中設定了FormBorderStyle應該為None,邊框便可以隱藏,但是我們在使用軟體時卻無法拖動窗體,

MFC----視窗的縮放及控制元件隨改變大小

當我們想得到一個視窗物件(CWnd的派生物件)指標的控制代碼(HWND)時,最安全的方法是使用GetSafeHwnd()函式,通過下面的例子來看其理由:   CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器   HWND hwnd = pwn

QT自定義視窗(邊框,自由)

做專案中為了美觀,很少使用QT自帶的標題欄,取消邊框,自己實現邊框。自定義視窗,主要通過滑鼠事件實現。重寫QT視窗事件,具體參考程式碼註釋。 #ifndef CUSTOMWINDOW_H #defi

36.QT-解決邊框界面卡屏問題(附帶源碼)

mil eight lac drag left 界面 的人 else 動手 1.簡介 看到很多才學QT的人都會問為啥無邊框拖動為啥會花屏? 那是因為你每次拖動的過程中都一直在調用move()函數讓QT重新繪制界面,如果資源過大,就會導致當前圖形還未繪制完,便又重

1.6.2 簡單自繪控制元件——邊框對話方塊最小化按鈕

1、準備PNG檔案: 2、插入Static Text 控制元件,並將其設定在視窗右上角     CRect   rect;     GetClientRect(rect);            //獲取對話方塊大小     CWnd    *pWnd;     pW

c++builder如何通過滑鼠改變邊框窗體的大小(bsnone)

在C++Builder中,將Form的BorderStyle設為bsNone以後該窗體將沒有邊框,不能改變窗體大小,也不能拖動窗體。那麼如何拖動及用滑鼠改變無邊框窗體大小呢?拖動無邊框窗體的解決方法很多,例如:1. 向窗體傳送WM_NCLBUTTONDOWN訊息,LParam = HTCAPTION2. 向窗

轉載 * jQuery實現動態分割div—通過分隔欄實現上下、左右動態改變左右、上下兩個相鄰div的大小

鼠標 動態改變 win 上下 key mousedown pre console ati 由jQuery實現上下、左右動態改變左右、上下兩個div的大小,需要自己引入jquery1.8.0.min.js包 可用於頁面布局。 //======================

jQuery外掛來調整表列的大小colResizable.js 改變單元格寬度

jQuery外掛來調整表列的大小 效果圖: colResizable colResizable是一個免費的jQuery外掛,旨在通過手動拖動列錨點來增強任何型別的HTML表物件,從而增加列重新調整大小的功能。它相容滑鼠和觸控裝置,並具有一些

[MFC] 邊框視窗的Resize效果的實現(下):子視窗覆蓋,導致主視窗熱點區無法響應WM_NCHITTEST

這篇博文講解了如何實現無邊框視窗的Resize拖動效果,文中提到,需要響應主視窗的WM_NCHITTEST訊息,檢測滑鼠是否在resize熱點區並返回HTTOPLEFT、HTBOTTOM等相應的結果。

Android:圖片中疊加文字,支持改變位置

ear nal format wrap trace ast 分享 gravity ica 之所以做了這麽一個Demo,是由於近期項目中有一個奇葩的需求:用戶拍攝照片後,分享到微信的同一時候加入備註,想獲取用戶在微信的彈出框輸入的內容。保存在自己的server上。而其實,

Win10邊框對話框加陰影

窗口陰影網上給無邊框加陰影就是那個著名的類WndShadow,在XP上直接使用,很方便。但是Win10上直接用沒有效果。將對話框的style設為popup,title bar設為false。然後添加如下代碼:int CMFCApplication1Dlg::OnCreate(LPCREATESTRUCT lp

duilib中list表頭大小內容大小跟隨變化的一個示例

偶爾有群裡的朋友在問duilib的List拖動列表頭時內容大小如何跟隨變化。我這邊用新版的duilib程式碼測試是沒有問題。 duilib官方程式碼倉庫https://github.com/duilib/duilib 個人的修改的程式碼的倉庫:https://github.com/juh

DevExpress Treelist 同一個樹上 改變順序

using DevExpress.XtraTreeList; using DevExpress.XtraTreeList.Nodes; private void treeList1_DragDrop(object sender, System.Windows.Forms.DragEventA

VS2012使對話方塊透明和改變對話方塊背景顏色或圖片背景

在Dlg標頭檔案中public加入:  CBrush m_bkBrush;     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); // 在OnInitDialog()中 建立一把黃色的背景

js 實現table每列可左右改變列寬度

<!DOCTYPE HTML> <html> <head> <meta charset="gbk"> <title>table</title> </head> <bod