呼叫API 實現 窗體 拖動

2022-05-09 21:47:45 字數 2143 閱讀 7454

自定義 做乙個窗體 實現 滑鼠拖動

view code

private

const

int wm_syscommand = 0x112

;private

system.windows.interop.hwndsource _hwndsource;

public

static intptr wndproc(intptr hwnd, int msg, intptr wparam, intptr lparam, ref

bool

handled)

return (system.intptr)0;}

private

static

void

wmgetminmaxinfo(system.intptr hwnd, system.intptr lparam)

marshal.structuretoptr(mmi, lparam,

true);}

//////

pointapi:point 這是告訴編譯器這個結構使用順序布局,在記憶體裡先後排序

///定義點的x、y軸點,作為minmaxinfo的屬性型別

///[structlayout(layoutkind.sequential)]

public

struct

point

}///

///最大化的預設位置和尺寸,以及預設的最小和最大跟蹤尺寸的乙個minmaxinfo結構的指標

///[structlayout(layoutkind.sequential)]

public

struct

minmaxinfo

;[structlayout(layoutkind.sequential, pack = 0

)]public

struct

rect

//abs needed for bidi os

}///

win32視窗高度

public

intheight

}///

win32視窗

public rect(int left, int top, int right, int

bottom)

///win32視窗

public

rect(rect rcsrc)

}///

///包含顯示器資訊的型別

///[structlayout(layoutkind.sequential, charset =charset.auto)]

public

class

monitorinfo

//////

getmonitorinfo函式返回乙個顯示器的資訊

//////

顯示器的控制代碼

///顯示器資訊(輸出引數)

///[dllimport("

user32")]

internal

static

extern

bool

getmonitorinfo(intptr hmonitor, monitorinfo lpmi);

//////

獲取到螢幕上具有最大交集區域的邊界矩形的乙個指定的視窗控制代碼。(能處理多顯示器的問題)

//////

視窗控制代碼

///可能為null、最接近的視窗、主顯示屏

///[dllimport("

user32")]

internal

static

extern intptr monitorfromwindow(intptr handle, int

flags);

這樣,只要在你要處理的視窗呼叫wndproc函式就可以了

this.sourceinitialized += delegate(object

sender, eventargs e)

;另外,如果只是在主顯示器最大化處理有一句更簡潔的**實現:

this.maximumsize = new size(screen.primaryscreen.workingarea.width, screen.primaryscreen.workingarea.height);

Qt 中 實現窗體拖動

實現窗體拖動 如果我們不使用作業系統自帶的標題欄,首先就應該將windows標題欄去掉,這個功能只要一條語句就能夠實現,那就是在建構函式中加入 setwindowsflags qt framelesshint 但是窗體就固定不動了,既不能拖動也不能拉伸,下面我就介紹一種方法來實現窗體的拖動。1.在類...

窗體拖動事件

窗體的拖動事件 標題框不顯示 將窗體的邊框和外觀屬性 formborderstyle設為none 拖動方法如下 為窗體新增乙個私有域 private system.drawing.point mousepoint 為窗體新增滑鼠按下事件 注意對滑鼠按鍵進行篩選 private void mainfo...

C 實現全窗體範圍拖動

using system.runtime.interopservices dllimport user32.dll public static extern bool releasecapture dllimport user32.dll public static extern bool send...