C# MessageBox修改

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

参考以下两篇文章 ,完成了在中文系统上显示英文的对话框。非常高兴,这个问题困扰了我3天之久。现在终于解决了。

主要使用技术,关键词包括:C#中使用钩子函数。

http://www.codeproject.com/cpp/dMsgBox.asp
How to change the MessageBox window
http://www.codeproject.com/cs/miscctrl/MessageBoxChk.asp
A "Don't show this again" checkbox for the .NET MessageBox

构造函数

public MessageBoxInternal()
  {
   //
   // TODO: Add constructor logic here
   //
   m_cbt = new LocalCbtHook();
   m_cbt.WindowCreated += new  LocalCbtHook.CbtEventHandler(WndCreated);
   m_cbt.WindowDestroyed += new LocalCbtHook.CbtEventHandler(WndDestroyed);
   m_cbt.WindowActivated += new LocalCbtHook.CbtEventHandler(WndActivated);     
  }

 private void WndCreated(object sender, CbtEventArgs e)
  {
   
   if (e.IsDialogWindow)
   {
    m_bInit = false;
    m_hwnd = e.Handle;
   }
  }

  private void WndDestroyed(object sender, CbtEventArgs e)
  {
   if (e.Handle == m_hwnd)
   {
    m_bInit = false;
    m_hwnd = IntPtr.Zero;
//    if(BST_CHECKED == (int)SendMessage(m_hwndBtn,BM_GETCHECK,IntPtr.Zero,IntPtr.Zero))
//     m_bCheck = true;
   }
  }

  private void WndActivated(object sender, CbtEventArgs e)
  {
   if (m_hwnd != e.Handle)
    return;

   // Not the first time
   if (m_bInit)
    return;
   else
    m_bInit = true;

   if ( Thread.CurrentThread.CurrentUICulture.LCID == (new System.Globalization.CultureInfo("en-US")).LCID)  
   {
    SetDlgItemText(m_hwnd, IDOK ,"&OK");
    SetDlgItemText(m_hwnd, IDCANCEL ,"&Cancel");
    SetDlgItemText(m_hwnd, IDABORT ,"&Abort");
    SetDlgItemText(m_hwnd, IDRETRY ,"&Retry");
    SetDlgItemText(m_hwnd, IDIGNORE ,"&Ignore");
    SetDlgItemText(m_hwnd, IDYES ,"&Yes");
    SetDlgItemText(m_hwnd, IDNO ,"&No");
   }
 }

本文关键:C# MessageBox修改
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top