1、消息框置顶,只需要设置其消息框的参数就可以了。这是VB的消息框函数:
[Visual Basic] 纯文本查看 复制代码 Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult
其中的第二个参数,也就是按钮状态,设置为vbSystemModal即可。
MsgBox 消息内容, vbSystemModal
不过在点击消息框后,窗体不会激活。若要消息框出现之前就先激活窗体,可以让窗体先临时置顶,随后取消。
这里需要先声明API函数:SetWindowPos。
其原型为[Visual Basic] 纯文本查看 复制代码 Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long
它的作用是设置窗体位置(当然,除了让窗口置顶以外,也可以改变其位置和大小)。
其中的几个参数:X,Y,CX,CY分别代表窗体的左(Left),上(Top),宽(Width)和高(Height),且其度量单位为像素,而不是VB缺省的缇。
由于只需要置顶窗口,所以这几个参数设置为0就好。
接下来看下面几个需要用到的参数:
第一个hWnd,指定窗体的句柄。这个我在上个回复中提到了。
第二个hWndInsertAfter,指定窗体的ZOrder。ZOrder是窗体的摆放次序。什么叫摆放次序呢?这里作一个简单的例子:上学的时候,小组长收作业,然后交给学科代表。先交作业的同学,他的作业本放最底下,后交作业的同学,他的作业本放上面。现在你跟小组长说,能不能帮忙把你的作业放最上面,小组长说好,于是你的作业本就从中间或者最底下拿到了最上面。老师(用户)最先看到的自然就是你的作业本(窗体)了。
同样,此参数的常量也可在WinUser.h文件找到。
下面是该参数的其中两个常量:[C++] 纯文本查看 复制代码 #define HWND_TOPMOST ((HWND)-1)
#define HWND_NOTOPMOST ((HWND)-2)
虽然其定义的值前面带了“HWND”,但是不需要用到这个HWND,只需要后面的值就可以了。
也就是说,用-1(HWND_TOPMOST)表示置顶窗口,用-2(HWND_NOTOPMOST )表示取消置顶。
最后一个参数wFlag,用于表示移动窗体和尺寸的标志(当然也包括其他的标志),参数的常量可以在WinUser.h找到,下面是我们所需要的两个常量:
[C++] 纯文本查看 复制代码 #define SWP_NOSIZE 0x0001
#define SWP_NOMOVE 0x0002
这两常量分别代表不要改变尺寸和不要改变大小,所以得把它都用上。
如果要·同时用上两个常量,可以使用+或者Or关键字。一般而言,Or关键字比+更常用,所以就用Or来连接这俩常量。
现在,置顶窗体和取消置顶的代码为
[Visual Basic] 纯文本查看 复制代码 SetWindowPos 窗体.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE '设置窗口置顶
SetWindowPos 窗体.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE '取消窗口置顶
为了实现强制让消息框置顶,在MsgBox之前使用置顶窗体的函数;在之后使用取消置顶的函数。
2、任务栏和窗口的闪烁则用到名为FlashWindow的API。其原型如下:
[Visual Basic] 纯文本查看 复制代码 Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
用法很简单:
第一个参数传入窗体句柄,第二个参数传入的值如果不是0,则闪烁窗口和任务栏。
如果要实现连续的闪烁,只需把其调用放入到一个开着的钟(Timer)里面即可。
[Visual Basic] 纯文本查看 复制代码 Private Sub timer1_Timer()
FlashWindow hwnd, 1&
End Sub |