Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】
第三節(jié) 設(shè)計(jì)輸出及利用在線幫助
在Windows中,消息ON_PAINT是專(zhuān)門(mén)用來(lái)處理輸出的。基本所有的輸出代碼應(yīng)放在這里。
。其輸出方式不再限于從上往下,而是全屏可控,因此每個(gè)輸出都需要告知系統(tǒng)輸出位置。典型的文字輸出代碼是TextOut函數(shù)。
將WM_PAINT消息處理的內(nèi)容保留BeginPaint和EndPaint函數(shù)調(diào)用,刪除其他內(nèi)容,用圖中的內(nèi)容替代。可以發(fā)現(xiàn)屏幕輸出的內(nèi)容改變了。TextOut函數(shù)使用一個(gè)叫做HDC類(lèi)型的變量hdc,HDC叫做輸出設(shè)備句柄,可以理解為一個(gè)結(jié)構(gòu)體指針,在BeginPaint函數(shù)中被指向當(dāng)前顯示屏有關(guān)結(jié)構(gòu),而在EndPaint函數(shù)中釋放這個(gè)指針的關(guān)聯(lián)(即EndPaint函數(shù)之后,該句柄就不能被使用了)。其所指向的內(nèi)容存儲(chǔ)了和輸出有關(guān)的默認(rèn)屬性。例如,隱含的屬性包括用什么字體,用幾號(hào)字,采用字體的顏色等。其后兩個(gè)參數(shù)是屏幕坐標(biāo),屏幕坐標(biāo)以像素為單位,左上角為0,0點(diǎn)。最后兩個(gè)參數(shù)是待輸出字符串的地址和字符串長(zhǎng)度。
若要修改默認(rèn)屬性,例如使用一種新的字體如楷書(shū),并且調(diào)整字體的大小——即變更字號(hào),更換字體的顏色怎么辦呢?Windows使用一組相關(guān)函數(shù)更改屬性,例如SetTextColor函數(shù)將字體顏色設(shè)置為新的顏色,同時(shí)返回原先使用的顏色。當(dāng)然在畫(huà)圖工作完畢后,應(yīng)將字體顏色設(shè)置回原先的顏色,以免破壞其他程序的文字輸出行為。SetTextColor函數(shù)具體使用可見(jiàn)后面的例子。
當(dāng)用戶希望顯示魏碑字體而不是系統(tǒng)默認(rèn)的新宋體時(shí),則過(guò)程略微復(fù)雜一些。字體有大小和是否粗體和下劃線等屬性,畫(huà)刷有顏色屬性和貼圖屬性,畫(huà)筆有顏色和粗細(xì)以及畫(huà)實(shí)線還是虛線等屬性,這樣一些復(fù)雜的對(duì)象被稱為GDI對(duì)象。當(dāng)用戶打算使用自定義的GDI對(duì)象時(shí),可以使用各自的創(chuàng)建函數(shù)可以創(chuàng)建這些對(duì)象并得到對(duì)象句柄(可以理解為GDI對(duì)象的結(jié)構(gòu)體的指針),然后使用SelectObject將這些對(duì)象句柄選入輸出設(shè)備結(jié)構(gòu)體中(HDC),同時(shí)得到HDC中原先使用的對(duì)象句柄。在使用完畢這些自定義對(duì)象后,應(yīng)該將原先HDC中使用的默認(rèn)對(duì)象選回,最后使用同一的DeleteHandle函數(shù)刪除這些自定義對(duì)象。
下面的例子中創(chuàng)建一個(gè)字體,輸出一段文字,再使用矩形把字體框住。
省略……
關(guān)于Windows畫(huà)圖的可用函數(shù),可以從如圖所示MSDN中找到
圖 13 GDI幫助的位置以及初學(xué)者可以輕松閱讀和應(yīng)該精讀的章節(jié)
第四節(jié)對(duì)話框與輸入設(shè)計(jì)
Windows 是一種全屏的圖形界面,使用行輸入的scanf雖然簡(jiǎn)單但是不能滿足用戶的需要,用戶有可能在輸入一段內(nèi)容以后回過(guò)頭修改前面輸入的內(nèi)容。這時(shí)候需要使用全屏輸入系統(tǒng)。在Windows中最常見(jiàn)的全屏輸入系統(tǒng)是對(duì)話框。為允許用戶輸入數(shù)據(jù),程序員需要使用對(duì)話框進(jìn)行輸入輸出操作。下面設(shè)計(jì)一個(gè)輸入顧客姓名和出生月日,輸出其星座信息的程序。
首先按照程序中涉及的數(shù)據(jù)的邏輯相關(guān)性,可定義以下數(shù)據(jù)結(jié)構(gòu)。注意其中全局變量MyCustomer。
程序片段8 星座之?dāng)?shù)據(jù)
然后在左側(cè)資源視圖中鼠標(biāo)右鍵點(diǎn)擊Dialog,調(diào)出快捷菜單,選擇Insert Dialog
圖14 新建對(duì)話框以及結(jié)果
從右圖的控件欄中,分三次每次拖動(dòng)一個(gè) 到對(duì)話框中。這個(gè)是靜態(tài)文本,將用來(lái)提示用戶旁邊輸入什么數(shù)據(jù)。右鍵點(diǎn)擊第一個(gè)靜態(tài)文本,出現(xiàn)下圖對(duì)話框,將文字內(nèi)容修改為姓名。
圖15 設(shè)置姓名輸入
從控件工具箱中,拖動(dòng)一個(gè) 到對(duì)話框中,這個(gè)叫做編輯框EditBox,用戶可以在這里輸入一些字符。——其作用將相當(dāng)于命令提示符下的scanf。將這個(gè)編輯框放在姓名邊上。右鍵點(diǎn)擊編輯框,將ID改名為IDC_NAME.如圖
圖16 修改姓名輸入框?qū)傩?/p>
再次從控件工具箱中拖動(dòng) 到對(duì)話框中。這個(gè)叫做組合框ComboBox,可以向用戶提供一些預(yù)先設(shè)置好的選項(xiàng),用戶可以從這些選項(xiàng)中選擇一項(xiàng)。右鍵點(diǎn)擊組合框,如圖設(shè)置屬性。注意在輸入數(shù)據(jù)時(shí),需要按CTRL+回車(chē)鍵輸入下一行數(shù)據(jù)。這里輸入月份數(shù)據(jù)的目的是為了觀察對(duì)話框執(zhí)行時(shí)其效果是否良好,在程序中還需再輸入一次。
圖17 設(shè)置月份下拉框?qū)傩?/p>
最后再拖動(dòng)一個(gè)編輯框到對(duì)話框,修改屬性如圖
圖18 設(shè)置生日輸入框?qū)傩?/p>
右鍵點(diǎn)擊OK和Cancel按鈕(Button)將標(biāo)題修改為“確定”和“取消”,然后拖動(dòng)OK和Cancel按鈕,使之更美觀些,設(shè)置完畢后,可以按下 按鈕來(lái)測(cè)試一下你設(shè)計(jì)的輸入界面的效果。
圖19 測(cè)試運(yùn)行效果
注意到下拉框只能同時(shí)看到兩個(gè)選項(xiàng),可以回到對(duì)話框設(shè)計(jì)界面,點(diǎn)擊組合框的下箭頭,就可以拉伸選擇區(qū)域可以看到的內(nèi)容。
圖20 修改組合框顯示數(shù)據(jù)行
最后,這個(gè)對(duì)話框的目的是為了輸入顧客信息,所以應(yīng)該給這個(gè)對(duì)話框換個(gè)更好的名字。右鍵點(diǎn)擊資源視圖中新建對(duì)話框的名字(原先的名字是IDD_DIALOG1),在對(duì)話框中修改ID號(hào)如下圖:
圖21修改對(duì)話框名字
以上內(nèi)容完成了一個(gè)輸入界面設(shè)計(jì),下面需要通過(guò)程序運(yùn)作這個(gè)對(duì)話框。
從系統(tǒng)給出的樣例代碼中,復(fù)制AboutProc消息處理函數(shù),修改函數(shù)名為InputCustomer,這個(gè)函數(shù)專(zhuān)門(mén)處理顧客信息輸入。代碼如下:
程序片段9 顧客信息的輸入與編輯
下面需要確定合適的時(shí)機(jī)來(lái)輸入顧客信息。方法可以很多,例如當(dāng)你從菜單中選擇一項(xiàng)“輸入顧客信息”的命令——使用菜單的方法,前面已經(jīng)介紹過(guò);或者當(dāng)你按下回車(chē)鍵時(shí)輸入顧客信息——這需要對(duì)按下鍵盤(pán)作出響應(yīng);當(dāng)你用鼠標(biāo)在空白地方點(diǎn)擊窗口時(shí)輸入,也是個(gè)不錯(cuò)的選擇——這需要對(duì)用戶鼠標(biāo)動(dòng)作作出響應(yīng)。下面用鼠標(biāo)響應(yīng)來(lái)作為顧客信息輸入的事件。
鼠標(biāo)動(dòng)作其實(shí)很多,左鍵,右鍵,中鍵,按下,松開(kāi),雙擊都各自有不同的事件定義。對(duì)于每個(gè)事件系統(tǒng)都會(huì)告訴程序,事件發(fā)生的坐標(biāo)。下面是一個(gè)簡(jiǎn)表可以瀏覽一下。
下面的示例程序中使用了鼠標(biāo)左鍵雙擊事件,其用戶操作的設(shè)計(jì)如下,當(dāng)用戶雙擊屏幕上任意一點(diǎn)時(shí),彈出顧客對(duì)話框。注意,因?yàn)槌绦蛟O(shè)計(jì)為在大窗口中雙擊而彈出顧客輸入框,因此下面這段消息響應(yīng)代碼應(yīng)該放置在MainWndProc中。
程序片段10 激發(fā)“輸入顧客 ”對(duì)話框
一般情況下,窗口時(shí)不響應(yīng)雙擊消息的。為使主窗口能夠接受并處理鼠標(biāo)雙擊消息,需要修改主窗口的風(fēng)格。
程序片段11 修改主窗口的處理風(fēng)格
當(dāng)顧客輸入完畢,按下“確定”按鈕后,應(yīng)該在屏幕上顯示相應(yīng)的星座。修改WM_PAINT消息如下:
程序片段12 顯示顧客星座數(shù)據(jù)
圖22 運(yùn)行結(jié)果
總結(jié)
以上是生活随笔為你收集整理的Windows编程初步(三)【说明:有敏感字眼已全删,不知道为啥还审核不通过】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【各种信噪比联系与区别详解】实信号、复信
- 下一篇: 我爱你家乡作文400字