2009-04-18 27 views
0

我必須解決一些問題,並強化很久以前爲數據庫項目編寫的窗體設計器。 在設計面板類代碼我遇到這些行自定義窗體設計器,使用WinAPI移動/調整控件大小

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指示鼠標是否超過選擇的控制的任何邊緣。

讓我困惑的是這些窗口消息:它似乎沒有關於WM_SYSCOMMAND的參數爲0xF001-0xF009的文檔(也許它開始某種'拖/調整序列')。有任何想法嗎?

如果我的建議是正確的,那我該如何取消這些序列?

回答

2

開始他們undocumented參數。搜索後,我設法找到這個列表。

  • 0xF000的(中心光標在表格上)
  • 0xF001(左起調整)
  • 0xF002(右調整)
  • 0xF003(從上調整)
  • 0xF004(鎖定表格的右下角,左上角調整大小NER移動)
  • 0xF005(從左下角相同)
  • 0xF006(禁售左右邊框,調整大小等)
  • 0xF007(鎖定並右邊框,調整大小等境)
  • 0xF008(鎖定左和高達邊框和調整大小等)
  • 0xF009(從任何地方拖動)
  • 0xF010(將光標在上順序居中)
  • 0xF020(自動最小表)
  • 0xF030(自動最大化形態)

參考:http://www.delphi3000.com/articles/article_1054.asp#Comments

1

基於我的Win32編程(Rector和Newcomer)p902-903解釋當用戶從系統菜單(而不是發送正常的WM_COMMAND)中選擇一個項目時發送。

MSDN help說SC_SIZE = 0xF000的,它和Win32編程也說Windows使用預定義的系統菜單標識內部的低4位,但不會去澄清它們的使用。感謝stukelly澄清他們。

相關問題