想必现在有很多小伙伴对于如何放大MessageBox提示信息字体的大小方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于如何放大MessageBox提示信息字体的大小方面的知识分享给大家,希望大家会喜欢哦。
首先改按钮文字相必代码不少,就不说了
然后文字颜色和大小
C#代码,重构messagebox.show
未经芝士回答允许不得转话载本文内通容,否国则将视为侵养低权
private static bool HookWndProcess()
{
IntPtr hInstance = IntPtr.Zero;
int dwCurPID = 0;
int hThreadId = WIN32API.GetWindowThreadProcessId(Process.GetCurrentProcess().MainWindowHandle, ref dwCurPID);
//全局钩子,勾住回调类消息
分同种法机去但解象次任议,研织半列般细。
HookWndPro = new WIN32API.HookProc(WndProc);
在分同所进小业应它线质革,设任油什步验支局。
lHookWnd = WIN32API.SetWindowsHookEx(WIN32API.WH_CALLWNDPROC, HookWndPro, hInstance, hThreadId);
if (lHookWnd == 0)
return false;
else
return true;
}
///
/// 显示提示消息框
///
///提示消息内容
///
public static DialogResult Show(string Message)
{
string Title ="系统提示";
HookCBProcess();
HookWndProcess();
curMButtons = MessageBoxButtons.OK;
dlg = System.Windows.Forms.MessageBox.Show(GetNewMessage(Message), Title, MessageBoxButtons.OK, MessageBoxIcon.Information);
UnHookWndProcess();
Button1Text =""; Button2Text =""; Button3Text ="";
hWnd = 0;
return dlg;
}
先用HookWndProcess勾住WndProc
private static int WndProc(int nCode, Int32 wParam, IntPtr lParam)
{
WIN32API.CWPSTRUCT tCWP = new WIN32API.CWPSTRUCT();
string sClass;
//将lParm参数复制到结构CWPSTRUCT中,并检查消息是否为创建
WIN32API.CopyMemory_CWPSTRUCT(ref tCWP, (IntPtr)lParam, Marshal.SizeOf(tCWP));
if (tCWP.message == WIN32API.WM_CREATE)
{
StringBuilder sb = new StringBuilder(255);
WIN32API.GetClassName((IntPtr)tCWP.hWnd, sb, sb.MaxCapacity);
sClass = sb.ToString().Trim((char)0);
if (sClass =="#32770")
{
//#32770表示已经创建Msgbox
lWndPro = new WIN32API.WndProc(SubMsgBox);
lPrevWnd = WIN32API.SetWindowLong_Proc((IntPtr)tCWP.hWnd, WIN32API.GWL_WNDPROC, lWndPro);
}
}
return WIN32API.CallNextHookEx(lHookWnd, nCode, wParam, lParam);
}
然后在WndProc中检查WM_CREATE消息判断消息框是否创建
如已创建再把消息勾住并指向我们的自定义消息函数SubMsgBox
private static int SubMsgBox(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam)
{
switch (Msg)
{
//对话框颜色和标签颜色Message
case WIN32API.WM_CTLCOLORDLG:
case WIN32API.WM_CTLCOLORSTATIC:
//设置透明并改变颜色
if (Msg == WIN32API.WM_CTLCOLORSTATIC)
WIN32API.SetBkMode(wParam, WIN32API.TRANSPARENT);
lForecolor = BaseFun.ColorToRGB(TextColor);
WIN32API.SetTextColor(wParam, lForecolor);
WIN32API.SelectObject(wParam, TextFont.ToHfont());
//设置背景图片
return WIN32API.CreatePatternBrush(BackGround.GetHbitmap());
case WIN32API.WM_DESTROY:
//还原Msgbox的样式
WIN32API.SetWindowLong(hWnd, WIN32API.GWL_WNDPROC, (int)lPrevWnd);
break;
}
return WIN32API.CallWindowProc(lPrevWnd, hWnd, Msg, wParam, lParam);
}
在这个SubMsgBox中用
WIN32API.SetTextColor(wParam, lForecolor);
WIN32API.SelectObject(wParam, TextFont.ToHfont());
其中
return WIN32API.CreatePatternBrush(BackGround.GetHbitmap());
case WIN32API.WM_DESTROY:
还能修改对话框的背景图,我这里背景图是通过messagebox的附加属性实现,不过我没有设置
字体颜色和字体的更改最后再把已处理的消息放回队列中。
最后完成以后再用WIN32API.UnhookWindowsHookEx(lHookWnd)卸载消息钩子就行了
运行结果如下
重构的后MessageBox
原始
修改后
本文到此结束,希望对大家有所帮助。