Click to See Complete Forum and Search --> : Help finding a bug


kao00
February 21st, 2005, 01:09 PM
I hope this is the right forum for this...
Hi, I am almost done with my first Windows program but I am having a problem and I can't find what is causing it.

#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 on the ID_COPY button and paste it on MSN Messenger, for example, when I return to the program I am not able to click on ID_TXT_NORMAL to focus it so I can type something else. What am I doing wrong? Thanks.