2009-05-31 101 views
5

我正在制作一个自定义消息框,可以让您复制文本,但我希望它看起来完全像一个标准消息框,所以我想将按钮文本设置为任何系统语言,就像MessageBox类一样。 有没有人知道如何获得该文本(“是”,“否”,“取消”等)?如何获取MessageBox按钮标题?

+0

如果您找不到解决方案,也许可以将消息文本放在剪贴板上,并通知用户消息在剪贴板上。 – Stormenet 2009-05-31 17:32:36

+2

如果在显示标准MessageBox时按Ctrl + C,默认情况下它会将文本复制到剪贴板。 – 2009-05-31 17:49:23

+0

感谢您的提示,但无论如何,我需要更多的定制,如滚动条更大的消息。 – rodrigoq 2009-05-31 18:18:45

回答

6

感谢您的解答与Snarfblam链接我可以找出其余的。

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(); 

} 
-2

在您键入该消息的时候,你可以键入“是”,“否”,“确定”,“取消” ...

+3

我很确定OP希望从系统中获取文本,以便它使用正确的语言(系统区域设置) – 2009-05-31 17:10:35

+0

正是Adam,这就是我所需要的,所以我不必耗尽所有语言 – rodrigoq 2009-05-31 17:19:33

0

你可能会打开System.Windows.Forms.dll的中Reflector并查看它是如何设置按钮文本的。

4

这些字符串似乎存储在User32.dll库中。底部是Pure BASIC论坛上的this discussion的详细信息。