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

2021-09-07 04:47:58 字數 1680 閱讀 3435

相同是專案遇到的問題,要求是無邊框的對話方塊要實現滑鼠的拖動改變大小。無邊框對話方塊跟有邊框的實現肯定不一樣嘍。

我上網搜到一種方法是:

須要處理下面這三個訊息:

wm_nchittest  wm_setcursor  wm_nclbuttondown

訊息處理函式:

uint c***dlg::onnchittest(uint nhittest, cpoint point)  

bool c***dlg::onsetcursor(hwnd hwnd, uint nhittest, uint message)

else if(nhittest == httop || nhittest == htbottom)

else if(nhittest == htleft || nhittest == htright)

else if(nhittest == httopleft || nhittest == htbottomright)

else if(nhittest == httopright || nhittest == htbottomleft)

else

} void c***dlg::onnclbuttondown(uint nhittest, cpoint point)

上面的做法有點問題,像在推斷時, 左右,上下先推斷了。那左上,左下,右上,右下就沒法做了。

全部就有了改進的方法:

uint ctestdlg::onnchittest( cpoint point )

bool ctestdlg::onsetcursor(cwnd* pwnd, uint nhittest, uint message)

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

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

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

return cdialog::onsetcursor(pwnd, nhittest, message);

}void ctestdlg::onnclbuttondown(uint nhittest, cpoint point)

無邊框窗體拖動和改變大小

const int htleft 10 const int htright 11 const int httop 12 const int httopleft 13 const int httopright 14 const int htbottom 15 const int htbottomlef...

WPF 無邊框窗體滑鼠拖動改變大小和移動

protected override void onsourceinitialized eventargs e protected virtual intptr wndproc intptr hwnd,int msg,intptr wparam,intptr lparam,ref bool hand...

WPF實現可改變大小的無邊框窗體

這裡記載乙個wpf中比較實用的功能,怎樣處理乙個無邊框窗體。通常的做法是設定windowstyle none 和resizemode noresize 但這樣有乙個問題,窗體的大小不能夠通過拖動進行改變。於是,很多的解決方式如下 這樣的解決方案基本上達到了效果,不過較真起來依然存在問題,因為只能夠拖...