matlab GUI-如何修改对话框的字体大小等属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab GUI-如何修改对话框的字体大小等属性相关的知识,希望对你有一定的参考价值。
参考技术A Matlab有很多种类的对话框,每种对话框都是开发者提前做好的GUI图形界面。在我们自己创建的GUI界面中,我们在.fig界面里双击控件就能进入到属性编辑器中修改参数,或者在.m程序中用set语句进行修改。那么,如何修改对话框的一些属性呢?自然是只能用set语句修改了。用上一篇的错误提示框为例。我们在命令行窗口输入:h=errordlg('您还没有选取图片!!','温馨提示'); 按回车键运行,就会在电脑屏幕的正中间偏上的位置出现错误提示框。如下图:
我们在命令行窗口输入findobj(h),就可以看到这个图形界面里面包含哪些控件:
知道了这些控件后,修改它们的属性就很容易了,之前的文章中都有讲过。举三个例子:
(1)修改按钮的字体大小: set(findobj(h,'type','uicobtrol'),'Fontsize',12)
这个语句的意思是将h这个图形界面中类型为UIcontrol(按钮)的控件的字体大小设置为12。效果如下:
图中的“确定”两个字是不是比之前更大啦
(2)修改文本框中字体大小:set(findobj(h,'type','text'),'Fontsize',12)
效果如下:
(3)修改图标:
Im=findobj(h,'type','axes'); %获取h中类型为axes的对象。h中有两个axes对象,一个为感叹号那个图标的Axes,另一个为整个GUI界面的背景
imshow('1.jpg','parent',Im(1));
set(Im(1),'xtick',[],'ytick',[])
Im中包含两个axes,Im(1)为感叹号那个图标的Axes,Im(2)为整个GUI界面的背景。因为我们要显示的是图片,所以要将横纵坐标轴标签设为空。效果如下:
除了图形界面中的控件可以修改属性参数,对于h这个图形界面的名称、框体大小等属性也可以修改。在命令行窗口直接输入h,按回车键,就可以跳出h的所有属性。如下图:
要细讲的话实在是不可能,就挑几个意思一下。比如添加菜单栏,我们在命令行窗口输入:set(h,'menubar','figure'),就可以看到错误提示框多了一行菜单栏:
输入:set(h,'toolbar','figure'),就可以看到错误提示框又多了一行工具栏:
输入:set(h,'resize','on'),就可以看到错误提示框的最大化按钮颜色变深,此时你可以通过拉提示框的边缘将其放大或缩小。
输入:set(h,'Units','centimeter','Position',[16 12 8 8]),首先将位置的单位设成cm,改变框体大小为8*8cm。如下图所示:
在这里只能说是写点东西给大家一些启发,大家可以按照这种方法自己研究。再强调一遍,Matlab中,这些所谓的对话框,甚至是工具箱里面那些东东,都是开发者实现编好的GUI图形交互界面而已(往大了看,整个Windows系统就是个大大的用户交互界面),因此,其实今天说的这些方法,同样适用于其他的对话框或者你自己创建的GUI界面,道理都是通的。
vb中如何改变对话框的字体
鄙人在做VB程序时希望改变Msgbox中显示的字体,问如何实现?
'方法是有,不过不建议这么做.你确定你还要这么做?确定?好吧.那就接着往下看.'只有想不到,没有做不到,看我无敌API......呵呵
'这段代码大部分是别人写的,我只是修改并封装成函数.
'功能可扩展:颜色,背景图案,按钮颜色,按钮图案...(总之,很多很多...)
'函数调用方法:MyMsgBox 显示的信息,按钮,标题,字体名称(默认为宋体),字体大小,斜体,下划线,删除线
'窗体代码
Private Sub Command1_Click()
MyMsgBox "我变,我变,我变变变!!!!", vbYesNo, "- -|||", "黑体"
End Sub
'模块代码
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Private Const HCBT_ACTIVATE = 5
Private Const WH_CBT = 5
Private Const DEFAULT_CHARSET = 1
Private Const OUT_TT_ONLY_PRECIS = 7
Private Const CLIP_DEFAULT_PRECIS = 0
Private Const DEFAULT_QUALITY = 0
Private Const FF_DONTCARE = 0
Private Const WM_SETFONT = &H30
Private hHook As Long
Private MsgBoxTitle As String
Private hFont As Long
Private Sub EnableHook()
If hHook = 0 Then
hHook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, 0, App.ThreadID)
End If
End Sub
Private Sub FreeHook()
If hHook <> 0 Then
Call UnhookWindowsHookEx(hHook)
hHook = 0
End If
End Sub
Private Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If nCode < 0 Then
HookProc = CallNextHookEx(hHook, nCode, wParam, lParam)
Exit Function
End If
'当MsgBox Activate之前去更改Button的标题
If nCode = HCBT_ACTIVATE Then
Dim str5 As String
Dim len5 As Long, I As Long
str5 = String(255, 0)
len5 = 256
I = GetWindowText(wParam, str5, len5)
str5 = Left(str5, InStr(1, str5, Chr(0)) - 1)
'如果Active Window上的标题是MsgBox上的标题
'
If str5 = MsgBoxTitle Then
'取得MsgBox上的所有子window
Call EnumChildWindows(wParam, AddressOf ChgButtonTitle, 0)
End If
End If
HookProc = 0 '令待完成的动作继续完成,若为1,则取消原本要完成的动作
End Function
Private Function ChgButtonTitle(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim clsName As String
If hwnd = 0 Then
ChgButtonTitle = 0
Exit Function
End If
clsName = String(255, 0)
Call GetClassName(hwnd, clsName, 256)
clsName = Left(clsName, InStr(1, clsName, Chr(0)) - 1)
'找到Static型态的子Window,并更改其上的标题
If clsName = "Static" Then
SendMessage hwnd, WM_SETFONT, hFont, True
End If
ChgButtonTitle = 1 '表示继续找下一个子Window
End Function
Public Function MyMsgBox(ByVal Prompt As String, Optional ByVal Buttons As Long, Optional ByVal Title As String = " ", Optional ByVal sFontName As String = "宋体", Optional ByVal FontSize As Long, Optional ByVal FontItalic As Boolean = False, Optional ByVal FontUnderline As Boolean = False, Optional ByVal FontStrikethru As Boolean = False) As Long
hFont = CreateFont(FontSize, 0, 0, 0, 0, FontItalic, FontUnderline, FontStrikethru, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, sFontName)
Call EnableHook
MsgBoxTitle = Title
MyMsgBox = MsgBox(Prompt, Buttons, MsgBoxTitle)
Call FreeHook
End Function 参考技术A 使用时与一般的WinAPI相差不多, 以下有一个包装过的函式.
MsgBox(提示文字, 标题, ID_Flat)
第叁个引数的设定与本函数传回值, 请参阅 WinAPI 中对MessageBox 的说明
本函数传入值为 Object Pascal 式的字串, 如果需要传入 PChar 请直接呼叫 Application.MessageBox
以 PChar(LongStr) 即可传入 Application.MessageBox不一定需要 call 本函数, 只是为了前后版本相容而保留本函数
function MsgBox(const sText, sCaption: string; wFlag: word): integer;
$ifdef Windows
$define __ShortString
$endif
$ifdef Win32
$ifopt H- 参考技术B 想法不错,不过msgbox不是控件,无法改变字体属性,个人看法!!
或许改变系统默认字体可以才行!!
如果非要改变字体,还有按钮的名称等,还是自己设计一个窗体模拟 msgbox 参考技术C 是的,inputbox和msgbox的字体、颜色、大小等都不好改。
如果要美化他们,建议自己制作小窗体来代替他们,也不是很难,并且各种设置随心所欲。。 参考技术D 自己设计个窗体吧
以上是关于matlab GUI-如何修改对话框的字体大小等属性的主要内容,如果未能解决你的问题,请参考以下文章