一位朋友剛剛幫我解決了這個問題。
禁用菜單已相當容易
axWindowsMediaPlayer1.enableContextMenu = false;
禁用雙擊上下文需要一個消息過濾器 - there is already a solution on the web。
Application.AddMessageFilter((IMessageFilter)CustomFilter(this/*Form*/, axWMP));
我已經重寫我的榜樣,我現在用這個代碼:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
axWindowsMediaPlayer1.uiMode = "none";
axWindowsMediaPlayer1.enableContextMenu = false;
Application.AddMessageFilter(new IgnoreMouseClickMessageFilter(this, axWindowsMediaPlayer1));
}
private void button1_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL = @"C:\stackoverflow.mp4";
}
}
class IgnoreMouseClickMessageFilter : IMessageFilter
{
private Control parent { get; set; }
private Control target { get; set; }
public IgnoreMouseClickMessageFilter(Control parent, Control target)
{
this.parent = parent;
this.target = target;
}
public bool PreFilterMessage(ref Message messageBeforeFiltering)
{
const Boolean FilterTheMessageOut = true;
const Boolean LetTheMessageThrough = false;
if (IsNull(parent)) return LetTheMessageThrough;
if (IsNull(target)) return LetTheMessageThrough;
if (WasNotClickedOnTarget(parent, target)) return LetTheMessageThrough;
if (MessageContainsAnyMousebutton(messageBeforeFiltering)) return FilterTheMessageOut;
return LetTheMessageThrough;
}
private bool MessageContainsAnyMousebutton(Message message)
{
if (message.Msg == 0x202) return true; /* WM_LBUTTONUP*/
if (message.Msg == 0x203) return true; /* WM_LBUTTONDBLCLK*/
if (message.Msg == 0x204) return true; /* WM_RBUTTONDOWN */
if (message.Msg == 0x205) return true; /* WM_RBUTTONUP */
return false;
}
private bool WasNotClickedOnTarget(Control parent, Control target)
{
Control clickedOn = parent.GetChildAtPoint(Cursor.Position);
if (IsNull(clickedOn)) return true;
if (AreEqual(clickedOn, target)) return false;
return true;
}
private bool AreEqual(Control controlA, Control controlB)
{
if (controlA == controlB) return true;
return false;
}
private bool IsNull(Control control)
{
if (control == null) return true;
return false;
}
}
特別感謝我的朋友無名,並從在Microsoft Developer Network Frorums「remarkpk11」。
代碼有一些較小的問題 - 我不喜歡消息隱藏在我的第一位,我也很想擺脫兩個全局依賴項遊標和應用程序。但就這個問題而言,我認爲它得到了回答。
設置Ctlenabled屬性設置爲false。 – 2012-01-07 15:45:15
將CtlEnabled設置爲false不允許播放和停止視頻。一種可能的解決方法是在InitializeComponent()後面設置CtlEnabled = false,然後在播放之前將其設置爲true,然後再將其設置爲false。 – muccix 2016-05-10 11:27:52