![](/img/trans.png)
[英]Get text from a button in an application using win32 C++ and hooks
[英]How to get text from Text Box in win32 c++ on button click?
我是win32 gui應用程序的新手。我正在嘗試創建簡單的計算器應用程序。 因為我已經設計了一個用於計算器的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;
}
}
}
B.我還想顯示文本框中按下的按鈕的標題。
所以,任何人都可以幫助我找到糾正它的方法。
提前..
這應該為您獲取文本:
SendMessage(hEditA, WM_GETTEXT, (WPARAM)10, (LPARAM)val);
那些窗口句柄是在窗口過程的范圍內定義的,還是全局的? 如果它們是在窗口過程的范圍內定義的,則在WM_CREATE將控制權返回給操作系統后,它們將被遺忘。
如果它們是在窗口過程中定義的,請嘗試:
static HWND hEditA, ...
編輯:您還應該從WM_CREATE
處理程序中斷,因為它將落到您的WM_COMMAND
處理程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.