0

首先,我对 .NET 编程的经验为零,所以这可能是一个非常棘手的问题......

我想知道是否有可能构建一个像 xFire 这样的应用程序——它在游戏中向用户显示弹出窗口。

由于主应用程序将获得焦点,我的应用程序如何设法显示它的消息/弹出窗口?主应用程序是否必须允许访问或其他什么?

干杯!

4

2 回答 2

2

看起来您正在寻找NotifyIcon,它显示了与 Windows 一样的小弹出窗口。这个例子有点长,但是文档肯定会帮助你理解。

using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form
{
    private System.Windows.Forms.NotifyIcon notifyIcon1;
    private System.Windows.Forms.ContextMenu contextMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.ComponentModel.IContainer components;

    [STAThread]
    static void Main() 
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.components = new System.ComponentModel.Container();
        this.contextMenu1 = new System.Windows.Forms.ContextMenu();
        this.menuItem1 = new System.Windows.Forms.MenuItem();

        // Initialize contextMenu1 
        this.contextMenu1.MenuItems.AddRange(
                    new System.Windows.Forms.MenuItem[] {this.menuItem1});

        // Initialize menuItem1 
        this.menuItem1.Index = 0;
        this.menuItem1.Text = "E&xit";
        this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

        // Set up how the form should be displayed. 
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Text = "Notify Icon Example";

        // Create the NotifyIcon. 
        this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);

        // The Icon property sets the icon that will appear 
        // in the systray for this application.
        notifyIcon1.Icon = new Icon("appicon.ico");

        // The ContextMenu property sets the menu that will 
        // appear when the systray icon is right clicked.
        notifyIcon1.ContextMenu = this.contextMenu1;

        // The Text property sets the text that will be displayed, 
        // in a tooltip, when the mouse hovers over the systray icon.
        notifyIcon1.Text = "Form1 (NotifyIcon example)";
        notifyIcon1.Visible = true;

        // Handle the DoubleClick event to activate the form.
        notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

    }

    protected override void Dispose( bool disposing )
    {
        // Clean up any components being used. 
        if( disposing )
            if (components != null)
                components.Dispose();            

        base.Dispose( disposing );
    }

    private void notifyIcon1_DoubleClick(object Sender, EventArgs e) 
    {
        // Show the form when the user double clicks on the notify icon. 

        // Set the WindowState to normal if the form is minimized. 
        if (this.WindowState == FormWindowState.Minimized)
            this.WindowState = FormWindowState.Normal;

        // Activate the form. 
        this.Activate();
    }

    private void menuItem1_Click(object Sender, EventArgs e) {
        // Close the form, which closes the application. 
        this.Close();
    }
}

请参阅MSDN

于 2013-05-13T14:04:29.260 回答
1

“由于主应用程序将获得焦点,我的应用程序如何管理显示它的消息/弹出窗口?主应用程序是否必须允许访问或其他什么?”

应用程序可以将自己设置为“TopMost”,这意味着它出现在其他不是 TopMost 的“正常”应用程序之前。将出现一个行为良好的通知,而不会从当前应用程序中窃取焦点(这通常通过 ShowWindow() API 和 SW_SHOWNA 标志来实现)。这不需要当前活动应用程序的任何许可。

看一下TaskbarNotifier,它是 C# 中的类似 MSN Messenger 的可换肤弹出窗口,现在也在 VB.NET 中

于 2013-05-13T14:23:09.437 回答