2014-03-24 43 views
0

一個很簡單的問題....輸入換行符在一個CEdit控制

你如何進入一個CEdit控制箱新行沒有它觸發確定,共關閉對話框?我的意思是當你按下回車鍵時它會自動選擇OK,即使你的光標仍然在CEdit控件中。我正在嘗試做什麼?或者我必須使用其他控件

PS:這是一個模式對話框btw。

+1

在對話框編輯器中,將「Multiline」和「Want Return」屬性設置爲True,並且從那裏開始都是自動的。 –

回答

-1

正如您發現的,默認的對話框處理是在按下Enter鍵時關閉對話框。 MFC實際上執行OnOK處理,但你可以覆蓋它。 Here's和舊的解釋,但它仍然相關。

+0

這會阻止您用OK關閉對話框。 –

+0

謝謝。這看起來像我需要的東西。 – user3396028

+0

Marius- !! ????? – user3396028

0

這個問題有多種解決方案。

基本上你需要的是編輯控件上的ES_WANTRETURN樣式。

另一種解決方案是檢查的PreTranslateMessage消息和關鍵(因爲它已經在這個評論是不推薦的方式,我只是提它的可能性):

BOOL CYouDialog::PreTranslateMessage(MSG* pMsg) 
{ 
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN && 
     GetFocus() == youcontrol) 
    { 
     return TRUE; 
    } 

    return FALSE; 
} 

另一種方案是處理WM_GETDLGCODE。你應該繼承的編輯控制和做到這一點:

UINT CYourEdit::OnGetDlgCode() 
{ 
    return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS; 
} 

UPDATE:僅供參考,也看看Just because you're a control doesn't mean that you're necessarily inside a dialog box

+0

經過您在CodeGuru的日子,我很驚訝您會推薦[PreTranslateMessage hack](http://forums.codeguru.com/showthread.php?231075-MFC-Dialog-How-to-disable-change-the- -a-lt-gt-key-in-a-dialog) – rrirower

+0

我在哪裏推薦它?我剛剛提到它... –