Page 1 of 1

C語言中的 fgets() 在 wxWidgets 如何對應

Posted: Thu Jul 02, 2009 6:13 am
by HeMason
諸位前輩好:

小弟寫C程式寫慣了,以往用 fopen()、fgets() 一行行讀入資料檔分析的動作,不知道在 wxWidgets 中要如何模擬?我好像沒看到類似的函式。

另外,wxWidgets 所附的求助檔,很多函式參數的用法都沒說明。自己摸索半天也不知道他的用意。

請問哪裡有更詳盡的說明檔?

Posted: Thu Jul 02, 2009 1:33 pm
by Satervalley
其实在C++中也可以使用C的标准库函数,所以你用这些函数也未尝不可。C的标准库函数在任何平台上差不多都有实现,所以几乎不影响移植性。
更好的办法是使用wxWidgets 提供的文件类了,不仅保持了移植性,而且是C++的用法。如 wxFile,wxFFile等,另外,wxwidgets 也提供了更“现代”的基于stream的文件类,wxFileStream,wxFileInputStream,wxFileOutputStream等,提供对类文件设备的统一抽象。
至于文档,就是那样子了,只有多尝试。其实我感觉慢慢熟悉了,就会基本上望类名、函数名而大概能知其意了。

Posted: Fri Jul 03, 2009 1:53 am
by murusu
楼主可以先看看这本书<<cross platform gui programming with wxwidgets>>

然后再配合wxwidgets源代码中附带的sample程序就基本可以弄清楚wxwidgets各种功能是如何实现的

官方的帮助文档的确有时候看得让人很恼火,在上面查个半天还不如直接看源代码来的快=.=

Posted: Fri Jul 03, 2009 2:32 am
by samsam598
LZ和LS 都是前辈,俺是菜鸟,愚者一见:
http://sourceforge.net/projects/wxcode/

有个wxDemo_win_1.0,是Win32下已编译好的sample包。要说的是该项目wxDemoViewApp.exe运行后,所有的wxWidgets sample例程源码及EXE还有wx2.9版本的CHM帮助文档都可象看CHM书一样阅览。如果俺表达的不好的话,运行一下wxDemoViewApp.exe即知。

PS:Sample 里仅仅一个console program 示例源码就有4522行,俺是服气S啦~~

Posted: Fri Jul 03, 2009 3:52 am
by HeMason
哇!感激涕零!
沒想到真的有人理小弟的蠢問題。
看來小弟真是來對地方了

小弟先前花了一點時間將wxWidgets中提供的 sample都跑了一遍,確定知道自己的需求都能達到,所以才放心使用wxWidgets的。

但是其中的說明不多,只能將有興趣的 sample code印出來,一行行看,一行行註記。

初期就是先用,日後再慢慢求解了。

感謝前輩所提下載包,小弟會悉心研究。

Posted: Mon Jul 06, 2009 1:55 am
by HeMason
原先小弟以為,主要外皮用wxWidgets,原先程式裡面的內容還是照用。
但是後來發現不行,因為先版需要支援 Unicode,舊版的寫法都是標準的 C,沒辦法支援 Unicdoe 啊!
要是用 MSW 的 _tfopen()、_fgetts() 等等 function,好像也不相容於其他平台。
所以,乾脆全部改寫成 wxWidgets 建議的方式好了。

問題是,wxWidgets 並非是一對一的 function,所以摸索起來有點停滯不前。
程式進度真是龜爬啊!

Posted: Mon Jul 06, 2009 6:41 am
by sishui
HeMason wrote:原先小弟以為,主要外皮用wxWidgets,原先程式裡面的內容還是照用。
但是後來發現不行,因為先版需要支援 Unicode,舊版的寫法都是標準的 C,沒辦法支援 Unicdoe 啊!
要是用 MSW 的 _tfopen()、_fgetts() 等等 function,好像也不相容於其他平台。
所以,乾脆全部改寫成 wxWidgets 建議的方式好了。

問題是,wxWidgets 並非是一對一的 function,所以摸索起來有點停滯不前。
程式進度真是龜爬啊!

前輩的意思是,你以前的程式不支持UNICODE,現在的需要支持UNICODE,是吧?
1.核心不變,外殼用UNICODE,中間自己實現UNICODE2ANSI/ANSI2UNICODE,不過這樣很不好,感覺不倫不類

2.可能你很多東西都要修改或者重寫,_tfopen(),_fgetts()等等function可以用wx的stream來代替,wx中如果沒有類似MSW-API功能的function,那麼你可以用條件宏來寫你程式,如:

#if defined ( __WXMSW__ ) || defined ( _WINDOWS) || defined ( WIN32 )
.....
#else
.....