基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)_第1頁
基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)_第2頁
基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)_第3頁
基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)_第4頁
基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PAGE PAGE 20實(shí)驗(yàn)三 基于MINIGUI的嵌入式MiniQQ設(shè)計(jì)控件設(shè)計(jì)基礎(chǔ)實(shí)驗(yàn):基于MINIGUI的嵌入式MiniQQ主界面控件設(shè)計(jì)實(shí)驗(yàn)?zāi)康呐c意義能夠基于MINIGUI設(shè)計(jì)常用控件(static控件、button控件、edit控件),了解嵌入式MINIGUI控件編程的相關(guān)知識(shí)。實(shí)驗(yàn)環(huán)境redhat9.0+PC平臺(tái);目標(biāo)機(jī):友善之臂MINI2440。實(shí)驗(yàn)內(nèi)容基于已經(jīng)搭建好了的嵌入式MINIGUI開發(fā)環(huán)境,設(shè)計(jì)主窗口及其控件;主窗口上應(yīng)當(dāng)有2個(gè)static控件、2個(gè)edit控件和2個(gè)button控件,并且在控件標(biāo)題欄上標(biāo)示出“MiniQQ byr v1.0 及開發(fā)者學(xué)號(hào)”。實(shí)驗(yàn)內(nèi)容及步

2、驟PC機(jī)上的Linux宿主機(jī)中已經(jīng)配置好了嵌入式MINIGUI的開發(fā)環(huán)境和在PC機(jī)上開發(fā)MINIGUI的環(huán)境。嵌入式MINIGUI的開發(fā)環(huán)境位于該路徑下:/minigui/modified;PC嵌入式MiniQQ的開發(fā)源碼位于該路徑下:/PCminigui/modified/src,在該目錄下有miniQQ.c、miniQQ.h兩個(gè)源文件,同學(xué)們可以在這兩個(gè)文件上添加代碼,通過編程完成自己的任務(wù)。實(shí)現(xiàn)miniQQ程序需要配置開發(fā)環(huán)境,具體步驟如下:PC平臺(tái)新建工程目錄,然后在其目錄下新建子目錄src。例如可以在/root/下建立文件samples,在samples中建立src文件夾。在samp

3、les中拷貝如下內(nèi)容:#cp /PCminigui/modified/configure.in /root/samples#cp /PCminigui/modified/autogen.sh /root/samples#cp /PCminigui/modified/setup.sh /root/samples#cp /PCminigui/modified/Makefile.am /root/samples在samples目錄下的src文件中拷貝如下內(nèi)容:#cp /PCminigui/modified/src/Makefile.am /root/samples/src#cp /PCminigui

4、/modified/src/miniQQ.c /root/samples/src修改src文件中的Makefile.am內(nèi)容,使其與miniQQ匹配。#gedit Makefile.am然后回到samples文件中,進(jìn)行工程編譯。#cd .工程編譯第一步:#./autogen.sh 運(yùn)行autogen.sh腳本,從而生成configure腳本。工程編譯第二步:#./setup.sh 運(yùn)行setup.sh腳本,從而生成Makefile文件。工程編譯第三步:#make進(jìn)入到src文件中可以看到編譯成功的綠色的miniQQ的可執(zhí)行程序。在srcm目錄下鍵入“qvfb &”運(yùn)行qvfb,然后在File

5、中選擇Configure,選擇640*480。 然后運(yùn)行“./miniQQ”嵌入式平臺(tái)嵌入式平臺(tái)下的環(huán)境配置與PC平臺(tái)下的環(huán)境配置大致相同,同樣為先新建工程目錄,然后在其目錄下新建子目錄src。例如可以在/root/下建立文件samples1,在samples1中建立src文件夾。在samples中拷貝如下內(nèi)容:#cp /minigui/modified/configure.in /root/samples1#cp /minigui/modified/autogen.sh /root/samples1#cp /minigui/modified/setup.sh /root/samples1#c

