使用 WM_GETTEXT 消息是可以做到的:
TCHAR buf[1024];
SendMessage(hwndEdit, WM_GETTEXT, sizeof(buf)/sizeof(TCHAR), (LPARAM)(void*)buf);
hwndEdit 是你要获取的 edit 的句柄。buf 包含了你所需要的字符串。
控制台程序有窗口,可以把值输出到窗口上,而application没有窗口,必须自己编写程序
做一个窗口,做窗口的主要过程就是:
1:设计窗口类
2:注册窗口类
3:创建窗口
4:显示窗口
5:消息循环,下面给你一个计算一元二次方程的例子:
#include
char lpszFilePath[MAX_PATH] = ;
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = lpszFilePath;
bi.lpszTitle = _T("请选择图片目录:");
bi.ulFlags = 0; //BIF_NEWDIALOGSTYLE;
bi.lpfn = NULL;
bi.lParam = NULL;
//SHBrowseForFolder:打开文件对话框
LPITEMIDLIST lpil = SHBrowseForFolder(&bi);
#include
#include
#include
const double dboffset = 0.000001 ;
char str[80];
//求一元二次方程的根,函数返回根的个数
int GetRoot(float a ,float b ,float c,double *root)
{
double delta,deltasqrt ;
delta = b*b -4.0 * a *c ;
//判断delta是否为正数
if(delta -dboffset < 0.0) return 0 ; //无根
//开平方
deltasqrt = sqrt(delta) ;
if ((a - dboffset) > 0.0)
{
root[0] =(-b+deltasqrt)/(2 * a) ;
root[1] =( -b-deltasqrt)/(2 * a) ;
}
else
if ((a - dboffset) > 0.0)
root[0]=root[1]=-c/b;
else
return 0;
if(root[0] == root[1])
return 1 ;
else
return 2 ;
}
//声明窗口过程函数
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//程序入口函数
int WINAPI WinMain(HINSTANCE hInstance , //当前实例句柄
HINSTANCE hPreInstance , //以前的实例句柄
LPSTR lpCmdLine , //指向命令行参数的指针
int nCmdShow) //窗口的显示状态
{
//*************************************************************
HWND hwnd ; //窗口句柄
MSG msg ; //消息
WNDCLASS wndclass ; //窗口类
//设置窗口样式
wndclass.style =CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc =WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.hInstance =hInstance ;
wndclass.cbWndExtra = 0 ;
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName ="HelloWin";
//注册窗口类
if (!RegisterClass (&wndclass))
{
MessageBox(NULL,"窗口注册失败","窗口注册失败",0);
return 0 ;
}
//创建窗口
hwnd = CreateWindow( "HelloWin", //窗口类名
"我的窗口", //窗口标题
WS_OVERLAPPEDWINDOW, //窗口样式
CW_USEDEFAULT, //窗口最初X位置
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口最初的X大小
CW_USEDEFAULT,
NULL, //父窗口的句柄
NULL, //窗口菜单句柄
hInstance, //应用程序实例句柄
NULL); //创建窗口的参数
//显示窗口
ShowWindow(hwnd,nCmdShow);
//更新窗口,包括窗口的客户区
UpdateWindow(hwnd);
//显示窗口
ShowWindow(hwnd,nCmdShow);
//更新窗口,包括窗口的客户区
UpdateWindow(hwnd);
//*************************************************************
//进入消息循环
while(GetMessage(&msg,NULL,0,0))
{
//翻译消息(例如转换某些键盘消息)
TranslateMessage(&msg);
//将消息发送给窗口过程,这里是WndProc
DispatchMessage(&msg);
}
return msg.wParam ;
}
//窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
static HWND hwndButton ,hwndEdit[3] ;
char strEdit[80];
double root[2];
float a[3];
int i ;
switch(message)
{
//窗口创建产生的消息
case WM_CREATE:
//创建编辑框“edit”是windows内部定义的编辑框的窗口类名
hwndEdit[0] = CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,10,60,100,25,hwnd,NULL,NULL,NULL);
hwndEdit[1] = CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,120,60,100,25,hwnd,NULL,NULL,NULL);
hwndEdit[2] = CreateWindow("edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,230,60,100,25,hwnd,NULL,NULL,NULL);
hwndButton = CreateWindow("button","计算",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,340,60,100,25,hwnd,NULL,NULL,NULL);
return 0 ;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,10,10,"请输入一元二次方程的系数",25);
TextOut(hdc,10,40,"a",1);
TextOut(hdc,120,40,"b",1);
TextOut(hdc,230,40,"c",1);
TextOut(hdc,10,90,str,strlen(str));
EndPaint(hwnd,&ps);
return 0 ;
case WM_DESTROY:
PostQuitMessage(0);
return 0 ;
case WM_LBUTTONDOWN:
MessageBox(NULL,"你好啊","问候",0);
return 0 ;
case WM_COMMAND:
//按下按钮
if(((HWND)lParam ==hwndButton) && (HIWORD(wParam) ==BN_CLICKED))
{
//获取3个编辑框内容,并将其转换成浮点数值
for(i = 0 ;i<3 ;i++)
{
GetWindowText(hwndEdit[i],strEdit,80);
a[i] = (float)atof(strEdit);
}
int n = GetRoot(a[0],a[1],a[2],root) ;
if (n<1)
strcpy(str,"方程无根");
else
sprintf(str,"方程的解为:%f,%f",root[0],root[1]);
InvalidateRect(hwnd,NULL,TRUE);
}
}
return DefWindowProc(hwnd,message,wParam,lParam);
}