通過對窗體訊息wm_nchittest的欺騙,使其認為滑鼠位置在標題欄,進而直接對窗體(非標題欄)拖動即可移動整個窗體.
unit unit1;
inte***ce
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs;
type
tform1 = class(tform)
private
//*********************訊息宣告****************//
procedure wmnchittest(var msg:twmnchittest);
message wm_nchittest;
//*********************訊息宣告完成************//
public
end;
var form1: tform1;
implementation
//*************************欺騙訊息****************//
procedure tform1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;//如果 在客戶區內=訊息.結果 則 訊息.結果=在標題欄內
end;
//*************************欺騙訊息完成************//
end.
ps:
wm_nchittest:當游標移動,滑鼠按下或釋放時發生.
htclient:(wm_nchittest)值滑鼠按下時產生的訊息(
在客戶區內).
htcaption:(wm_nchittest)值滑鼠按下時產生的訊息(
在標題欄內).
inherited:繼承父類同名同引數.
窗體,控制項訊息攔截
region form 窗體訊息攔截 const int wm rbuttondown 0x0204 右鍵單擊 const int wm lbuttonup 0x0202 左鍵釋放 const int wm nclbuttondblclk 0x203 左鍵雙擊 const int wm lbutto...
子類(子窗體)向主窗體傳送訊息
這裡演示的是,在主窗體 塊中,重寫攔截資訊方法。首先新建乙個類 這個類名定義為msg dllimport user32.dll entrypoint sendmessage private static extern intptr sendmessage int hwnd,int msg,intpt...
窗體對訊息的響應
對於滑鼠的狀態,我專門用了乙個全域性的變數存放,變數結構體如下 static struct mouse event struct 而按鍵訊息,則直接從訊息迴圈的 wm char 獲取。因為我打算做的rpg網遊對鍵盤的實時狀態並不關心,只需要知道曾經按下過什麼鍵即可。wm char 從 wndproc...