I have to fix some problems and enchance form designer written long ago for a database project. In Design Panel class code I encountered these lines
private void DesignPanel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
(sender as Control).Capture = false;
switch (FMousePosition)
{
case MousePosition.mpNone:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF009, 0);
break;// Move
case MousePosition.mpRightBottom:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF008, 0);
break;//RB
case MousePosition.mpLeftBottom:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF007, 0);
// ... here are similar cases ...
case MousePosition.mpLeft:
SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF001, 0);
break;//L
}
}
}
FMousePosition indicates whether mouse was over any edge of selected control.
What confusing me is these windows messages: it seems there is no documentation on WM_SYSCOMMAND with parameters 0xF001-0xF009 (maybe it starts some kind of 'drag/resize sequence'). Any ideas?
If my suggestion is right, then how can I cancel these sequences?
They are undocumented parameters. After searching I managed to find this list.
SC_SIZE
, Center cursor on the form)SC_SZLEFT
, Resize from left)SC_SZRIGHT
, Resize from right)SC_SZTOP
, Resize from top)SC_SZTOPLEFT
, Lock the bottom right corner of the form, the top left corner move for resize)SC_SZTOPRIGHT
, Same from bottom left corner)SC_SZBOTTOM
, Lock top right and left border, resize bottom)SC_SZBOTTOMLEFT
, Lock top and right border, resize other border)SC_SZBOTTOMRIGHT
, Lock left and top border and resize other)SC_SIZE|0x9
, Drag from anywhere)SC_SEPARATOR
)SC_MOVE
, Put cursor centered at the upper order)SC_DRAGMOVE
, move by dragging)SC_MINIMIZE
, Auto-Minimize Form)SC_MAXIMIZE
, Auto-Maximize Form)SC_NEXTWINDOW
, Stop! You don't want that, it will lock all mouse click and make you reboot)SC_SCREENSAVE|0x8
, Activate ScreenSaver)SC_TASKLIST|0xE
, Activate StartButton)Reference: http://www.delphi3000.com/articles/article_1054.asp#Comments