無標題欄對話方塊的拖動

2021-09-06 15:38:52 字數 669 閱讀 5928

實際上,用滑鼠點住對話方塊背景進行拖動操作並不難,但是你必須了解在標題欄裡拖動視窗的原理。windows首先確定滑鼠點中了那個視窗,然後向那個視窗傳送乙個wm_nchittest訊息找出此視窗的哪個「非客戶區」(如邊界、最大化/最小化按鈕、選單、標題等等)擁有滑鼠游標。接著預設的視窗過程響應訊息並返回乙個特定的**。如果滑鼠指標落在標題欄中,那麼這個神奇的特定**就是htcaptiona。如果wm_nchittest返回htcaption,那麼windows便進入拖拽模式,以便對視窗進行移動操作。所以要想在客戶區里用滑鼠拖動對話方塊,那麼只要在客戶區里模仿標題欄裡的滑鼠拖動行為即可。這個我們下面要介紹的比較專業的方法,其主要思路是處理wm_nchittest訊息:

uint cmydialog::onnchittest(cpoint pt)

上面這個**很容易理解,當滑鼠落在客戶區內,函式返回htcaption。對於乙個簡單的對話方塊來說,僅僅用這個**就完全可以實現在對話方塊背景內的拖動操作。因為windows使用z-order座標來確定滑鼠下是哪個視窗,所以對話方塊中其它的所有物件照常工作。如果使用者單擊某個控制,只要這個控制不是靜態位圖影象或者文字,那麼windows都將滑鼠事件傳送到該控制上,而不是對話方塊。由於靜態位圖影象或者文字對於對話方塊是透明的,所以滑鼠在上面的拖動同樣實現移動,而對於對話方塊中的編輯框、按鈕、組合框等其它非靜態控制則按通常的行為方式執行。

拖動無標題欄窗體

遇到這個問題,解決如下 1.引入命名空間 using system.runtime.interopservices 2.dllimport user32.dll public static extern bool releasecapture dllimport user32.dll public ...

在對話方塊非標題欄區域實現拖動

通常,滑鼠拖動對話方塊的區域是標題欄,本例中可以在對話方塊的任何區域進行拖動。1 新建乙個基於對話方塊的mfc應用程式dragtest,刪除對話方塊中原有控制項。2 開啟類cdragtestdlg的屬性檢視,切換到訊息頁,找到wm nchittest訊息後新增訊息函式onnchittest,如圖所示...

自繪對話方塊標題欄

本例中將涉及到對話方塊標題欄的自繪,雙緩衝點陣圖的顯示以及位圖按鈕類的使用。1.標題欄自繪 2.雙緩衝顯示位圖 雙緩衝顯示點陣圖的原理網上介紹的比較多,主要思路如下 本例中的ctestbitmapshowdlg主測試類中位圖的顯示,以及ccolortitledlg標題欄重繪類中標題欄的貼圖操作都是使...