簡體   English   中英

C#-在Windows 7中創建樣式化的winform

[英]C# - Create a styled winforms like in Windows 7

我想創建一個像這樣的winform:

Winform的樣式類似於通知區域中的彈出窗口(Windows 7)

通過遵循其他問題 ,我已經實現了視覺效果(如圖片所示)。 但是我不能禁止調整窗體的大小,因為要有邊框,它必須是“可調整大小的”。 有人建議將“最小大小”和“最大大小”值設置為等於當前“表單大小”。 這解決了部分問題,但是當鼠標懸停邊框時,它仍然顯示雙箭頭,表明表單是可調整大小的。 有什么方法可以禁用此光標更改嗎? 我的目標是模仿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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM