none
在Mobile5.0下面如果让vs2005的button显示多行,在property中没有stype,无法选择multiline,试了好久都不行 RRS feed

答案

  • 你是使用.NET Compact Framework么? 那你需要使用p/invoke来调用GetWindowLong和SetWindowLong两个函数

     

    (以下代码来自Tim Wilson )


    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern IntPtr GetCapture();

    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int
    dwNewLong);

    private const int GWL_STYLE = -16;

    private const int BS_CENTER = 0x00000300;
    private const int BS_VCENTER = 0x00000C00;
    private const int BS_MULTILINE = 0x00002000;

    private void SetButtonStyle(Button ctrl)
    {
      IntPtr hWnd;
      int style;

      ctrl.Capture = true;
      hWnd = GetCapture();
      ctrl.Capture = false;

      style = GetWindowLong(hWnd, GWL_STYLE);
      SetWindowLong(hWnd, GWL_STYLE, (style | BS_CENTER | BS_VCENTER |
    BS_MULTILINE));

      ctrl.Refresh();

    }

    ...

    SetButtonStyle(this.button1);

    PS:这里的 BS_CENTER | BS_VCENTER并不是必要的,因为他们已经被应用于一般的button

     

     

    Good LuckSmile

     

    Freesc Huang




     

    2008年7月17日 14:28
    版主

全部回复

  • 你是使用.NET Compact Framework么? 那你需要使用p/invoke来调用GetWindowLong和SetWindowLong两个函数

     

    (以下代码来自Tim Wilson )


    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern IntPtr GetCapture();

    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [System.Runtime.InteropServices.DllImport("coredll")]
    private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int
    dwNewLong);

    private const int GWL_STYLE = -16;

    private const int BS_CENTER = 0x00000300;
    private const int BS_VCENTER = 0x00000C00;
    private const int BS_MULTILINE = 0x00002000;

    private void SetButtonStyle(Button ctrl)
    {
      IntPtr hWnd;
      int style;

      ctrl.Capture = true;
      hWnd = GetCapture();
      ctrl.Capture = false;

      style = GetWindowLong(hWnd, GWL_STYLE);
      SetWindowLong(hWnd, GWL_STYLE, (style | BS_CENTER | BS_VCENTER |
    BS_MULTILINE));

      ctrl.Refresh();

    }

    ...

    SetButtonStyle(this.button1);

    PS:这里的 BS_CENTER | BS_VCENTER并不是必要的,因为他们已经被应用于一般的button

     

     

    Good LuckSmile

     

    Freesc Huang




     

    2008年7月17日 14:28
    版主
  •  

    是的,我是用的.NET Compact Framework,你提供的这部分代码可以解决button multiline的问题,非常感谢!!!
    2008年7月18日 7:15