2016-05-25 46 views
3

我的C#控制檯應用程序顯示一個Windows窗體用戶登錄,我添加了一個幫助按鈕登錄表單的頂部,以防任何用戶有任何問題enter image description here在Windows窗體的標題欄中按下幫助按鈕時是否檢測到?

我試圖做到的是當用戶按下幫助按鈕時彈出MessageBox()彈出窗口。我已經做了一些研究,但仍然無法找到任何可行的解決方案。任何幫助將不勝感激!


謝謝你的時間。

+2

你見過【如何做-include-help-in-title-bar-of-winform](http://stackoverflow.com/questions/1474663/)或[Adding-help-icon-to-winforms-form-titlebar](http:// stackoverflow.com/questions/1112472/)? – surfmuggle

+0

@slackmuggle不是我的問題。我在問如何添加一個HelpButton點擊事件。我的工作雖然... – C0d1ng

+0

如果你的工作和所提供的答案不符合你所期待的,它將是很好的你的解決方案作爲答案,以便其他人也可以受益。 – surfmuggle

回答

0

根據MSDN來處理這個問題的方法是處理窗口WM_HELP消息:

DS_CONTEXTHELP

包括在該對話框的標題欄中問號。當用戶單擊問號時,光標將使用指針將 更改爲問號。如果用戶在對話框中單擊控件 ,則該控件將收到一個WM_HELP消息。控制 應將消息傳遞給對話框過程,該過程應使用HELP_WM_HELP命令調用 函數。幫助應用程序 顯示一個彈出窗口,通常包含對控件的幫助。

請注意,DS_CONTEXTHELP只是一個佔位符。當創建對話框 時,系統檢查DS_CONTEXTHELP,如果存在,則 將WS_EX_CONTEXTHELP添加到對話框的擴展樣式中。 WS_EX_CONTEXTHELP不能與WS_MAXIMIZEBOXWS_MINIMIZEBOX風格下使用。

總之,你需要實現在表單中的控件WndProc方法(不幸的是需要從他們的基類單獨派生):

const int WM_HELP = 0x53; 

protected override void WndProc(ref Message m) 
{ 
    switch (m.Msg) 
    { 
     case WM_HELP: 
      // Your handler here 
      break; 
     default: 
      base.WndProc(ref m); 
      break; 
    } 
} 
相關問題