自定义提示框之C#设计笔记(十一)
一、定义提示框位置结构体
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#设计笔记(十一)相关推荐
- 微信小程序自定义提示框制作的简单方法
微信小程序自定义提示框制作的简单方法 下面的时候提示框的结构 wxml部分 <!-- 提示框 --> <view class="showToast" wx:if= ...
- Qt实现侧边栏显示隐藏以及自定义提示框
1.目的 最近在工作中需要实现一个Qt的侧边栏,通过按钮控制显示和隐藏,此外还要求实现自定义气泡提示框,最终参考网上知识进行了实现,效果如下: 1.窗口控件大小可以随窗体自由缩放: 2.侧边栏按钮 ...
- Flutter中自定义提示框
1. 弹出提示框 定义模态框组件,代码如下: import 'package:flutter/material.dart'; class MyDialog extends Dialog{final S ...
- winform 关于Messagebox自动定时关闭和自定义提示框总按钮上文本的问题的整理
如果要改变Messagebox上按钮的文本和自动关闭Messagebox提示框,一种方法是自定义一个winform窗口模仿替代Messagebox,变通的实现效果,另一种方法是通过调用系统的API来实 ...
- 在echarts中自定义提示框内容
1.期望效果 以柱状图为例,在鼠标滑过每个数据标签时,为了更友好地显示数据内容,需要对显示的数据内容作格式化处理,添加自定义内容. 如下图,鼠标滑过每个数据项时, 第1张是默认提示框: 第2张是处理成 ...
- Js自定义提示框(dialog版本)
问题的来源: 开发的过程中总是要给出各种各样的提示语 ,但是每次都通过手动的形式给后面加提示感觉不舒服 又不想通过服务器控件来做这些事情. 于是就想把提示语和验证整合到一起 套在dialog上面使用 ...
- Js利用Div自定义提示框弹窗+定时器
Html代码: <style type="text/css">.alertDivClass {position: absolute;z-index: 9999;wid ...
- echarts自定义提示框数据
tooltip: {trigger: "axis",axisPointer: {// 坐标轴指示器,坐标轴触发有效type: "line" // 默认为直线,可 ...
- echart图表(自定义提示框) 鼠标移动到数据展示区自定义展示提示框 天/时/分/秒
// 毫秒数转换为 天 时 分 秒 function timeTransition(value) {var time = parseInt(value);// 需要转换的时间秒 var minute ...
最新文章
- CentOS 7 下安装 Docker 及操作命令
- 4 个概念,1 个动作,让应用管理变得更简单
- java 数组排序论文_Java 7是否对方法Arrays.Sort使用Tim Sort?
- (58) 在计算字段提供搜索功能
- NullPointerException int java.util.List.size()
- php 腾讯云 文字识别_腾讯科技(成都)有限公司
- SpringMVC自学日志07(整合Mybatic)
- 发布一个基于 Reactor 模式的 C++ 网络库
- KNN(二)--近似最近邻算法ANN
- kafka----kafka connect的使用(一)
- kubernetes如何进入指定的容器
- 【明解C语言】之函数详解《上篇》
- ant design table列表 合并列单元格
- VirtuoZo:航摄影像的处理及拼接
- [No000026]365种创业、办公、和生活成长的精华资源
- 畅想未来的计算机网络科技有限公司,畅想未来科技生活作文
- 蚂蚁笔记(leanote)搭建
- 极路由 刷linux,极路由 刷uboot + openwrt , 以及连接校园网(netkeeper)
- 特殊手段恢复被truncate的表
- 5个酷毙的 Python 神器工具