c 呼叫API函式拖動無標題視窗及控制項

2021-04-20 08:25:21 字數 2024 閱讀 9628

在windows程式設計中,為了介面的美觀,相信很多朋友都有過把windows的form的標題欄隱藏掉,然後自己做乙個標題欄的經驗。但是,隱藏掉標題欄後的form怎麼拖動呢?大部份人的做法都是在mousedown,mousemove等事件中自己寫**進行處理,用**隨著滑鼠的移動,一點點的移動視窗。其實,還有一種比較簡單的方法,就是以系統的身份向窗體傳送乙個訊息,告訴窗體,你要開始移動啦,呵呵,下面,我們來看一看具體做法。

這個功能,我們用兩個常用的api函式

sendmessage和releasecapture

來實現,介紹一下這兩個函式。

releasecapture函式的作用是為當前的應用程式釋放滑鼠的捕獲

sendmessage函式的作用是呼叫乙個視窗的視窗函式,將一條訊息命令發給那個視窗。需要注意的是,這裡所說的視窗不是.net中的窗體(form),而是相當於.net中的控制項。當然,system.windows.forms.form也是乙個control.

sendmessage(intptr hwnd, 

intwmsg, 

intwparam, 

intlparam);

hwnd,要接收訊息的那個視窗的控制代碼

wmsg,訊息的識別符號

wparam,具體取決於傳送的訊息 

lparam,具體取決於傳送的訊息

首先,呼叫api函式,需新增

system.runtime.interopservices命名空間的引用。

using system.runtime.interopservices;

然後,在程式中宣告我們要用到的api函式及要用到的引數常量。

[dllimport(

"user32")]

private

static

extern

bool

releasecapture();

[dllimport(

"user32")]

private

static

extern

bool

sendmessage(intptr hwnd, 

intwmsg, 

intwparam, 

intlparam);

public

const

intwm_syscommand 

=0x0112

;public

const

intsc_move 

=0xf010

;public

const

inthtcaption 

=0x0002

;

其中, wm_syscommand常量代表要向視窗傳送訊息,sc_move常代表要向視窗傳送移動的訊息。

然後,接下來就很簡單了。在form的mousedown事件中加入以下**即可:

releasecapture();

sendmessage(

this

.handle, wm_syscommand, sc_move 

+htcaption,0);

這裡,this.handle代表當前form的控制代碼。

細心的朋友可能會注意到我前面說一我句話:

需要注意的是,這裡所說的視窗不是.net中的窗體(form),而是相當於.net中的控制項。當然,system.windows.forms.form也是乙個control.

這麼說,這個方法是不是還可以用來移動form以外的其它控制項呢?答案是肯定的。

我們繼續往form裡新增乙個button控制項,name為 movebutton。然後,在button的mousedown事件中寫入以下**:

releasecapture();

sendmessage(

this

.movebutton.handle, wm_syscommand, sc_move 

+htcaption, 0);

編譯執行,這時我們會發現,滑鼠在form的標題欄以外的空白地方也可以拖動視窗了。而滑鼠在button控制項中時,即可以拖動按鈕。

VC 無標題視窗以及控制項拖動的方法

方法一 直接在onnchittest中虛擬傳送htcaption訊息lresult caaadlg onnchittest cpoint point 方法二 直接在onlbuttondown中虛擬傳送wm nclbuttondown,htcaption訊息 void caaadlg onlbutto...

VC 無標題視窗以及控制項拖動的方法 修正

無標題視窗拖動 方法一 直接在onnchittest中虛擬傳送htcaption訊息 cpp view plain copy print?uint cmainframe onnchittest cpoint point else uint cmainframe onnchittest cpoint ...

呼叫API函式設計ABOUT視窗

呼叫api 函式設計 about 視窗about 窗 口,它 向 用 戶 反 映 了 當 前 系 統 的 一 些 基 本 信 息,其 中 顯 示 有 關windows 及 其 應 用 軟 件 的 版 本 版 權 和 系 統 的 工 作 狀 態 等 信 息。筆 者 用vb 6.0 通 過 調 用 ap...