2
Win32/C++。我有一個多行編輯控件和一個按鈕,我使用DM_SETDEFID
進行了默認設置。當我着重於編輯時,我想讓焦點停留在那裏,而不是移動到按鈕。在對話框中,當按下編輯控件中的Enter時,如何停止默認按鈕的焦點?
Win32/C++。我有一個多行編輯控件和一個按鈕,我使用DM_SETDEFID
進行了默認設置。當我着重於編輯時,我想讓焦點停留在那裏,而不是移動到按鈕。在對話框中,當按下編輯控件中的Enter時,如何停止默認按鈕的焦點?
編輯控件應該有ES_WANTRETURN
style改變自己的行爲,以期望:
指定當用戶按下 ENTER鍵,而在 對話框中輸入文本多行編輯控件回車插入。如果您不指定此樣式,按ENTER鍵 與按下對話框的默認按鈕具有相同的效果。 此樣式對單行編輯控件沒有影響。
要在創建控件後更改此樣式,請使用 SetWindowLong。
我應該更清楚。我確實希望輸入鍵可以觸發默認按鈕,但我希望將焦點留在編輯控件中(並且不要插入換行符)。 – user1299863 2012-03-29 18:01:34
然後,你不需要'ES_WANTRETURN'風格,否則它會被控制權吃掉,對嗎?你傳遞它,讓默認值轉移焦點並觸發按鈕。現在你已經調用了'BN_CLICKED'通知並且處理它。這是您處理通知的工作機會,然後通過使用'SetFocus'將焦點轉移到您的編輯控件來完成它。 – 2012-03-29 19:03:43
如果您有幾個編輯控件,並且您想要將焦點返回到按鈕之前的焦點,那麼情況會變得更加複雜。然後,您可能想要聽取'EN_KILLFOCUS'通知並記住按鈕單擊之前的最後一個通知。或者,您可以對按鈕控件進行子類化並處理其「WM_SETFOCUS」,以查看從按鈕到哪個控件焦點。或者,可能會有其他對話框消息對您可以使用Spy ++工具看到的目的有用並利用。 – 2012-03-29 19:06:14