-
help finding a bug
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;
}
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.
-
Try using the SetFocus function to transfer focus back to the text control. Also, consider what will happen when a zero length string is passed to revstr.