我有一個CEdit
框,用戶可以輸入相關信息。只要他\她開始在箱子裏寫字,我需要一個通知,以便我可以撥打doSomething()
執行一些其他任務。 Windows是否提供回調,如果是,我該如何使用它?如何從「CEdit」框中獲取通知?
0
A
回答
1
如果您雙擊資源編輯器中的編輯框,它會自動爲您創建OnEnChanged事件。
4
有了MFC,就沒有回調了,而是通過爲相應的事件實現處理程序來做到這一點。您需要處理的兩個事件之一:WM_CHAR
或EN_CHANGE
處理對話框的EN_CHANGE
例如實時的對話框上的其他地方複製輸入的文本。您需要先添加在對話框的消息映射條目,其次覆蓋相應的處理程序:
BEGIN_MESSAGE_MAP(CstackmfcDlg, CDialog)
ON_EN_CHANGE(IDC_EDIT1, &CstackmfcDlg::OnEnChangeEdit1)
END_MESSAGE_MAP()
void CstackmfcDlg::OnEnChangeEdit1()
{
CString text;
m_edit.GetWindowText(text);
m_label.SetWindowText(text); // update a label control to match typed text
}
或者,處理編輯框類的WM_CHAR
例如防止某些字符,例如輸入忽略數字輸入以外的任何數字。從CEdit派生類,處理該類的事件(不是對話框),並使您的編輯控件成爲該類的一個實例。
BEGIN_MESSAGE_MAP(CCtrlEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void CCtrlEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// Do nothing if not numeric chars entered, otherwise pass to base CEdit class
if ((nChar >= '0' && nChar <= '9') || VK_BACK == nChar)
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
注意,你可以使用VS IDE擺在存根處理程序通過使用消息映射塊鼠標選擇屬性欄覆蓋。
編輯:增加了示例代碼,並糾正了我錯誤的WM_CHAR
解釋。
0
以下假定您有一個MFC對話框應用程序。
雙擊控制ID(具有小綠色加的圖標)的新的編輯控件添加相應的成員變量的班上。
類和活動向導會更新類定義,並添加CEdit
成員:
afx_msg void OnEnChangeEdit1(); // Added by event wizard
CEdit m_edit1; // member added by class wizard
類嚮導將更新功能:
void CMFCApplication5Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_edit1); // new variable added with class wizard
}
雙擊控件或右鍵單擊並選擇添加事件嚮導將更新消息映射並創建函數de claration和定義:
BEGIN_MESSAGE_MAP(CMFCApplication5Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_CHANGE(IDC_EDIT1, &CMFCApplication5Dlg::OnEnChangeEdit1) // new event handler added with wizard
END_MESSAGE_MAP()
最後的代碼可以更新與編輯控件交互:
void CMFCApplication5Dlg::OnEnChangeEdit1()
{
// TODO: Add your control notification handler code here
CString text;
m_edit1.GetWindowText(text);
//m_edit1.SetWindowText(text);
}
相關問題
- 1. 如何從剪貼板獲取通知?
- 2. RoboVM - 如何從MPMoviePlayerController獲取通知
- 3. 如何從Facebook獲取通知
- 4. WappWolf如何從Google Drive獲取通知?
- 5. Visual C++從Cedit獲取字符串
- 6. 從通知欄獲取通知
- 7. 如何獲取通知ID?
- 8. 如何在android中獲取BLE通知?
- 9. 如何在yii中更改複選框時獲取通知
- 10. 如何從活動中捕獲通知
- 11. 如何從iOS中的Firebase消息通知中獲取主題?
- 12. 如何從通知中取消IntentService?
- 13. 從GCM通知中獲取數據
- 14. Iphone從推送通知中獲取url
- 15. 從AccessibilityService中的通知獲取意圖
- 16. 如何通過ios推送通知服務從Youtube獲取通知
- 17. 如何從通知中心讀取iOS級別通知設置
- 18. 如何取消從通知中心,這是推送通知
- 19. 如何從android firebase通知中獲取自定義數據?
- 20. 如何從Android的數據庫內容中獲取通知?
- 21. 如何從服務器中獲取通知iphone
- 22. 如何從C#/ WPF中的嵌套屬性獲取通知?
- 23. 如何從推送通知中獲取文本字符串?
- 24. 如何從推送通知中獲取數據?
- 25. 如何從拼貼通知中獲取號碼
- 26. 如何從Android中的另一臺服務器獲取通知
- 27. 如何從eBay通知中獲取數據
- 28. 如何從Twitter 2.1中的Twitter RSS Feeds獲取推送通知?
- 29. 從多行CEdit控件中獲取文本?
- 30. 如何從iPhone獲取通話結束通知事件?
WM_CHAR是不夠的,因爲你可以粘貼到例如控制。 –