[英]C# - Create a styled winforms like in Windows 7
我想創建一個像這樣的winform:
通過遵循其他問題 ,我已經實現了視覺效果(如圖片所示)。 但是我不能禁止調整窗體的大小,因為要有邊框,它必須是“可調整大小的”。 有人建議將“最小大小”和“最大大小”值設置為等於當前“表單大小”。 這解決了部分問題,但是當鼠標懸停邊框時,它仍然顯示雙箭頭,表明表單是可調整大小的。 有什么方法可以禁用此光標更改嗎? 我的目標是模仿Windows 7中的原始系統托盤彈出窗口,例如網絡,聲音等。
謝謝!
示例代碼:
private const int WM_NCHITTEST = 0x84;
private const int HTCLIENT = 0x1;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_NCHITTEST:
m.Result = (IntPtr)HTCLIENT;
return;
}
base.WndProc(ref m);
}
這樣,當光標懸停在邊框上時,指針不會改變,因為將其視為在窗體內部,從而獲得了預期的效果。
將消息處理程序添加到您的窗體並處理WM_NCHITTEST。 當原稿返回HTSIZE(等)時,返回HTNONE或HTCAPTION。
像這樣的問題應該可以幫助您入門。
解釋:
當Windows想知道您的窗口使用哪個光標時,它首先向您發送WM_NCHITTEST
消息(非客戶端命中測試)。 該消息由WndProc
方法處理。 您的窗口應該返回HT*
代碼之一,以告訴Windows鼠標懸停在窗口的哪一部分。 例如,返回HTCAPTION
為標題區, HTCLIENT
為客戶區,或HTSIZENESW
的左下角大小角落。 默認消息處理程序(調用base.WndProc
)針對標准窗口進行處理。
我們沒有標准窗口。
我們在這里嘗試做的是詢問原始窗口鼠標懸停在什么位置。 如果它返回任何HTSIZE*
值,我們希望將該返回值替換為HTNONE
(不執行任何操作)或HTCLIENT
(如果希望將光標視為在窗口內部-可能不是此值)或HTCAPTION
(如果您希望能夠通過邊緣拖動窗口-可能很有用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.