메시지 상자가 포커스를 잃어 버린 경우에도 위에 머물러있는 기본 메시지 상자 (MessageBox.Show()
) TopMost를 만드는 방법은 무엇입니까? 맞춤 설정을 만들고 싶지 않습니다. SetWindowHook 또는 비슷한 것을 사용하여 방법이 있습니까? 나는 이미 많은 연구를했지만 발견 한 모든 해결책이 효과가 없었습니다. 누군가 VB.net 또는 C#에서이 작업을 수행하는 방법을 알려 줄 수 있습니까?MessageBox Top 가장 사실
-1
A
답변
1
가장 간단한 방법은 MessageBox
함수를 호출하고 MB_SYSTEMMODAL
플래그를 전달하는 것입니다.
0
알겠습니다. 이것은 열려있는 모든 창 상단에 메시지 상자가 표시되며, Topmost 옵션이 있는지 여부와 상관없이 메시지 상자가 항상 앞에 표시됩니다.
Public Enum MessageBoxResult As UInteger
Ok = 1
Cancel
Abort
Retry
Ignore
Yes
No
Close
Help
TryAgain
ContinueOn
Timeout = 32000
End Enum
Public Enum MessageBoxOptions As UInteger
SystemModal = &H1000
NoFocus = &H8000
SetForeground = &H10000
Topmost = &H40000
End Enum
<DllImport("user32.dll", EntryPoint:="MessageBoxW", SetLastError:=True, Charset:=CharSet.Unicode)> _
Public Shared Function MessageBox(hwnd As IntPtr, _
<MarshalAs(UnmanagedType.LPTStr)> lpText As String, _
<MarshalAs(UnmanagedType.LPTStr)> lpCaption As String, _
<MarshalAs(UnmanagedType.U4)> uType As MessageBoxOptions) As <MarshalAs(UnmanagedType.U4)> MessageBoxResult
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox(IntPtr.Zero, TextBox2.Text, TextBox1.Text, MessageBoxButtons.OK Or MessageBoxOptions.SystemModal + MessageBoxOptions.Topmost + MessageBoxOptions.SetForeground + MessageBoxIcon.Information)
End Sub
End Class
그게 전부입니다. 나는 이것을 지금 보게 될 것이다. : ^) – nexno
상수 MB_TOPMOST가 있습니다 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx – prq
@prq 나는' 일부 최신 Windows 버전에서는 MB_TOPMOST가 무시됩니다. 어쨌든'MB_SYSTEMMODAL'은 확실히 작동합니다. –