메시지 보내기

SendMessage 함수는 창 프로시저에 직접 메시지를 보내는 데 사용 됩니다. SendMessage 창 프로시저를 호출 하 고 메시지를 처리 하 고 결과 반환 하는 프로시저에 대 한 대기.

시스템; 창에 메시지를 보낼 수 있습니다. 모든 필요한 창 핸들입니다. 시스템 핸들을 사용 하 여 결정 되는 창 프로시저에서 메시지를 받아야 한다.

다른 스레드에서 보낸 메시지를 처리 하기 전에 창 프로시저에 InSendMessage 함수를 먼저 호출 해야 합니다. 창 프로시저 함수를 다음 예제와 같이 컨트롤을 생성 하는 스레드를 일으키는 전에 ReplyMessage 를 호출 해야이 함수가 TRUE를 반환 하는 경우.

wM_USER + 5 사례: 만약 (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    브레이크 
 

컨트롤 대화 상자에 다양 한 메시지를 보낼 수 있습니다. 이러한 제어 메시지 모양, 동작 및 컨트롤의 내용을 설정 하거나 컨트롤에 대 한 정보를 검색 합니다. 예를 들어, CB_ADDSTRING 메시지 수 콤보 상자에 문자열을 추가 하 고 BM_SETCHECK 메시지 체크 박스 또는 라디오 버튼의 체크 상태를 설정할 수 있습니다.

SendDlgItemMessage 함수를 사용 하 여 컨트롤의 식별자와 컨트롤이 포함 된 대화 상자 창 핸들을 지정 하는 컨트롤에 메시지를 보낼 수 있습니다. 대화 상자 프로시저에서 가져온 다음 예제에서는 목록 상자에 콤보 상자의 편집 컨트롤에서 문자열을 복사 합니다. 이 예제에서는 SendDlgItemMessage 를 사용 하 여 콤보 상자의 CB_ADDSTRING 메시지 보내기.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
스위치 (uMsg) {WM_COMMAND 경우: 전환 (LOWORD(wParam)) {IDD_ADDCBITEM 경우: / 콤보 상자의 핸들 /와 / / 편집에서 문자열의 길이 제어 / / 콤보 상자의. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / 문자열 및 복사에 대 한 메모리를 할당 / / 메모리에 문자열. 
 
                pszMem (PSTR) VirtualAlloc((LPVOID) NULL (DWORD) = (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / /의 목록 상자에 문자열을 추가 합니다 / / 콤보 상자에서 문자열을 제거 하 고는 / / 콤보 상자 컨트롤 편집 합니다. 
 
                만약 (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) ((LPSTR) pszMem)); 
                    SetWindowText (hwndCombo, (LPSTR) NULL); 
                } / / 메모리를 해제 하 고 반환 합니다. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                TRUE를 반환 합니다. 
            / / / / 다른 대화 상자 명령을 처리 합니다. 
            / /} / / / / 다른 대화 상자 메시지를 처리 합니다. 
    // 
 
} 
 

 

Index