就是常见的 MessageBoxButtons 所代表的按钮,但我要在自己的对话框中使用,而不是 MessageBox 。
就像有些软件本是英文的,但这三个按钮是中文的,和系统一致。

解决方案 »

  1.   

    显然不是, Button 要自己设置标题,牵扯到本地化问题,麻烦。
      

  2.   

    使用Unicode方式就不用担心本地化了
      

  3.   

    似乎 MFC 用的什么 ID_OK ID_CANCEL 之类,不清楚。总之有预定义的本地化标题,引用就可以了,不用自己搞。
      

  4.   

    class Program {[DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
    [DllImport("kernel32")]
    static extern IntPtr LoadLibrary(string lpFileName);private const uint OK_CAPTION = 800;
    private const uint CANCEL_CAPTION = 801;
    private const uint ABORT_CAPTION = 802;
    private const uint RETRY_CAPTION = 803;
    private const uint IGNORE_CAPTION = 804;
    private const uint YES_CAPTION = 805;
    private const uint NO_CAPTION = 806;
    private const uint CLOSE_CAPTION = 807;
    private const uint HELP_CAPTION = 808;
    private const uint TRYAGAIN_CAPTION = 809;
    private const uint CONTINUE_CAPTION = 810;static void Main(string[] args) {
            StringBuilder sb = new StringBuilder(256);        IntPtr user32 = LoadLibrary(Environment.SystemDirectory + "\\User32.dll");        LoadString(user32, OK_CAPTION, sb, sb.Capacity);
            string ok = sb.ToString();        LoadString(user32, CANCEL_CAPTION, sb, sb.Capacity);
            string cancel = sb.ToString();        LoadString(user32, ABORT_CAPTION, sb, sb.Capacity);
            string abort = sb.ToString();        LoadString(user32, RETRY_CAPTION, sb, sb.Capacity);
            string retry = sb.ToString();        LoadString(user32, IGNORE_CAPTION, sb, sb.Capacity);
            string ignore = sb.ToString();        LoadString(user32, YES_CAPTION, sb, sb.Capacity);
            string yes = sb.ToString();        LoadString(user32, NO_CAPTION, sb, sb.Capacity);
            string no = sb.ToString();        LoadString(user32, CLOSE_CAPTION, sb, sb.Capacity);
            string close = sb.ToString();        LoadString(user32, HELP_CAPTION, sb, sb.Capacity);
            string help = sb.ToString();        LoadString(user32, TRYAGAIN_CAPTION, sb, sb.Capacity);
            string tryAgain = sb.ToString();        LoadString(user32, CONTINUE_CAPTION, sb, sb.Capacity);
            string cont = sb.ToString();}
      

  5.   

    我已经用这样的方法解决了,只是比较绕,现在的问题是不知道有没有更好的 C# 方法。
    下面的例子,在中文系统上可以看到输出为“确定  取消”。
    using System;
    using System.Runtime.InteropServices;
    using System.Text;namespace ConsoleApplication1 {
        class Program {
            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);
            [DllImport("kernel32")]
            static extern IntPtr LoadLibrary(string lpFileName);        private const uint OK_CAPTION = 800;
            private const uint CANCEL_CAPTION = 801;        static void Main(string[] args)
            {
                StringBuilder sb = new StringBuilder(256);            IntPtr user32 = LoadLibrary(Environment.SystemDirectory + "\\User32.dll");            LoadString(user32, OK_CAPTION, sb, sb.Capacity);
                string ok = sb.ToString();            LoadString(user32, CANCEL_CAPTION, sb, sb.Capacity);
                string cancel = sb.ToString();            Console.WriteLine("{0}  {1}", ok, cancel);
            }
        }
    }