6、p /minigui/modified/Makefile.am /root/samples1在samples1目錄下的src文件中拷貝如下內(nèi)容:#cp /minigui/modified/src/Makefile.am /root/samples1/src#cp /root/samples/src/miniQQ.c /root/samples1/src修改src文件中的Makefile.am內(nèi)容,使其與miniQQ匹配。#gedit Makefile.am然后回到samples1文件夾中修改configure.in,注意修改圖中標(biāo)示的三個(gè)位置。#cd .#gedit configure.in然

7、后進(jìn)行工程編譯。工程編譯第一步:#./autogen.sh 運(yùn)行autogen.sh腳本,從而生成configure腳本。工程編譯第二步:#vi configure,修改configuer腳本,從而生成用于交叉編譯的Makefile文件。加入以下工具鏈制定:CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc CPP=/usr/local/arm/3.4.1/bin/arm-linux-cpp LD=/usr/local/arm/3.4.1/bin/arm-linux-ldAR=/usr/local/arm/3.4.1/bin/arm-linux-ar RANLI

8、B=/usr/local/arm/3.4.1/bin/arm-linux-ranlib STRIP=/usr/local/arm/3.4.1/bin/arm-linu下一步,需要修改setup的權(quán)限。右鍵setup.sh,在屬性中修改權(quán)限,如下圖:#./setup.sh 運(yùn)行setup.sh腳本,從而生成Makefile文件。工程編譯第三步:#make進(jìn)入到src文件中可以看到編譯成功的綠色的miniQQ的可執(zhí)行程序,把此文件發(fā)送到開發(fā)板中,傳輸成功后,在超級(jí)終端上鍵入如下命令,以便獲得目標(biāo)機(jī)信任:#chmod +x miniQQ最后./miniQQ 以下內(nèi)容是對(duì)minigui編程的簡(jiǎn)單介紹。

9、1、主窗口定義一個(gè)C 程序的入口點(diǎn)為main 函數(shù),而一個(gè)MiniGUI 程序的入口點(diǎn)為MiniGUIMain,該函數(shù)原型如下:int MiniGUIMain (int argc, const char* argv)main 函數(shù)已經(jīng)在MiniGUI 的函數(shù)庫中定義了,該函數(shù)在進(jìn)行一些MiniGUI 的初始化工作之后調(diào)用MiniGUIMain 函數(shù)。所以,每個(gè)MiniGUI 應(yīng)用程序)的入口點(diǎn)均為MiniGUIMain 函數(shù)。參數(shù)argc 和argv與C程序main函數(shù)的參數(shù)argc和argv的含義是一樣的,分別為命令行參數(shù)個(gè)數(shù)和參數(shù)字符串?dāng)?shù)組指針。設(shè)置顯示區(qū)域#ifdef _LITE_VER

10、SIONSetDesktopRect(0, 0, 240, 320);/注:我們的目標(biāo)板液晶屏是240*320#endifSetDesktopRect 是MiniGUI-Lite 版本專有的函數(shù),因此包圍在 _LITE_VERSION 的條件編譯中。在MiniGUI-Lite 版本中,每一個(gè)MiniGUI 客戶端程序在調(diào)用其它MiniGUI 函數(shù)之前必須調(diào)用該函數(shù)以設(shè)置程序的桌面顯示矩形區(qū)域。SetDesktopRect 是一個(gè)宏,定義在頭文件minigui.h 中,如下:#define SetDesktopRect(lx, ty, rx, by) JoinLayer (, , lx, ty,

11、 rx, by)所以,你也可以用JoinLayer 函數(shù)來代替SetDesktopRect,來設(shè)置程序的桌面顯示區(qū)域。創(chuàng)建和顯示主窗口hMainWnd = CreateMainWindow (&CreateInfo);每個(gè)MiniGUI 應(yīng)用程序的初始界面一般都是一個(gè)主窗口, 你可以通過調(diào)用CreateMainWindow 函數(shù)來創(chuàng)建一個(gè)主窗口,其參數(shù)是一個(gè)指向MAINWINCREATE 結(jié)構(gòu)的指針,在上例中就是CreateInfo,返回值為所創(chuàng)建主窗口的句柄。MAINWINCREATE 結(jié)構(gòu)描述一個(gè)主窗口的屬性,在使用CreateInfo 創(chuàng)建主窗口之前,需要設(shè)置它的各項(xiàng)屬性。CreateI

