J'utilise un formulaire pour afficher les notifications (il apparaît en bas à droite de l'écran), mais lorsque je montre ce formulaire, il vole le focus du formulaire principal. Y a-t-il un moyen d'afficher ce formulaire de "notification" sans voler l'attention?
Réponses
Trop de publicités?Hmmm, est-ce que la simple substitution de Form.ShowWithoutActivation n'est pas suffisante?
protected override bool ShowWithoutActivation
{
get { return true; }
}
Et si vous ne souhaitez pas que l'utilisateur clique sur cette fenêtre de notification, vous pouvez remplacer CreateParams:
protected override CreateParams CreateParams
{
get
{
CreateParams baseParams = base.CreateParams;
baseParams.ExStyle |= ( int )(
Win32.ExtendedWindowStyles.WS_EX_NOACTIVATE |
Win32.ExtendedWindowStyles.WS_EX_TOOLWINDOW );
return baseParams;
}
}
Volé PInvoke.net de ShowWindow procédé:
private const int SW_SHOWNOACTIVATE = 4;
private const int HWND_TOPMOST = -1;
private const uint SWP_NOACTIVATE = 0x0010;
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(
int hWnd, // Window handle
int hWndInsertAfter, // Placement-order handle
int X, // Horizontal position
int Y, // Vertical position
int cx, // Width
int cy, // Height
uint uFlags); // Window positioning flags
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void ShowInactiveTopmost(Form frm)
{
ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
frm.Left, frm.Top, frm.Width, frm.Height,
SWP_NOACTIVATE);
}
(Alex Lyman a répondu à cela, je ne fais que l’agrandir en collant directement le code. Quelqu'un avec des droits d’édition peut le copier là-bas et le supprimer pour tout ce qui m’intéresse;))
Si vous êtes prêt à utiliser Win32 P / Invoke , vous pouvez utiliser la méthode ShowWindow (le premier exemple de code fait exactement ce que vous voulez).
L'exemple de code de pinvoke.net dans les réponses d'Alex Lyman / TheSoftwareJedi fera de la fenêtre une fenêtre "la plus haute", ce qui signifie que vous ne pouvez pas la placer derrière des fenêtres normales après sa sortie. Étant donné la description de Matias de ce qu'il veut utiliser pour cela, cela pourrait être ce qu'il veut. Mais si vous voulez que l'utilisateur puisse placer votre fenêtre derrière d'autres fenêtres après l'avoir créée, utilisez simplement HWND_TOP (0) au lieu de HWND_TOPMOST (-1) dans l'exemple.