我是靠谱客的博主 雪白鞋子,最近开发中收集的这篇文章主要介绍C#中可以固定MessageBox.Show的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

using System;

using System.Collections.Generic;

using System.Text;

using System.Runtime.InteropServices;

using System.Windows.Forms;

using System.Drawing;

namespace Updater{  

struct RECT {

public int left;

public int top;

public int right;

public int bottom;

}; //实现MessageBox居中owner窗体显示

class MessageBoxEx {

public delegate IntPtr HookProc(int nCode, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll")]

private static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);

[DllImport("user32.dll")]

private static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam);

[DllImport("kernel32.dll")]

private static extern IntPtr GetModuleHandle(string modName);

[DllImport("user32.dll")]

private static extern bool UnhookWindowsHookEx(IntPtr hhook);

[DllImport("user32.dll")]

private static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);

[DllImport("user32.dll")]

private static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);

[DllImport("user32.dll")]

private static extern bool MoveWindow( IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

private const int WH_CBT = 5;

private const int HCBT_ACTIVATE = 5;

private const int GW_OWNER = 4;

private static IntPtr hookHandle = IntPtr.Zero;

private static RECT GetOwnerRect(IntPtr hwnd)

{

RECT ownerRect = new RECT();

IntPtr ownerHwnd = GetWindow(hwnd, GW_OWNER);

GetWindowRect(ownerHwnd, ref ownerRect);

return ownerRect; }

private static IntPtr CBTHookCallback(int nCode, IntPtr wParam, IntPtr lParam)

{

switch (nCode)

{

case HCBT_ACTIVATE:

RECT vRectangle = new RECT();

RECT ownerRect = GetOwnerRect(wParam);

GetWindowRect(wParam, ref vRectangle);

int width = vRectangle.right - vRectangle.left;

int height = vRectangle.bottom - vRectangle.top; 

int ownerWidth = ownerRect.right - ownerRect.left;

int ownerHeight = ownerRect.bottom - ownerRect.top;

int left = Math.Max(ownerRect.left + (ownerWidth - width) / 2, 0);

int top = Math.Max(ownerRect.top + (ownerHeight - height) / 2, 0); 

MoveWindow(wParam, left, top, width, height, false);

UnhookWindowsHookEx(hookHandle);

break;

}

return CallNextHookEx(hookHandle, nCode, wParam, lParam);

}

private static void Lock()

{

hookHandle = SetWindowsHookEx(WH_CBT, new HookProc(CBTHookCallback), GetModuleHandle(null), 0);

} //根据需要重载

public static DialogResult Show(string text)

{

Lock(); 

return MessageBox.Show(text);

}

public static DialogResult Show(IWin32Window owner, string text)

{

Lock();

return MessageBox.Show(owner, text);

}

public static DialogResult Show(string text, string caption)

{

Lock();

return MessageBox.Show(text, caption);

}

public static DialogResult Show(IWin32Window owner, string text, string caption)

{

Lock();

return MessageBox.Show(owner, text, caption);

}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons)

{

Lock();

return MessageBox.Show(text, caption, buttons);

}

public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons)

{

Lock();

return MessageBox.Show(owner, text, caption, buttons);

}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon)

{

Lock();

return MessageBox.Show(text, caption, buttons, icon);

}

public static DialogResult Show(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon) 

{

Lock();

return MessageBox.Show(owner, text, caption, buttons, icon);

}

public static DialogResult Show(string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)

{

Lock();

return MessageBox.Show(text, caption, buttons, icon, defaultButton);

}

}

}

最后

以上就是雪白鞋子为你收集整理的C#中可以固定MessageBox.Show的方法的全部内容,希望文章能够帮你解决C#中可以固定MessageBox.Show的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部