12、nfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;設(shè)置主窗口風(fēng)格,這里把窗口設(shè)為初始可見的,并具有邊框和標(biāo)題欄。CreateInfo.dwExStyle = WS_EX_NONE;設(shè)置主窗口的擴(kuò)展風(fēng)格,該窗口沒有擴(kuò)展風(fēng)格。CreateInfo.spCaption = MiniQQWorld;設(shè)置主窗口的標(biāo)題為“MiniQQWorld”。CreateInfo.hMenu = 0;設(shè)置主窗口的主菜單,該窗口沒有主菜單。CreateInfo.hCursor = GetSystemCursor(0);設(shè)置主窗口的光標(biāo)為系統(tǒng)缺省光標(biāo)。CreateInfo

13、.hIcon = 0;設(shè)置主窗口的圖標(biāo),該窗口沒有圖標(biāo)。CreateInfo.MainWindowProc = MiniQQWinProc;設(shè)置主窗口的窗口過程函數(shù)為MiniQQWinProc,所有發(fā)往該窗口的消息由該函數(shù)處理。CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 320;CreateInfo.by = 240;設(shè)置主窗口在屏幕上的位置,該窗口左上角位于(0, 0),右下角位于(320, 240)。CreateInfo.iBkColor = PIXEL_lightwhite;設(shè)置主窗口的背景色為白色,PIXEL_lightwhi

14、te 是MiniGUI 預(yù)定義的象素值。CreateInfo.dwAddData = 0;設(shè)置主窗口的附加數(shù)據(jù),該窗口沒有附加數(shù)據(jù)。CreateInfo.hHosting = HWND_DESKTOP;設(shè)置主窗口的托管窗口為桌面窗口。ShowWindow(hMainWnd, SW_SHOWNORMAL);創(chuàng)建完主窗口之后,還需要調(diào)用ShowWindow 函數(shù)才能把所創(chuàng)建的窗口顯示在屏幕上。ShowWindow 的第一個(gè)參數(shù)為所要顯示的窗口句柄,第二個(gè)參數(shù)指明顯示窗口的方式(顯示還是隱藏),SW_SHOWNORMAL 說明要顯示主窗口,并把它置為頂層窗口。進(jìn)入消息循環(huán)在調(diào)用ShowWindow

