实现点击按钮,弹出输入框的内容

如果要实现点击一个按钮,然后将输入框中的输入的内容在弹出的提示框中显示出来这个功能的话,使用大部分可视化IDE开发工具都是很简单的事情,用鼠标拖拖控件不用几分钟就可以实现.

当然了,如果真按照以上方式实现这个功能然后写成一篇文章的话也就有点太敷衍了.所以,为了加大难度,在这里我们要使用C语言来实现这个功能.界面功能全部用代码实现,想想就有点高大上是不是.

首先,我们要先创建窗口.需要创建一个主窗口和3个控件(子窗口).主窗口需要先注册,而控件则不需要,系统已经为我们预先注册了常用的控件,我们直接创建对应的控件即可.这里我们使用了BUTTON按钮控件、static静态文本控件、EDIT编辑控件.都是使用CreateWindow函数来创建的,函数定义如下:

HWND WINAPI CreateWindow(  _In_opt_ LPCTSTR   lpClassName,  _In_opt_ LPCTSTR   lpWindowName,  _In_     DWORD     dwStyle,  _In_intx,  _In_inty,  _In_intnWidth,  _In_intnHeight,  _In_opt_ HWND      hWndParent,  _In_opt_ HMENU     hMenu,  _In_opt_ HINSTANCE hInstance,  _In_opt_ LPVOID    lpParam);

第一个参数用于指定不同类型的窗口,第九个参数指定控件唯一ID,相关参数都可以在msdn找到的,这里不展开来写了,以后我的资料库会对这些内容进行详细描写.

//创建窗口

BOOL InitInstance(HINSTANCE hinstance,int nCmdShow){

HWND hwnd;

RECT rect;

//保存应用程序实例句柄

hinst = hinstance;

hwnd = CreateWindow(

"MainWClass",//窗口类名,使用之前注册的主窗口类

"御坂网络欢迎你",//窗口名,显示在串口标题栏上的字符串

WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUPWINDOW,//窗口样式

CW_USEDEFAULT,//水平位置(默认)

CW_USEDEFAULT,//垂直位置(默认)

800,//高

600,//宽

(HWND)NULL,//无父窗口

(HMENU)NULL,//菜单

hinstance,//应用程序实例

(LPVOID)NULL//无窗口创建数据

);

//窗口是否创建成功

if(!hwnd){

return FALSE;

}

hwndbutton =  CreateWindow(

"BUTTON",//窗口类名,使用之前注册的主窗口类

"按钮",//窗口名,显示在串口标题栏上的字符串

WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,//窗口样式

420,//水平位置(默认)

90,//垂直位置(默认)

120,//宽

40,//高

(HWND)hwnd,//无父窗口

(HMENU)1,//菜单

(HINSTANCE)NULL,//应用程序实例

(LPVOID)NULL//无窗口创建数据

);

hwndstatic = CreateWindow(

TEXT("static"),

TEXT("你好"),

WS_CHILD | WS_VISIBLE | WS_BORDER,

420,0,150,80,

(HWND)hwnd,

(HMENU)2,

(HINSTANCE)NULL,

(LPVOID)NULL

);

hwndedit = CreateWindow(

"EDIT",

"666",

WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_BORDER | ES_LEFT |ES_MULTILINE | ES_AUTOVSCROLL,

0,0,400,200,

(HWND)hwnd,

(HMENU)3,

(HINSTANCE)NULL,

(LPVOID)NULL

);

//窗口是否创建成功

if(!hwndbutton){

return FALSE;

}

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

return TRUE;

}

窗口创建完成之后就是显示窗口,更新窗口.之后消息循环

我们要在消息循环对一些事件进行处理.也就是实现我们标题所述功能,这个刚开始我也完全没有头绪,不过最后还是实现了通过WM_COMMAND消息获取点击按钮事件进行处理,GetWindowText函数获取编辑框内容,最终实现点击按钮弹出提示框.

//消息处理函数

LRESULT CALLBACK MainWndProc(

HWND hwnd,//窗口句柄

UINT uMsg,//消息标识符

WPARAM wParam,//消息的第一个参数

LPARAM lParam//消息的第二个参数

){

int wmId, wmEvent;

switch(uMsg){

case WM_CREATE://窗口创建时收到此消息

break;

case WM_PAINT://窗口被绘制时收到此消息

break;

case WM_SIZE://窗口大小改变时收到此消息

//OnWindowResize();

break;

case WM_NOTIFY:// NOTIFY 通常由控件发送给其父窗口,说明控件正在进行某项串口操作

break;

case WM_DESTROY://窗口销毁,单击右上角的关闭按钮会触发此消息

PostQuitMessage(0);

break;

case WM_COMMAND:

wmId    = LOWORD(wParam);

wmEvent = HIWORD(wParam);

switch (wmId){

case 1:  //按下按钮

//更改文本框的内容

SetWindowText( hwndstatic, TEXT("你点击了下面的按钮") );

LPTSTR lpString[128];

GetWindowText(hwndedit,lpString,128);

MessageBox(NULL,lpString,"输入的内容是",MB_OK);

break;

default:

//MessageBox(NULL,"dd","ee",MB_OK);

//不处理的消息一定要交给 DefWindowProc 处理。

return DefWindowProc(hwnd, uMsg, wParam, lParam);

}

break;

default://可以在此处理其他消息

break;

}

//有很多消息未做处理,需要由默认串口消息处理函数来处理

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

通过上面的消息处理函数,我们的程序就可以响应我们的点击按钮事件了.最终效果如图

当然还要加下面这些声明和代码WinMain函数才可以运行

#define _WIN32_WINNT 0x0501

#include

#include

BOOL InitApplication(HINSTANCE hinstance);

BOOL InitInstance(HINSTANCE hinstance,int nCmdShow);

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

HINSTANCE hinst; //应用程序实例句柄

HWND hwndMain; //保留窗口句柄

HWND hwndbutton;//按钮

HWND hwndstatic;//静态文字框

HWND hwndedit;//编辑框

int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){

MSG msg;

BOOL fGotMessage;

//注册窗口

if(!InitApplication(hinstance)){

return FALSE;

}

//创建窗口

if(!InitInstance(hinstance,nCmdShow)){

return FALSE;

}

//消息循环

while((fGotMessage = GetMessage(&msg,(HWND)NULL,0,0)) != 0 && fGotMessage != -1){

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

功能很简单,但是代码一点也不少哎.不过这样写代码有助于我们理解程序的执行过程,所以我是比较喜欢用这种方式写代码的.以上就是这篇文章的全部内容了,写的比较小白毕竟自己也是处于学习阶段还写不错高深的内容.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容