回答
您可以通過捕獲Windows在用戶右鍵單擊標題欄時發送的WM_NCRBUTTONDOWN通知來執行此操作。控件類沒有它的事件,你需要重寫WndProc()。下面是一個示例表單,您需要添加一個ContextMenuStrip:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
protected void OnTitlebarClick(Point pos) {
contextMenuStrip1.Show(pos);
}
protected override void WndProc(ref Message m) {
const int WM_NCRBUTTONDOWN = 0xa4;
if (m.Msg == WM_NCRBUTTONDOWN) {
var pos = new Point(m.LParam.ToInt32());
OnTitlebarClick(pos);
return;
}
base.WndProc(ref m);
}
}
MSDN explains如何處理Windows窗體上右鍵單擊控制。包括表單在內的控件繼承了MouseClick事件。
MouseEventArgs會告訴你什麼按鈕被點擊通過Button屬性。看看MouseButtons枚舉。
更新了問題 – Kumar 2009-12-22 18:02:46
我看到。不幸的是,沒有MousePreview就像有一個KeyPreview,所以我不知道如何解決這個問題。 – 2009-12-22 18:17:03
如果處理表單鼠標點擊,您就可以使用下面的代碼:
private void Dialog_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
this.Text = "new caption text";
}
}
但你必須確保你在窗體上生成此事件的最高級別控制。例如,如果您在窗體上有一個組框,它將接收鼠標單擊事件而不是窗體本身,用於組框下的窗體區域。
當您右鍵單擊標題欄時,已經有一個由Windows管理的菜單。
你想完全替換它嗎?
如果你想添加到它,你將不得不使用Win32 API和互操作,你將不得不繼承該表單。
請參閱AppendMenu()函數。
基本上你需要使用p-invoke來做到這一點。 Here 有一個非常好的例子,你可以從例子中看到你需要手動模擬事件處理程序,但這非常簡單。
您可以覆蓋形式的WndProc和捕捉WM_NCRBUTTONDOWN消息:
protected override void WndProc(ref Message m)
{
const int WM_NCRBUTTONDOWN = 0xA4;
if (m.Msg == WM_NCRBUTTONDOWN)
{
MessageBox.Show("Caption right clicked!");
}
else
{
base.WndProc(ref m);
}
}
此代碼將打壓窗口的上下文菜單,但是。你可能不希望這樣。如果右擊窗口邊框,WM_NCRBUTTONDOWN消息也會被髮送。你也可能不想要這個。
- 1. 如何處理ListCtrl標題中的右鍵單擊事件?
- 2. 如何處理鼠標右鍵單擊Qt
- 3. 處理右鍵單擊瀏覽器
- 4. QTableWidget右鍵單擊獲取標題列
- 5. 如何使左鍵單擊表現爲右鍵單擊?
- 6. JQuery右鍵單擊問題
- 7. 如何右鍵單擊javascript
- 8. 右鍵單擊
- 9. 如何處理angular.js中的右鍵單擊事件?
- 10. Windows 8用戶界面:如何處理右鍵單擊?
- 11. 如何處理右鍵單擊事件樹視圖
- 12. 如何浮動右鍵菜單標題
- 13. 處理中的右鍵單擊彈出菜單
- 14. 處理右鍵單擊/左鍵單擊c中的任務欄按鈕#
- 15. 如何處理右鍵點擊RichTextBox?
- 16. NSStatusItem右鍵單擊菜單
- 17. NSEvent單擊右鍵菜單
- 18. Fabric.js右鍵單擊
- 19. Mapbox右鍵單擊
- 20. 右鍵單擊MenuIcon
- 21. 右鍵單擊Swing
- 22. 右鍵單擊JButton
- 23. 如何啓用左鍵單擊拖動或右鍵單擊swt.browser
- 24. 如何區分左鍵單擊,在pygame中單擊鼠標右鍵?
- 25. 如何更改鼠標左鍵單擊和右鍵單擊選項?
- 26. 如何通過單擊右鍵單擊段落中的單詞?
- 27. 鼠標右鍵單擊事件右鍵單擊事件調用取消過程
- 28. 如何處理用戶在表單外單擊鼠標?
- 29. VueJS中的右鍵單擊和右鍵單擊事件
- 30. 右鍵單擊DevExpress Xtra GridControl列標題時如何刪除菜單選項?
右鍵單擊窗體或窗體的標題? – gbianchi 2009-12-22 17:46:02
沒有鼠標點擊標題,據我所知,你必須掛鉤到win32來處理非客戶區事件,這是我在年齡未做過的事情... – Kumar 2009-12-22 18:08:13