15、函數(shù)之后,主窗口就會(huì)顯示在屏幕上。和其它GUI 一樣,現(xiàn)在是進(jìn)入消息循環(huán)的時(shí)候了。MiniGUI 為每一個(gè)MiniGUI 程序維護(hù)一個(gè)消息隊(duì)列。在發(fā)生事件之后,MiniGUI 將事件轉(zhuǎn)換為一個(gè)消息,并將消息放入目標(biāo)程序的消息隊(duì)列之中。應(yīng)用程序現(xiàn)在的任務(wù)就是執(zhí)行如下的消息循環(huán)代碼,不斷地從消息隊(duì)列中取出消息,進(jìn)行處理:while (GetMessage(&Msg, hMainWnd) TranslateMessage(&Msg);DispatchMessage(&Msg);Msg 變量是類型為MSG 的結(jié)構(gòu),MSG 結(jié)構(gòu)在window.h 中定義如下:typedef struct _MSGHWN

16、D hwnd;int message;WPARAM wParam;LPARAM lParam;unsigned int time;#ifndef _LITE_VERSIONvoid* pAdd;#endif MSG;typedef MSG* PMSG;GetMessage 函數(shù)調(diào)用從應(yīng)用程序的消息隊(duì)列中取出一個(gè)消息:GetMessage( &Msg, hMainWnd)該函數(shù)調(diào)用的第二個(gè)參數(shù)為要獲取消息的主窗口的句柄,第一個(gè)參數(shù)為一個(gè)指向MSG結(jié)構(gòu)的指針,GetMessage 函數(shù)將用從消息隊(duì)列中取出的消息來填充該消息結(jié)構(gòu)的各個(gè)域,包括: hwnd 消息發(fā)往的窗口的句柄。在MiniQQworl

17、d.c 程序中,該值與hMainWnd 相同。 message 消息標(biāo)識(shí)符。這是一個(gè)用于標(biāo)識(shí)消息的整數(shù)值。每一個(gè)消息均有一個(gè)對(duì)應(yīng)的預(yù)定義標(biāo)識(shí)符,這些標(biāo)識(shí)符定義在window.h 頭文件中,以前綴MSG 開頭。 wParam 一個(gè)32 位的消息參數(shù),其含義和值根據(jù)消息的不同而不同。 lParam 一個(gè)32 位的消息參數(shù),其含義和值取決于消息的類型。 time 消息放入消息隊(duì)列中的時(shí)間。只要從消息隊(duì)列中取出的消息不為MSG_QUIT,GetMessage 就返回一個(gè)非0 值,消息循環(huán)將持續(xù)下去。MSG_QUIT 消息使GetMessage 返回0,導(dǎo)致消息循環(huán)的終止。TranslateMessag

18、e (&Msg);TranslateMessage 函數(shù)把擊鍵消息轉(zhuǎn)換為MSG_CHAR 消息,然后直接發(fā)送到窗口過程函數(shù)。DispatchMessage (&Msg);DispatchMessage 函數(shù)最終將把消息發(fā)往該消息的目標(biāo)窗口的窗口過程,讓它進(jìn)行處理,在上例中,該窗口過程就是MiniQQWinProc。也就是說,MiniGUI 在DispatchMessage函數(shù)中調(diào)用主窗口的窗口過程函數(shù)(回調(diào)函數(shù))對(duì)發(fā)往該主窗口的消息進(jìn)行處理。處理完消息之后,應(yīng)用程序的窗口過程函數(shù)將返回到DispatchMessage 函數(shù)中,而DispatchMessage函數(shù)最后又將返回到應(yīng)用程序代碼中,應(yīng)

19、用程序又從下一個(gè)GetMessage 函數(shù)調(diào)用開始消息循環(huán)。2、主窗口回調(diào)函數(shù)定義窗口過程函數(shù)是MiniGUI 程序的主體部分,應(yīng)用程序?qū)嶋H所做的工作大部分都發(fā)生在窗口過程函數(shù)中,因?yàn)镚UI 程序的主要任務(wù)就是接收和處理窗口收到的各種消息。在MiniQQ.c 程序中,窗口過程是名為MiniQQWinProc 的函數(shù)。窗口過程函數(shù)可以由程序員任意命名,CreateMainWindow 函數(shù)根據(jù)MAINWINCREATE 結(jié)構(gòu)類型的參數(shù)中指定的窗口過程創(chuàng)建主窗口。窗口過程函數(shù)總是定義為如下形式:static int MiniQQWinProc (HWND hWnd, int message, WP

20、ARAM wParam, LPARAM lParam)窗口過程的4 個(gè)參數(shù)與MSG 結(jié)構(gòu)的前四個(gè)域是相同的。第一個(gè)參數(shù)hWnd 是接收消息的窗口的句柄,它與CreateMainWindow 函數(shù)的返回值相同,該值標(biāo)識(shí)了接收該消息的特定窗口。第二個(gè)參數(shù)與MSG 結(jié)構(gòu)中的message 域相同,它是一個(gè)標(biāo)識(shí)窗口所收到消息的整數(shù)值。最后兩個(gè)參數(shù)都是32 位的消息參數(shù),它提供和消息相關(guān)的特定信息。程序通常不直接調(diào)用窗口過程函數(shù),而是由MiniGUI 進(jìn)行調(diào)用;也就是說,它是一個(gè)回調(diào)函數(shù)。窗口過程函數(shù)不予處理的消息應(yīng)該傳給DefaultMainWinProc 函數(shù)進(jìn)行缺省處理,從DefaultMainW

