2011-03-28 49 views
0

我目前通过C程序中的消息框向用户提供信息,但消息框出现在我的应用程序的所有其他形式后面。如何让我的MessageBox在所有窗体上弹出?

我怎样才能让它出现在我的所有表格之前,或者设置它的父母?

这是我目前使用以显示消息框代码:

MessageBox(0,error_msg, "Error - No Algorithm", MB_OK); 

回答

2

它现在出现在所有表单背后的原因是因为您没有指定所有者窗口。这会导致它直接出现在桌面窗口的顶部。问题是你的其他窗口已经覆盖了桌面窗口,所以他们也乐意继续掩盖你的消息框。

正如您怀疑的那样,解决方案是将其中一个窗口指定为消息框的所有者。你这样做,通过指定的窗口句柄(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提供更多的信息。

+0

无论如何,我可以得到hwnd,如果我只知道表单名称?这是因为我将我的应用程序链接到其他人的部分,并且我无法将hwnd传递给我的函数。 – Lynnooi 2011-03-28 05:59:51

+1

@user:我不明白这意味着什么。首先,C中没有“窗体”.Windows API有* windows *,但它没有“窗体”。而那些窗口没有名字。他们有窗口标题(或标题),但这些不必是唯一的。 *您指定为拥有者的哪个*窗口无关紧要,请使用您本地拥有的窗口之一。 – 2011-03-28 06:01:55

+0

对不起,我在C编码方面很新颖。或者你能否给我提供一些关于如何获得hwnd的例子? – Lynnooi 2011-03-28 06:13:47

0

MessageBox的第一个参数是HWND到父母。 0NULL的意思是“无父母”,所以生成的消息框不会是模态的。您需要提供父HWND以获得所需的行为。

+0

Hi paulcam,谢谢。我可以知道如何从我的C代码中获取HWND吗?您能否提供一些关于如何获取当前HWND的指导或示例? – Lynnooi 2011-03-28 05:49:35

+0

这实际上意味着没有*所有者*。 “父”窗口和“所有者”窗口之间有区别。 Raymond Chen解释了这篇文章的不同之处(http://blogs.msdn.com/b/oldnewthing/archive/2010/03/15/9978691.aspx)。 – 2011-03-28 05:51:30

+0

@user:你应该有一个变量用于跟踪窗口句柄。它是由'CreateWindow'或'CreateWindowEx'函数返回的值。 Visual Studio中的样板代码默认创建一个名为'hWnd'的代码,这是一个很好的名字。 – 2011-03-28 05:53:03

0

在此之后,只是使用FindWindow按类别或标题搜索窗口,并将HWND作为第一个参数提供给MessageBox

相关问题