本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
参考以下两篇文章 ,完成了在中文系统上显示英文的对话框.非常高兴,这个问题困扰了我3天之久.现在终于解决了. 主要使用技术,关键词包括:C#中使用钩子函数. http://www.codeproject.com/cpp/dMsgBox.aspHow to change the MessageBox windowhttp://www.codeproject.com/cs/miscctrl/MessageBoxChk.aspA "Don't show this again" checkbox for the .NET MessageBox 构造函数 public MessageBoxInternal( ) { 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; 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#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
|