以下是引用foxfans在2023-5-15 17:05:56的发言:
其实并不存在bug,Vfp的MessageBox实际是对二个API函数的封装MessageBoxA和MessageBoxTimeoutA,
置顶状态时,MessageBoxA时抢占获得焦点只要不被其他置顶窗口激活Messagebox窗口就默认置顶在上面.
而当MessageBoxTimeoutA时,Vfp主窗口本身重绘又置顶就会把messageboxtimeout(本身不置顶)窗口置后,这时候你再弄个置顶窗口放在你主程序上面一样把Vfp主程序统统覆盖,除非你这时候Hook掉这个Messaageboxtimeout窗口,把这个窗口也设置成置顶状态,就会在你的主窗口上面,换句话说,即使你的messagebox置顶别人的也是置顶属性的窗口后激活在你messagebox窗口位置时,一样会在你messagebox窗口之上.
其实并不存在bug,Vfp的MessageBox实际是对二个API函数的封装MessageBoxA和MessageBoxTimeoutA,
置顶状态时,MessageBoxA时抢占获得焦点只要不被其他置顶窗口激活Messagebox窗口就默认置顶在上面.
而当MessageBoxTimeoutA时,Vfp主窗口本身重绘又置顶就会把messageboxtimeout(本身不置顶)窗口置后,这时候你再弄个置顶窗口放在你主程序上面一样把Vfp主程序统统覆盖,除非你这时候Hook掉这个Messaageboxtimeout窗口,把这个窗口也设置成置顶状态,就会在你的主窗口上面,换句话说,即使你的messagebox置顶别人的也是置顶属性的窗口后激活在你messagebox窗口位置时,一样会在你messagebox窗口之上.
好吧,请您解释下为何直接调用这个 api 不会发生楼主的情况,原因是什么?
*!* Messagebox("在这里呀!",1,"信息提示")
Declare Long MessageBoxTimeout in win32api ;
Long hWnd, String lpText, String lpCaption, Long uType, Long wLanguageId, Long dwMilliseconds
MessageBoxTimeout(Thisform.HWnd, '在这里呀!', '信息提示', 0, 0, 5000)
这家伙很懒,啥也没留下