21、inProc 返回的值必須由窗口過程返回。程序的退出用戶單擊窗口右上角的關(guān)閉按鈕時(shí)窗口過程函數(shù)將收到一個(gè)MSG_CLOSE 消息。MiniQQworld 程序在收到MSG_CLOSE 消息時(shí)調(diào)用DestroyMainWindow 函數(shù)銷毀主窗口,并調(diào)用PostQuitMessage 函數(shù)在消息隊(duì)列中投入一個(gè)MSG_QUIT 消息。當(dāng)GetMessage函數(shù)取出MSG_QUIT 消息時(shí)將返回0,最終導(dǎo)致程序退出消息循環(huán)。程序最后調(diào)用MainWindowThreadCleanup 清除主窗口所使用的消息隊(duì)列等系統(tǒng)資源并最終由MiniGUIMain 返回。3、主窗口控件定義3.1靜態(tài)框定義(stat

22、ic控件) 在本實(shí)驗(yàn)中,我們使用2個(gè)static控件來實(shí)現(xiàn)登錄主界面上的提示文字“用戶名:”和“密碼:”。 靜態(tài)框用來在窗口的特定位置顯示文字、數(shù)字等信息,還可以用來顯示一些靜態(tài)的圖片信息,比如公司徽標(biāo)、產(chǎn)品商標(biāo)等等。就像其名稱暗示的那樣,靜態(tài)框的行為不能對(duì)用戶的輸入進(jìn)行動(dòng)態(tài)的響應(yīng),它的存在基本上就是為了展示一些信息,而不會(huì)接收任何鍵盤或鼠標(biāo)輸入。下圖給出了靜態(tài)框控件的典型用途:在對(duì)話框中作為其他控件的標(biāo)簽。圖、靜態(tài)框控件的典型用途以 CTRL_STATIC 為控件類名調(diào)用 CreateWindow 函數(shù),即可創(chuàng)建靜態(tài)框控件。靜態(tài)框的類型和風(fēng)格靜態(tài)框的風(fēng)格由靜態(tài)框種類和一些標(biāo)志位組成。我們可將

23、靜態(tài)框控件按功能劃分為標(biāo)準(zhǔn)型(只顯示文本)、位圖型(顯示圖標(biāo)或圖片),以及特殊類型分組框。下面我們將分別介紹上述不同類型的靜態(tài)框。1)、標(biāo)準(zhǔn)型將靜態(tài)框控件的風(fēng)格設(shè)定為SS_SIMPLE、SS_LEFT、SS_CENTER、SS_RIGHT,以及SS_LEFTNOWORDWRAP 之一,將創(chuàng)建用來顯示文字的靜態(tài)框,其所顯示的內(nèi)容在CreateWindow 函數(shù)的 caption 參數(shù)中進(jìn)行指定,并且在以后可以用SetWindowText 來改變。通過 SS_SIMPLE 風(fēng)格創(chuàng)建的控件只用來顯示單行文本,也就是說,控件文本不會(huì)自動(dòng)換行顯示,并且文本永遠(yuǎn)是左對(duì)齊的。通過 SS_LEFT、SS_CE

