1. 程式人生 > >MFC 使用控制檯列印程式資訊

MFC 使用控制檯列印程式資訊

在MFC程式設計中,程式碼的除錯一直不太直觀。搞一個 MessageBox 來列印資訊檢視程式是否執行或執行是否有誤,又或者是在程式中設斷點都有不太方便的地方,特別是在需要獲得多個資訊的情況下更是不便。此外,MessageBox 在涉及到列印非 CString 格式的資訊時還要用 CString 的 Format 函式進行格式轉換,又給除錯帶來進一步的麻煩。綜上,在MFC程式的除錯階段加入像WIN32控制檯程式那樣的控制檯來列印程式資訊顯得直觀又方便易用。下面,是在MFC程式中新增控制檯程式的方法:

    在對話方塊程式的初始化函式OnInitDialog()中(如果不是對話方塊程式,或者希望在子對話方塊中加入,只需將程式碼新增到相應的入口位置即可)加入如下程式碼:

::AllocConsole();//開啟控制元件臺資源
FILE *fp;
freopen_s(&fp,"CONOUT$", "w+t", stdout);//申請寫,這個是針對VS2013版本的程式碼,在VS較為早期的版本比如VS2008中,可將freopen_s改為freopen,並將引數改為對應形式即可
        到此,程式在執行時就會開啟一個控制檯視窗等待輸入,只要在程式中加入 printf(",,,,,,")  則可在控制檯中打印出資訊。

    最後,要記得在程式關閉的地方呼叫如下函式關閉掉控制檯程式,不然會導致程式無法正常關閉的悲劇。

本人是在對話方塊程式的 WM_CLOSE 訊息響應函式中新增的:

FreeConsole();//釋放控制檯資源
    

    當然,MFC本身也集成了相應的巨集"TRACE"來實現這個功能。示例如下:


TRACE("x = %d and y = %x and z = %f\n", 1, 2, 3);
    優點就是可以直接列印資訊,缺點則是打印出來的東西在"輸出視窗"中,感覺總沒有控制檯那麼好。