If I type something in ID_TXT_NORMAL, click the ID_COPY button and paste what's on the clipboard to whatever program, when I click on the dialog box again I am not able to input text on ID_TXT_NORMAL without using that tab key on the keyboard. I noticed that this happens because the focus is still on the button I last clicked. Can you guys help me find the problem? Thanks.Code:#include <windows.h> #include "resource.h" char* revstr(char*); BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_INITDIALOG: return TRUE; break; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_INVERT: { int length = GetWindowTextLength(GetDlgItem(hDlg, ID_TXT_NORMAL)); if(length > 0){ char* text; char* reversed; text = (char*)GlobalAlloc(GPTR, length + 1); GetDlgItemText(hDlg, ID_TXT_NORMAL, text, length + 1); reversed = revstr(text); SetDlgItemText(hDlg, ID_TXT_NORMAL, reversed); SendDlgItemMessage(hDlg, ID_TXT_NORMAL, WM_SETFOCUS, 0, 0); SendDlgItemMessage(hDlg, ID_TXT_NORMAL, EM_SETSEL, 0, -1); GlobalFree((HANDLE)text); } else MessageBox(hDlg, "Digite alguma coisa...", "Aviso", MB_OK | MB_ICONWARNING); } return TRUE; case ID_COPY: { int length = GetWindowTextLength(GetDlgItem(hDlg, ID_TXT_NORMAL)); if(length > 0) SendDlgItemMessage(hDlg, ID_TXT_NORMAL, WM_CUT, 0, 0); else MessageBox(hDlg, "Não tem nada para ser copiado...", "Aviso", MB_OK | MB_ICONWARNING); } return TRUE; case ID_PASTE: SendDlgItemMessage(hDlg, ID_TXT_INVERTED, WM_PASTE, 0, 0); return TRUE; case ID_TRANSLATE: { int length = GetWindowTextLength(GetDlgItem(hDlg, ID_TXT_INVERTED)); if(length > 0){ char* text; char* reversed; reversed = (char*)GlobalAlloc(GPTR, length + 1); GetDlgItemText(hDlg, ID_TXT_INVERTED, reversed, length + 1); text = revstr(reversed); SetDlgItemText(hDlg, ID_TXT_INVERTED, text); GlobalFree((HANDLE)reversed); } else MessageBox(hDlg, "Não há nada para traduzir...", "Aviso", MB_OK | MB_ICONWARNING); } return TRUE; } break; case WM_CLOSE: EndDialog(hDlg, 0); return TRUE; default: return FALSE; } } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { return (int)DialogBox(hInstance, MAKEINTRESOURCE(ID_MAIN), NULL, DlgProc); } char* revstr(char* a) { size_t temp, x, y = strlen(a) - 1; for ( x = 0; x < y; x++, y-- ){ temp = a[x]; a[x] = a[y]; a[y] = temp; } return a; }