很多小伙伴在控制臺(tái)下寫程序時(shí),要打印或者調(diào)試很方便,,用printf就可以直接打印輸出,,方便看結(jié)果,但是在編寫窗口程序時(shí),,由于窗口程序的子系統(tǒng)是Windows,,而不是控制臺(tái)的子系統(tǒng)console,因此非字符模式是不能用printf來(lái)輸出的,,那么到底在窗口模式下能不能用printf呢,?
最簡(jiǎn)單的就是用freopen函數(shù)綁定新的標(biāo)準(zhǔn)輸入輸出,,方法如下:
輸入關(guān)鍵printf獲取相關(guān)資料,,不懂得可以后臺(tái)繼續(xù)問(wèn)。 在窗口程序模式下,,要在終端打印只有按上面的方法進(jìn)行輸出,,其實(shí)只是調(diào)試看打印,,可以用Windows提供的API函數(shù)實(shí)現(xiàn)信息打印功能,只要在debug窗口下都可以看到,,而不需要像上面那樣分配一個(gè)控制臺(tái)窗口,。這個(gè)API就是OutputDebugString,該函數(shù)的參數(shù)是一個(gè)字符串,,他能把一個(gè)字符串輸出到調(diào)試窗口中,,可能用的伙伴就說(shuō)了,只能輸入文本串多沒(méi)意思,,要是能想printf那樣輸出任意類型的格式多好,。其實(shí)只要我們簡(jiǎn)單改裝一下就能到達(dá)跟printf函數(shù)一樣的結(jié)果,下面就是一個(gè)改裝好的函數(shù)參考:
至于查看窗口,,VS就自帶debug窗口,,有人說(shuō)要是編譯好后脫離了VS環(huán)境怎么辦?剛才說(shuō)了,,只要是debug窗口就可以,,有不是只有VS才帶有debug窗口,比如有Dbgview這個(gè)小程序(網(wǎng)上可以下載)就可以接收并顯示調(diào)試信息,,你可以啟動(dòng)它來(lái)查看,。 WM_CLOSE消息: 該消息是在關(guān)閉應(yīng)用程序窗口時(shí)觸發(fā),,典型的就是當(dāng)你點(diǎn)擊應(yīng)用程序右上角的叉號(hào)時(shí)就會(huì)走到該消息處,該消息是關(guān)閉應(yīng)用程序時(shí)最先接收到,,因此這時(shí)可以阻止窗口關(guān)閉和退出應(yīng)用程序,,還可以用于提示保存、自動(dòng)保存等操作,。如果要退出應(yīng)用程序,,一般會(huì)調(diào)用DestroyWindow這個(gè)函數(shù),Windows默認(rèn)處理就是直接調(diào)用這個(gè)函數(shù),,該函數(shù)在關(guān)閉窗口后發(fā)送WM_DESTROY消息給應(yīng)用程序,。
該消息接收到時(shí)已經(jīng)將窗口從屏幕上關(guān)閉了,視覺(jué)上已經(jīng)看不到窗口,,雖然這個(gè)時(shí)候還能阻止應(yīng)用程序徹底退出,但是對(duì)于一個(gè)窗口應(yīng)用程序在主窗口都已經(jīng)關(guān)閉的情況下再不退出,,已經(jīng)沒(méi)有實(shí)際意義了,。一般這個(gè)時(shí)候主要是卸載一些全局句柄、釋放內(nèi)存和對(duì)象等操作。該消息最后一般會(huì)調(diào)用PostQuitMessage這個(gè)函數(shù),,該函數(shù)簡(jiǎn)單的投遞WM_QUIT消息對(duì)消息隊(duì)列中,。 WM_QUIT消息: GetMessage在獲取其他任何消息,返回值都不是0,,唯獨(dú)這個(gè)消息,,獲取該消息后返回0,于是退出消息循環(huán),,最終WinMain主線程函數(shù)退出,,結(jié)束程序運(yùn)行。 聯(lián)盟推出答疑解惑系列,,如果有編程疑惑可按照如下格式: 答疑解惑+個(gè)人昵稱+具體問(wèn)題 輸入到微信公眾號(hào)里面,,具有代表性的問(wèn)題,聯(lián)盟將整理成文章發(fā)表 輸入sh獲取所有的答疑解惑文章,,或者點(diǎn)擊“閱讀原文” |
|