捕获窗口尺寸调整消息,实时显示窗口尺寸虚框,控制窗口大小。
返回窗口图标的句柄。
参数 | 意义 |
---|---|
hwnd | 接收消息的窗口句柄 |
msg | WM_SIZING |
wParam | fwSide 指示调整的边框方位 |
lParam | lprc 窗口位置,RECT 结构 |
指示窗口调整时,鼠标点住的边框位置
WMSZ_TOPLEFT | WMSZ_TOP | WMSZ_TOPRIGHT |
WMSZ_LEFT | WMSZ_RIGHT | |
WMSZ_BOTTOMLEFT | WMSZ_BOTTOM | WMSZ_BOTTOMRIGHT |
常量 | 意义 |
---|---|
WMSZ_LEFT = 1 | Left edge |
WMSZ_RIGHT = 2 | Right edge |
WMSZ_TOP = 3 | Top edge |
WMSZ_TOPLEFT = 4 | Top-left corner |
WMSZ_TOPRIGHT = 5 | Top-right corner |
WMSZ_BOTTOM = 6 | Bottom edge |
WMSZ_BOTTOMLEFT = 7 | Bottom-left corner |
WMSZ_BOTTOMRIGHT = 8 | Bottom-right corner |
Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type |
// 限制窗口最小尺寸,从拖动中的虚框上实时表达 procedure TForm1.user_size(var msg:TMessage); var r : ^TRect; w , h : integer; minwidth : integer; minheight : integer; maxwidth : integer; maxheight : integer; begin minwidth := self.Constraints.MinWidth; minheight:= self.Constraints.MinHeight; maxwidth := self.Constraints.MaxWidth; maxheight:= self.Constraints.MaxHeight; r := Pointer(msg.lparam); w := r.Right - r.Left; h := r.Bottom - r.Top; if w<minwidth then if msg.WParam in [WMSZ_RIGHT,WMSZ_TOPRIGHT,WMSZ_BOTTOMRIGHT] then r.Right:=r.left+minwidth else r.left := r.right-minwidth; if (w>maxwidth) and (maxwidth>minwidth) then if msg.WParam in [WMSZ_RIGHT,WMSZ_TOPRIGHT,WMSZ_BOTTOMRIGHT] then r.Right:=r.left+maxwidth else r.left := r.right-maxwidth; if h<minheight then if msg.WParam in [WMSZ_BOTTOM,WMSZ_BOTTOMLEFT,WMSZ_BOTTOMRIGHT] then r.Bottom := r.Top + minheight else r.Top := r.Bottom - minheight; if (h>maxheight) and (maxheight>minheight) then if msg.WParam in [WMSZ_BOTTOM,WMSZ_BOTTOMLEFT,WMSZ_BOTTOMRIGHT] then r.Bottom := r.Top + maxheight else r.Top := r.Bottom - maxheight; end; |
当鼠标位于窗口上方时发送此消息,以确定鼠标位于窗口的哪个部分,并据此实现窗口移动、改变大小等。
// 限制鼠标只能在窗口的边角调整大小 procedure MousePos(var msg:TMessage);message WM_NCHITTEST; begin inherited ; case msg.Result of HTRIGHT, HTLEFT, HTTOP, HTBOTTOM: if msg.LParamHi < top + Height div 2 then if msg.LParamLo < left + Width div 2 then msg.Result := HtTopLeft else msg.Result := HtTopRight else if msg.LParamLo < left + Width div 2 then msg.Result := HtBottomLeft else msg.Result := HtBottomRight; end; end; |