2012-02-20 23 views
0

我想在編輯控件上的「LBUTTONDOWN」時清空文本框。
我知道如何清空文本框,但我不知道該事件添加的位置在哪裏。如何添加LBtnMouseDown事件來編輯控件

我的對話功能:

INT CALLBACK dlgProc(HWND hwnd, unsigned int msg, WPARAM wp, LPARAM lp){ 
    switch(msg){ 
    case WM_INITDIALOG: 
     SetDlgItemText(hwnd, IDC_EDIT1, L"Please enter the txt"); 
     break; 
    case WM_COMMAND: 
     switch(LOWORD(wp)){ 
     case BTN_EXIT: 
      DestroyWindow(hwnd); 
      break; 
     case IDC_BUTTON1: 
      int len = GetWindowTextLength(GetDlgItem(hwnd,IDC_EDIT1)); 
      if(len > 0){ 
       TCHAR *buff = new TCHAR[len+1]; 
       GetDlgItemText(hwnd, IDC_EDIT1, buff, len+1); 
       MessageBox(NULL,buff,L"Error message",MB_OK); 
       delete buff; 
      } 
      break; 
     } 
     break; 
    case WM_CLOSE: 
     DestroyWindow(hwnd); 
     break; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    default: 
     return false; 
    } 
    return true; 
} 

回答

2

我懷疑你真正想要的是在信號接收輸入焦點,而不僅僅是按鈕按下事件作出迴應。例如,假設用戶使用鼠標按鈕在編輯控件上設置輸入焦點,然後鍵入,然後再次單擊編輯控件,同時它現在擁有焦點。你可能不希望用戶的文本被清除。或者他們可以使用鍵盤來設置輸入焦點,例如, TAB。我再次懷疑您會希望通過該操作來清除內容。

假設我的理解是正確的,那麼您應該在對話過程的WM_COMMAND處理程序中偵聽EN_SETFOCUS通知。無論使用鼠標還是使用鍵盤,無論用戶如何將焦點帶到編輯控件上,都會觸發。

在你的代碼只需要擴大你的switch聲明中WM_COMMAND

case IDC_EDIT1: 
    if(HIWORD(wParam)==EN_SETFOCUS) 
    { 
     SetDlgItemText(hwnd, IDC_EDIT1, L""); 
    } 
    break; 
+0

能否請你寫個簡單的例子,或編輯我的代碼,然後輸入新密碼。 – 2012-02-20 14:13:07