在標題欄右側新增自己的按鈕

2022-07-01 23:45:14 字數 902 閱讀 2430

如何在標題欄上增加控制項(按鈕)?

有些軟體有一些很有趣的東西。比如說在主視窗的標題欄上居然有乙個按鈕。在internet中隨處可見這樣的小控制項。按鈕怎麼可以加入到非客戶區(client)呢? 

在這裡,最關鍵的一點就是,大家不要被傳統知識誤導:真的認為它是乙個按鈕。有控制代碼(handle)的控制項當然不能放在標題欄上了。有經驗的程式設計師 用spy++跟蹤一下的話,馬上就會發現其中的秘密。它並不是乙個按鈕,只不 過是處理成按鈕的樣子罷了。 

我們應該知道幾個關於標題欄的重要的訊息: 

wm_ncpaint:重畫標題欄訊息。我們必須截住它,可以在這裡重畫按鈕; 

wm_nclbuttondown:在標題欄上按下滑鼠左鍵訊息。我們可以截住它,在標題欄上畫出按鈕按下的樣子,並且可以在其中進行自已的單擊事件的處理,使得它像乙個按鈕; 

wm_nclbuttonup:在標題欄上釋放滑鼠左鍵訊息。我們可以截住它,在標題欄上畫出按鈕彈起的樣子; 

wm_nclbuttondblclk:在標題欄上雙擊滑鼠左鍵訊息。我們可以截住它,當在按鈕區域雙擊時,我們就該使其無效,從而避免窗體執行最大化和還原操作。 

wm_ncrbuttondown:在標題欄上按下滑鼠右鍵訊息。我們可以截住它,當在按鈕區域雙擊時,我們就該使其無效,從而避免彈出窗體按制選單。 

wm_ncmousemove:在標題欄上移動滑鼠訊息。我們可以截住它,當滑鼠移出按鈕區域時,我們就必須畫出按鈕沒有被按下,即凸起時的樣子。 

wm_ncactivate:當標題欄在啟用與非啟用之間切換時收到該訊息。我們可以截住它,當該視窗處理啟用狀態時,我們可以做一些事情,比如說將我們的標題欄按鈕上的字型變灰或變黑來指示該視窗的當前狀態。下面我沒有加入該項功能,如果大家感興趣的話,可以自己完成。 

(大家從這裡可以發現,標題欄的訊息都是wm_nc開頭的) 

標題欄新增控制項

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...

C WPF Win7 標題欄新增按鈕(模擬)

研究了一天,終於成功在win7標題欄上加了按鈕。使用areoglass模擬的標題欄 廢話不多說,structlayout layoutkind.sequential public struct margins dllimport dwmapi.dll public static extern int...

Qt Mainwindow新增 刪除標題欄

需求 新增 刪除qt mainwindow的標題欄 特殊點 不能在mainwindow外部進行設定,須在mainwindow內部設定 slot或其他內部函式中 傳統方法 this setwindowflags qt framelesswindowhint 取消標題欄 this setwindowfl...