2013-06-14 2 views
0

목록 상자, 편집 상자 및 보내기 및 지우기라는 두 개의 단추가있는 간단한 대화 상자가 있습니다. 기본값은 보내기입니다. 눌려지면 문자열이 편집 상자에서 읽히고 목록 상자에 추가됩니다. 지우기는 스스로를 말합니다. 입력을 처음 누르면 모든 것이 작동하지만 입력을 두 번째로 누르면 응답/등록하지 않습니다. 버튼을 클릭하면 모든 것이 의도 한대로 작동합니다.기본 누름 단추가 한 번만 작동합니다.

편집 상자로 다시 포커스를 변경 한 후에 DM_SETDEFID를 사용하려고했으나 아무것도 수행하지 않았습니다.

불필요한 코드를 제거하여 누락 된 부분이 없기를 바랍니다. 리소스 파일에서

INT_PTR CALLBACK CHAT(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch (message) 
    { 
    case WM_INITDIALOG: 
     return (INT_PTR)TRUE; 

    case WM_COMMAND: 
     if (LOWORD(wParam) == IDC_BUTTON1) 
     { 
       string strDisplay="You: "+strMessage; 
       TCHAR szDisplay[MESSAGE_SIZE]; 
       strcpy_s(szDisplay, strDisplay.c_str()); 

       SendDlgItemMessage(hDlg, IDC_LIST1, LB_ADDSTRING, NULL, (LPARAM)&szDisplay); 
       SetDlgItemText(hDlg, IDC_EDIT1, ""); 
      } 
      SetFocus(GetDlgItem(hDlg, IDC_EDIT1)); 
     } 
     else if(LOWORD(wParam) == IDC_BUTTON2) 
     { 
      SetDlgItemText(hDlg, IDC_EDIT1, ""); 
     } 
     break; 
    case WM_CLOSE: 
     { 
      EndDialog(hDlg, LOWORD(wParam)); 
      return (INT_PTR)TRUE; 
     } 
    } 
    return (INT_PTR)FALSE; 
} 

:

IDD_CHAT_DIALOG DIALOGEX 0, 0, 309, 176 
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
CAPTION "Chat" 
FONT 8, "MS Shell Dlg", 400, 0, 0x1 
BEGIN 
    LTEXT   "Message:",IDC_STATIC,198,12,102,8 
    EDITTEXT  IDC_EDIT1,198,24,102,108,ES_MULTILINE 
    DEFPUSHBUTTON "Send",IDC_BUTTON1,198,138,104,14 
    PUSHBUTTON  "Clear",IDC_BUTTON2,198,156,104,14 
    LISTBOX   IDC_LIST1,7,7,185,167,LBS_NODATA | LBS_NOSEL | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP 
END 
+0

코드를 게시 할 수 있습니까? – MDMoore313

+0

@ MDMoore313 완료했습니다. – BioCycle

답변

6

당신은 여러 줄 편집 컨트롤을 가지고있다. 초점이 맞추어 지 자마자 ENTER 키의 모든 프레스가 처리됩니다.

이것은 의도적으로 설계된 동작입니다. 편집 컨트롤에 포커스가있을 때 버튼이 ENTER 키를 누른 경우 어떻게 편집 컨트롤에 새 라인을 입력 할 수 있습니까?

ENTER 키를 먹는 것으로부터 여러 줄 편집 컨트롤을 중지해야하는 경우 WM_GETDLGCODE을 처리하여 정렬 할 수 있습니다. 이 기술은 여기에 설명된다 : http://blogs.msdn.com/b/oldnewthing/archive/2006/10/12/819674.aspx


를 AS를 제외하고는 strcpy_s 스퓨리어스이다. 문자열에 c_str()을 호출하고 API 함수에 직접 전달하십시오.

+0

그냥 GetAsyncKeyState를 사용할 수 있습니까? 아니면 해결 방법을 찾지 않고 재 설계해야합니까? – BioCycle

+0

'GetAsyncKeyState'는 좋지 않습니다. 나는 이것을하기위한 "올바른"방법을 설명하기 위해 답을 덧붙였다. 나는 당신이 이것을 원한다고 확신한다면 당신에게 묻습니다. 사용자가이 편집 컨트롤에서 줄 바꿈을 어떻게 입력합니까? 아니면 읽기 전용입니까? –

+0

사용자는 줄 바꿈이 중요하지 않도록 (짧은) 메시지를 보낼 것입니다. 도움을 주셔서 감사합니다! – BioCycle

관련 문제