Winapi — Как получить текст из текстового поля в Win32 C ++ по нажатию кнопки?

Я очень новичок в приложениях Win32 GUI. Я пытаюсь создать простое приложение калькулятор.
В этом я разработал графический интерфейс для калькулятора. Теперь я хочу получить текст текстового поля, введенного пользователем, а также установить текст при нажатии любой кнопки, которую я разработал, от 0 до 9.

Для тестирования я написал код для получения текста из текстового поля и попытался отобразить его в окне сообщения. Но мое сообщение показывает пустое сообщение. Вот мой код в WinProc:

LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
HWND B[16];// these are the saperate handles to each button in the main window.
HWND hEditA,hEditB,hEditC;//handle for text box.
char c[16][2]={"1","2","3","4","5","6","7","8","9","0","+","-","*","/",".","="};
int i=0,j,x=100,y=130;
int id[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int cnt;
//char val[20];
TCHAR val[30] = {0};
int len;switch(msg)
{
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,10,12,"Number 1:",strlen("Number 1:")+1);
TextOut(hdc,10,47,"Number 2:",strlen("Number 2:")+1);
TextOut(hdc,10,87,"Result  :",strlen("Result  :")+1);
//  TextOut(hdc,10,100,"hellow sachin",strlen("hello sachin")+1);
EndPaint(hWnd,&ps);
break;

case WM_DESTROY:
PostQuitMessage (0);
break;

case WM_CREATE:

hEditA=CreateWindow(TEXT("Edit"), TEXT(""), WS_CHILD | WS_VISIBLE | WS_BORDER|ES_NUMBER|ES_RIGHT, 100, 10, 150, 25, hWnd, NULL, NULL, NULL);
hEditB=CreateWindow(TEXT("Edit"), TEXT(""), WS_CHILD | WS_VISIBLE | WS_BORDER|ES_NUMBER|ES_RIGHT, 100, 45, 150, 25, hWnd, NULL, NULL, NULL);
hEditC=CreateWindow(TEXT("Edit"), TEXT(""), WS_CHILD | WS_VISIBLE | WS_BORDER|ES_NUMBER|ES_RIGHT, 100, 85, 150, 25, hWnd, NULL, NULL, NULL);
cnt=0;
for(i=0;i<16;i++)
{
if(cnt==4)
{
y=y+40;
x=100;
cnt=0;}

if(cnt<4)
{
B[i] =   CreateWindow(TEXT("button"), TEXT(c[i]),
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
x, y, 30, 30,
hWnd, (HMENU) id[i], NULL, NULL);
x=x+40;
//y=y+30;
cnt++;

}
}

case WM_COMMAND:

switch(LOWORD(wParam))
{
case 1:
len=GetWindowText( hEditA,val,10);
MessageBox(hWnd,(LPSTR)val, "Info", MB_OK);
SetWindowText( hEditB,val);break;
}
}
}

Б. Я также хочу отобразить заголовок кнопки, нажатой в текстовом поле.

Поэтому, пожалуйста, кто-нибудь может помочь мне найти способ исправить это.

Спасибо заранее ..

0

Решение

Это должно получить текст для вас:

SendMessage(hEditA, WM_GETTEXT, (WPARAM)10, (LPARAM)val);

Определены ли эти дескрипторы окна в области действия оконной процедуры или глобально? Если они определены в области действия оконной процедуры, они будут забыты после того, как WM_CREATE вернет управление операционной системе.

Если они определены в оконной процедуре, попробуйте:

static HWND hEditA, ...

РЕДАКТИРОВАТЬ:
Вы также должны отказаться от своего WM_CREATE обработчик, так как он провалится на ваш WM_COMMAND обработчик.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]