24、NTER 或 SS_RIGHT 風(fēng)格創(chuàng)建的靜態(tài)框可用來顯示多行文本,并分別以左對(duì)齊、中對(duì)齊和右對(duì)齊方式顯示文本。通過SS_LEFTNOWORDWRAP 風(fēng)格創(chuàng)建的靜態(tài)框會(huì)擴(kuò)展文本中的 TAB 符,但不做自動(dòng)換行處理。下面的程序段創(chuàng)建了上述幾種類型的靜態(tài)框的例程:CreateWindow (CTRL_STATIC,This is a simple static control.,WS_CHILD | SS_NOTIFY | SS_SIMPLE | WS_VISIBLE | WS_BORDER,IDC_STATIC1,10, 10, 180, 20, hWnd, 0);CreateWindow (

25、CTRL_STATIC,This is a left-aligned static control (auto-wrap).,WS_CHILD | SS_NOTIFY | SS_LEFT | WS_VISIBLE | WS_BORDER,IDC_STATIC2,10, 40, 100, 45, hWnd, 0);CreateWindow (CTRL_STATIC,This is a right-aligned static control (auto-wrap).,WS_CHILD | SS_NOTIFY | SS_RIGHT | WS_VISIBLE | WS_BORDER,IDC_STAT

26、IC3,10, 90, 100, 45, hWnd, 0);CreateWindow (CTRL_STATIC,This is a center-aligned static control (auto-wrap).,WS_CHILD | SS_NOTIFY | SS_CENTER | WS_VISIBLE | WS_BORDER,IDC_STATIC4,10, 140, 100, 45, hWnd, 0);CreateWindow (CTRL_STATIC,SS_LEFTNOWORDWRAP: tTabs are expanded, but words are not wrapped. Te

27、xt that extends past the end of a line is clipped.,WS_CHILD | SS_LEFTNOWORDWRAP | WS_VISIBLE | WS_BORDER,IDC_STATIC,10, 290, 540, 20, hWnd, 0);上述幾個(gè)控件的顯示效果見下圖所示。為了清楚看到對(duì)齊效果,這些靜態(tài)框均含有邊框。圖、文本型靜態(tài)框其他靜態(tài)框類型除上述靜態(tài)框類型之外,還有如下幾種不常見的靜態(tài)框類型: SS_WHITERECT:以白色填充靜態(tài)框矩形。 SS_GRAYRECT:以灰色填充靜態(tài)框矩形。 SS_BLACKRECT:以黑色填充靜態(tài)框矩形。 S

28、S_GRAYFRAME:灰色邊框。 SS_WHITEFRAME:白色邊框。 SS_BLACKFRAME:黑色邊框。使用這些風(fēng)格的靜態(tài)框效果見下圖。圖、其他靜態(tài)框類型3.2按鈕定義(button控件)按鈕是除靜態(tài)框之外使用最為頻繁的一種控件。按鈕通常用來為用戶提供開關(guān)選擇。在本實(shí)驗(yàn)的MiniQQ主窗口中需要設(shè)計(jì)兩個(gè)按鈕,一個(gè)是“登錄”按鈕,另一個(gè)是“退出”按鈕。MiniGUI 的按鈕可劃分為普通按鈕、復(fù)選框和單選鈕等幾種類型。用戶可以通過鍵盤或者鼠標(biāo)來選擇或者切換按鈕的狀態(tài)。用戶的輸入將使按鈕產(chǎn)生通知消息,應(yīng)用程序也可以向按鈕發(fā)送消息以改變按鈕的狀態(tài)。以 CTRL_BUTTON 為控件類名調(diào)用

29、CreateWindow 函數(shù),即可創(chuàng)建按鈕控件。按鈕的類型和風(fēng)格20.1.1 普通按鈕普通按鈕是一個(gè)矩形,其中顯示了通過 CreateWindow 傳遞的窗口標(biāo)題。該矩形占用了在CreateWindow 調(diào)用中給出的全部高度和寬度,而文字位于矩形的中心。按鈕控件主要用來觸發(fā)一個(gè)立即回應(yīng)的動(dòng)作,并且不會(huì)長久保持開關(guān)信息。這種形態(tài)的按鈕控件有兩種窗口風(fēng)格, 分別叫做BS_PUSHBUTTON 和BS_DEFPUSHBUTTON。BS_DEFPUSHBUTTON 中的“DEF”代表“默認(rèn)”。當(dāng)用來設(shè)計(jì)對(duì)話框時(shí),BS_PUSHBUTTON風(fēng)格和BS_DEFPUSHBUTTON 風(fēng)格的作用不同,具有

