一、定义提示框位置结构体
struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
};
二、实现MessageBox居中owner窗体显示类
class MessageEx
{
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);
}
public static DialogResult Show(IWin32Window owner,string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton)
{
Lock();
return MessageBox.Show(owner,text, caption, buttons, icon, defaultButton);
}
}

自定义提示框之C#设计笔记(十一)相关推荐

  1. 微信小程序自定义提示框制作的简单方法

    微信小程序自定义提示框制作的简单方法 下面的时候提示框的结构 wxml部分 <!-- 提示框 --> <view class="showToast" wx:if= ...

  2. Qt实现侧边栏显示隐藏以及自定义提示框

    1.目的   最近在工作中需要实现一个Qt的侧边栏,通过按钮控制显示和隐藏,此外还要求实现自定义气泡提示框,最终参考网上知识进行了实现,效果如下: 1.窗口控件大小可以随窗体自由缩放: 2.侧边栏按钮 ...

  3. Flutter中自定义提示框

    1. 弹出提示框 定义模态框组件,代码如下: import 'package:flutter/material.dart'; class MyDialog extends Dialog{final S ...

  4. winform 关于Messagebox自动定时关闭和自定义提示框总按钮上文本的问题的整理

    如果要改变Messagebox上按钮的文本和自动关闭Messagebox提示框,一种方法是自定义一个winform窗口模仿替代Messagebox,变通的实现效果,另一种方法是通过调用系统的API来实 ...

  5. 在echarts中自定义提示框内容

    1.期望效果 以柱状图为例,在鼠标滑过每个数据标签时,为了更友好地显示数据内容,需要对显示的数据内容作格式化处理,添加自定义内容. 如下图,鼠标滑过每个数据项时, 第1张是默认提示框: 第2张是处理成 ...

  6. Js自定义提示框(dialog版本)

    问题的来源: 开发的过程中总是要给出各种各样的提示语 ,但是每次都通过手动的形式给后面加提示感觉不舒服  又不想通过服务器控件来做这些事情. 于是就想把提示语和验证整合到一起 套在dialog上面使用 ...

  7. Js利用Div自定义提示框弹窗+定时器

    Html代码:  <style type="text/css">.alertDivClass {position: absolute;z-index: 9999;wid ...

  8. echarts自定义提示框数据

    tooltip: {trigger: "axis",axisPointer: {// 坐标轴指示器,坐标轴触发有效type: "line" // 默认为直线,可 ...

  9. echart图表(自定义提示框) 鼠标移动到数据展示区自定义展示提示框 天/时/分/秒

    // 毫秒数转换为 天 时 分 秒 function timeTransition(value) {var time = parseInt(value);// 需要转换的时间秒 var minute ...

最新文章

  1. CentOS 7 下安装 Docker 及操作命令
  2. 4 个概念,1 个动作,让应用管理变得更简单
  3. java 数组排序论文_Java 7是否对方法Arrays.Sort使用Tim Sort?
  4. (58) 在计算字段提供搜索功能
  5. NullPointerException int java.util.List.size()
  6. php 腾讯云 文字识别_腾讯科技(成都)有限公司
  7. SpringMVC自学日志07(整合Mybatic)
  8. 发布一个基于 Reactor 模式的 C++ 网络库
  9. KNN(二)--近似最近邻算法ANN
  10. kafka----kafka connect的使用(一)
  11. kubernetes如何进入指定的容器
  12. 【明解C语言】之函数详解《上篇》
  13. ant design table列表 合并列单元格
  14. VirtuoZo:航摄影像的处理及拼接
  15. [No000026]365种创业、办公、和生活成长的精华资源
  16. 畅想未来的计算机网络科技有限公司,畅想未来科技生活作文
  17. 蚂蚁笔记(leanote)搭建
  18. 极路由 刷linux,极路由 刷uboot + openwrt , 以及连接校园网(netkeeper)
  19. 特殊手段恢复被truncate的表
  20. 5个酷毙的 Python 神器工具

热门文章

  1. 解决Mybatis-Plus的联合主键问题
  2. VGG pytorch实现
  3. 基于Python实现看图说话和微表情识别
  4. AD中off grid pin问题解决
  5. RabbitMQ集群之shovel插件的使用
  6. RabbitMQ 集群、Federation、Shovel
  7. 无人之疆 - 坝上草原,锡林郭勒,克什克腾
  8. linux系统的python能运行dll,python调用window dll和linux so例子
  9. webim 前端自动化测试框架
  10. opencv保存图片成视频无法播放、没写成功(指定路径下没有)