實現(xiàn)點擊按鈕,彈出輸入框的內容

如果要實現(xiàn)點擊一個按鈕,然后將輸入框中的輸入的內容在彈出的提示框中顯示出來這個功能的話,使用大部分可視化IDE開發(fā)工具都是很簡單的事情,用鼠標拖拖控件不用幾分鐘就可以實現(xiàn).

當然了,如果真按照以上方式實現(xiàn)這個功能然后寫成一篇文章的話也就有點太敷衍了.所以,為了加大難度,在這里我們要使用C語言來實現(xiàn)這個功能.界面功能全部用代碼實現(xiàn),想想就有點高大上是不是.

首先,我們要先創(chuàng)建窗口.需要創(chuàng)建一個主窗口和3個控件(子窗口).主窗口需要先注冊,而控件則不需要,系統(tǒng)已經為我們預先注冊了常用的控件,我們直接創(chuàng)建對應的控件即可.這里我們使用了BUTTON按鈕控件肛搬、static靜態(tài)文本控件冬三、EDIT編輯控件.都是使用CreateWindow函數(shù)來創(chuàng)建的,函數(shù)定義如下:

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);

第一個參數(shù)用于指定不同類型的窗口,第九個參數(shù)指定控件唯一ID,相關參數(shù)都可以在msdn找到的,這里不展開來寫了,以后我的資料庫會對這些內容進行詳細描寫.

//創(chuàng)建窗口

BOOL InitInstance(HINSTANCE hinstance,int nCmdShow){

HWND hwnd;

RECT rect;

//保存應用程序實例句柄

hinst = hinstance;

hwnd = CreateWindow(

"MainWClass",//窗口類名,使用之前注冊的主窗口類

"御坂網(wǎng)絡歡迎你",//窗口名,顯示在串口標題欄上的字符串

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

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

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

800,//高

600,//寬

(HWND)NULL,//無父窗口

(HMENU)NULL,//菜單

hinstance,//應用程序實例

(LPVOID)NULL//無窗口創(chuàng)建數(shù)據(jù)

);

//窗口是否創(chuàng)建成功

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//無窗口創(chuàng)建數(shù)據(jù)

);

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

);

//窗口是否創(chuàng)建成功

if(!hwndbutton){

return FALSE;

}

ShowWindow(hwnd,nCmdShow);

UpdateWindow(hwnd);

return TRUE;

}

窗口創(chuàng)建完成之后就是顯示窗口,更新窗口.之后消息循環(huán)

我們要在消息循環(huán)對一些事件進行處理.也就是實現(xiàn)我們標題所述功能,這個剛開始我也完全沒有頭緒,不過最后還是實現(xiàn)了通過WM_COMMAND消息獲取點擊按鈕事件進行處理,GetWindowText函數(shù)獲取編輯框內容,最終實現(xiàn)點擊按鈕彈出提示框.

//消息處理函數(shù)

LRESULT CALLBACK MainWndProc(

HWND hwnd,//窗口句柄

UINT uMsg,//消息標識符

WPARAM wParam,//消息的第一個參數(shù)

LPARAM lParam//消息的第二個參數(shù)

){

int wmId, wmEvent;

switch(uMsg){

case WM_CREATE://窗口創(chuàng)建時收到此消息

break;

case WM_PAINT://窗口被繪制時收到此消息

break;

case WM_SIZE://窗口大小改變時收到此消息

//OnWindowResize();

break;

case WM_NOTIFY:// NOTIFY 通常由控件發(fā)送給其父窗口,說明控件正在進行某項串口操作

break;

case WM_DESTROY://窗口銷毀,單擊右上角的關閉按鈕會觸發(fā)此消息

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;

}

//有很多消息未做處理,需要由默認串口消息處理函數(shù)來處理

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

}

通過上面的消息處理函數(shù),我們的程序就可以響應我們的點擊按鈕事件了.最終效果如圖

當然還要加下面這些聲明和代碼WinMain函數(shù)才可以運行

#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;//靜態(tài)文字框

HWND hwndedit;//編輯框

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

MSG msg;

BOOL fGotMessage;

//注冊窗口

if(!InitApplication(hinstance)){

return FALSE;

}

//創(chuàng)建窗口

if(!InitInstance(hinstance,nCmdShow)){

return FALSE;

}

//消息循環(huán)

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

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

功能很簡單,但是代碼一點也不少哎.不過這樣寫代碼有助于我們理解程序的執(zhí)行過程,所以我是比較喜歡用這種方式寫代碼的.以上就是這篇文章的全部內容了,寫的比較小白畢竟自己也是處于學習階段還寫不錯高深的內容.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芽丹,隨后出現(xiàn)的幾起案子蠢络,更是在濱河造成了極大的恐慌莲镣,老刑警劉巖翁授,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異愧杯,居然都是意外死亡涎才,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門力九,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耍铜,“玉大人,你說我怎么就攤上這事跌前∽丶妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵抵乓,是天一觀的道長伴挚。 經常有香客問我,道長灾炭,這世上最難降的妖魔是什么茎芋? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蜈出,結果婚禮上田弥,老公的妹妹穿的比我還像新娘。我一直安慰自己掏缎,他們只是感情好皱蹦,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布煤杀。 她就那樣靜靜地躺著眷蜈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沈自。 梳的紋絲不亂的頭發(fā)上酌儒,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音枯途,去河邊找鬼忌怎。 笑死籍滴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的榴啸。 我是一名探鬼主播孽惰,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸥印!你這毒婦竟也來了勋功?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤库说,失蹤者是張志新(化名)和其女友劉穎狂鞋,沒想到半個月后潜的,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡信不,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脐供。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片政己。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酌壕,死狀恐怖,靈堂內的尸體忽然破棺而出歇由,到底是詐尸還是另有隱情沦泌,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站回挽,受9級特大地震影響千劈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜涡驮,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一捉捅、第九天 我趴在偏房一處隱蔽的房頂上張望棒口。 院中可真熱鬧,春花似錦剥懒、人聲如沸合敦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夜只。三九已至扔亥,卻和暖如春谈为,著一層夾襖步出監(jiān)牢的瞬間伞鲫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吠架,地道東北人诵肛。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓怔檩,卻偏偏與公主長得像薛训,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闸英,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容