30、BS_DEFPUSHBUTTON 的按鈕將是默認(rèn)接收 ENTER 鍵輸入的按鈕,而不管當(dāng)前的輸入焦點(diǎn)處于哪個(gè)控件上。但是當(dāng)用作普通主窗口的控件時(shí),兩種型態(tài)的按鈕作用相同,只是具有 BS_DEFPUSHBUTTON 風(fēng)格的按鈕的邊框要粗一些。當(dāng)鼠標(biāo)光標(biāo)處在按鈕中時(shí),按下鼠標(biāo)左鍵將使按鈕用三維陰影重畫自己,就好像真的被按下一樣。放開鼠標(biāo)按鍵時(shí),就恢復(fù)按鈕的原貌,并向父窗口發(fā)送一個(gè)MSG_COMMAND消息和BN_CLICKED 通知碼,當(dāng)按鈕擁有輸入焦點(diǎn)時(shí),在文字的周圍就有虛線,按下及釋放空格鍵與按下及釋放鼠標(biāo)按鍵具有相同的效果。通常情況下,按鈕文本會(huì)以單行的形式在垂直和水平方向居中顯示,不會(huì)自動(dòng)

31、換行。不過,應(yīng)用程序也可以通過指定 BS_MULTLINE 風(fēng)格來指定顯示多行文本。下面的程序段創(chuàng)建了兩個(gè)普通按鈕:CreateWindow (CTRL_BUTTON,Push Button,WS_CHILD | BS_PUSHBUTTON | BS_CHECKED | WS_VISIBLE,IDC_BUTTON,10, 10, 80, 30, hWnd, 0);CreateWindow (CTRL_BUTTON,Multiple Lines Push Button,WS_CHILD | BS_PUSHBUTTON | BS_MULTLINE | WS_VISIBLE,IDC_BUTTON +

32、 1,100, 10, 80, 40, hWnd, 0);上述代碼段建立的普通按鈕的顯示效果如下圖所示。注意在使用 BS_MULTILINE風(fēng)格之后,文本將垂直向上對(duì)齊。圖、普通按鈕按鈕消息應(yīng)用程序通過給按鈕發(fā)送消息來實(shí)現(xiàn)如下目的:MSG_COMMAND按鈕通知碼具有 BS_NOTIFY 風(fēng)格的按鈕可產(chǎn)生的通知碼主要有: BN_CLICKED:表明用戶單擊此按鈕。該通知碼的值為 0,因此,如果要在按鈕的父窗口中處理該按鈕發(fā)送過來的 BN_CLICKED 通知消息, 只需判斷MSG_COMMAND 消息的 wParam 參數(shù)是否等于按鈕的標(biāo)識(shí)符即可。該通知的產(chǎn)生是默認(rèn)的,將忽略按鈕控件的 BS_NOTIFY 風(fēng)格。 BN_PUSHED:表明用戶將此按鈕按下。 BN_UNPUSHED:表明用戶將此按鈕釋放。 BN_DBLCLK:表明用戶在此按鈕上進(jìn)行了鼠標(biāo)左鍵的雙擊操作。 BN_SETFOCUS:表明按鈕獲得了輸入焦點(diǎn)。 BN_KILLFOCUS:表明按鈕失去了輸入焦點(diǎn)。3.3編輯框定義(edit控件)在本實(shí)驗(yàn)的MiniQQ主窗口中需要設(shè)計(jì)兩個(gè)編輯框,一個(gè)是輸入用戶名的編輯框,另一個(gè)是輸入密碼的編輯框。編輯框?yàn)閼?yīng)用程序提供了接收用戶輸入和編輯文字的重要途徑。相對(duì)前面提到的靜態(tài)框、按鈕和列表框等控件來講,編輯框的用途和行為方式比較單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論