我目前通过C程序中的消息框向用户提供信息,但消息框出现在我的应用程序的所有其他形式后面。如何让我的MessageBox在所有窗体上弹出?
我怎样才能让它出现在我的所有表格之前,或者设置它的父母?
这是我目前使用以显示消息框代码:
MessageBox(0,error_msg, "Error - No Algorithm", MB_OK);
我目前通过C程序中的消息框向用户提供信息,但消息框出现在我的应用程序的所有其他形式后面。如何让我的MessageBox在所有窗体上弹出?
我怎样才能让它出现在我的所有表格之前,或者设置它的父母?
这是我目前使用以显示消息框代码:
MessageBox(0,error_msg, "Error - No Algorithm", MB_OK);
它现在出现在所有表单背后的原因是因为您没有指定所有者窗口。这会导致它直接出现在桌面窗口的顶部。问题是你的其他窗口已经覆盖了桌面窗口,所以他们也乐意继续掩盖你的消息框。
正如您怀疑的那样,解决方案是将其中一个窗口指定为消息框的所有者。你这样做,通过指定的窗口句柄(HWND
)作为第一个参数功能:
MessageBox(hWnd, // the window handle for your owner window
error_msg, // the message to be displayed
"Error - No Algorithm", // the title
MB_OK); // flags indicating contents and behavior
的documentation提供更多的信息。
到MessageBox的第一个参数是HWND到父母。 0
或NULL
的意思是“无父母”,所以生成的消息框不会是模态的。您需要提供父HWND以获得所需的行为。
Hi paulcam,谢谢。我可以知道如何从我的C代码中获取HWND吗?您能否提供一些关于如何获取当前HWND的指导或示例? – Lynnooi 2011-03-28 05:49:35
这实际上意味着没有*所有者*。 “父”窗口和“所有者”窗口之间有区别。 Raymond Chen解释了这篇文章的不同之处(http://blogs.msdn.com/b/oldnewthing/archive/2010/03/15/9978691.aspx)。 – 2011-03-28 05:51:30
@user:你应该有一个变量用于跟踪窗口句柄。它是由'CreateWindow'或'CreateWindowEx'函数返回的值。 Visual Studio中的样板代码默认创建一个名为'hWnd'的代码,这是一个很好的名字。 – 2011-03-28 05:53:03
在此之后,只是使用FindWindow
按类别或标题搜索窗口,并将HWND
作为第一个参数提供给MessageBox
。
无论如何,我可以得到hwnd,如果我只知道表单名称?这是因为我将我的应用程序链接到其他人的部分,并且我无法将hwnd传递给我的函数。 – Lynnooi 2011-03-28 05:59:51
@user:我不明白这意味着什么。首先,C中没有“窗体”.Windows API有* windows *,但它没有“窗体”。而那些窗口没有名字。他们有窗口标题(或标题),但这些不必是唯一的。 *您指定为拥有者的哪个*窗口无关紧要,请使用您本地拥有的窗口之一。 – 2011-03-28 06:01:55
对不起,我在C编码方面很新颖。或者你能否给我提供一些关于如何获得hwnd的例子? – Lynnooi 2011-03-28 06:13:47