Win32學習筆記 第一章 開始 (轉)

worldblog發表於2007-12-14
Win32學習筆記 第一章 開始 (轉)[@more@]

學習筆記

作者: 姜學哲(tosail0@163.net">netsail0@163.net)

教材: 設計(第五版)北京大學出版社
 [美]Charles Petzold 著
 北京博彥科技發展有限公司 譯  ¥:160
參考資料:
 Windows 應用程式設計原理_方法_技術(因為是PDF格式的EBOOK,作者等不詳)
 新編Windows 參考大全  電子工業出版社  ¥:98
 C++ Primer(第三版)中國電力出版社 Stanley B.Lippman & Josee Lajo著 潘愛民 張麗 譯 ¥:128
 TURBO C實用大全 徐金梧 楊德斌 徐科 編 ¥:42

環境:  server + Internet Explorer 6.0 + 7.0 + Visual C++ 6.0

圖們江程式編制小組(chulsoft.xiloo.com)版權所有,轉載請說明出處
------------------------------------------------------------------
【第一章 開始】

爽完了"星際爭霸"後不禁有些遺憾。如果星際的地圖再大一點,人口限制再多一點就好了。地圖尺寸應該是8人地圖的81倍,人口應該是6000。目前來說這是不可能的事情。沒有任何一臺機子能承受得了。我是想指揮一場真正的戰爭。就像想當年劉鄧大軍和國民黨軍打仗一樣。其實星際已經很優秀了,我不能再要求什麼。

說到這裡,我想到了我們最常用的操作Windows系列。我去過很多論壇,包括論壇在內,絕大多數網友們非常喜歡罵公司和該公司的所有產品。以前我也罵過,後來意識到了自己的錯誤後,再也不罵了。有很多人用著的WINDOWS和IE上網罵微軟。有種的用LINUX上網罵微軟行不?要不買個正版再罵也可以呀。

我最喜歡的公司是微軟。因為在微軟程式設計師的地位是非常高的,特別是總部。微軟是兩個天才程式設計師建立的。嚮往程式設計師的我沒有理由不喜歡微軟。

給微軟拍了這麼多的馬屁,怎麼能不懂WINDOWS系統呢?所以我要學習WIN32。徹底瞭解微軟公司的產品。

學習WIN32,也就是讀Windows程式設計(第五版)要有三個先決條件。

首先我們應該從的角度熟悉WINDOWS系統。意思是說會使用WINDOWS。我想這一點很多人都能做到。

第二,應該瞭解C語言。為什麼?WINDOWS是用C寫的,書中是用C語言講解的,這就是原因。當然如果您願意,也可以用Pascal寫。不過您得找另一本書了。書名應該是Windows程式設計(Pascal版)。

第三,應該有一個Visual C++ 6.0。我也不指望您用的是正版。一萬多RMB,比我的還貴。

書上說,我們可以沒有任何圖形使用者介面的。very good!

微軟出版的書嘛,當然免不了大大地誇耀一下輝煌的歷史了。

下面來看一看WIN32版的"Hello World",哦,對不起!應該是"Hello Windows98!"才對。

#include

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
 MessageBox(NULL, TEXT("Hello, Windows98!"), TEXT("HelloMsg"), 0);

 return 0;
}

C語言中入口應該是main(),但是到了WIN32就變了,WinMain()代替了main()。對於從來沒有接觸過WIN32的初學者來講,上面的程式可能會使您一頭霧水。

MessageBox()是對話方塊。是Windows系統提供的。這就是傳說中的Windows API(應用程式介面)。函式功能是顯示一個對話方塊。對話方塊所顯示的內容就是第二個引數TEXT(Hello, Windows98!)。第三個引數中的字串會出現在標題欄中。

有關TEXT(),這是一個宏定義,也就是用define定義的。這是為了相容UNICODE字符集而做的改動。以後不管是什麼時候,您最好把字串都用TEXT()括起來,有關UNICODE,那是第二章的問題,所以在第一章這個問題根本就不成為問題。

頭windows.h中包含了其它的標頭檔案,這些標頭檔案中的一部分又包含了另外的一些標頭檔案。

◆WINDEF.H
◆WINNT.H
◆WINBASE.H
◆WINUSER.H
◆WINGDI.H

這些標頭檔案定義了Windows的所有資料型別,函式,資料結構和常數識別符號。

WinMain()前面的WINAPI在WINDEF.H中定義如下:

#define WINAPI __stdcall

具體的含義我不知道。可能後面會有詳細講解吧。

#define MB_OK  0x00000000L
#define MB_OKCANCEL  0x00000001L
#define MB_ABORTRETRYIGNORE  0x00000002L
#define MB_YESNOCANCEL  0x00000003L
#define MB_YESNO  0x00000004L
#define MB_RETRYCANCEL  0x00000005L

上面的是MessageBox()的第四個引數選項。想了解他們的具體含義很簡單。上面的HelloMsg程式中MessageBox()的第四個引數是零,您可以把那個零換成上面六個常量中的一個,比如:

 MessageBox(NULL, TEXT("Hello Windows98!"), TEXT("HelloMsg"), MB_OKCANCEL);

重新編譯後您會發現對話方塊中多了一個'取消'按鈕。如果您使用的是英文版,兩個按鈕分別是 OK & CANCEL。您可以一個一個的試。

#define MB_ICONHAND  0x00000010L
#define MB_ICONQUESTION  0x00000020L
#define MB_ICONEXCLAMATION  0x00000030L
#define MB_ICONASTERISK  0x00000040L

這些都是對話方塊中的圖示選項。可以用C語言中“|”運算子與前面所提到的六個選項中的一個結合起來,比如:

 MessageBox(NULL, TEXT("Hello Windows98!"), TEXT("HelloMsg"), MB_OKCANCEL | MB_ICONHAND);

執行上面的程式後您將會看到原先的對話方塊中多出了一個紅色的圖示,那是一個表示出錯時用的“叉叉”,這個圖示我不喜歡,我比較喜歡感嘆號,所以把程式改成:


 MessageBox(NULL, TEXT("Hello Windows98!"), TEXT("HelloMsg"), MB_OKCANCEL | MB_ICONASTERISK);

執行後您可以非常Lucky地看到對話方塊中出現了一個白底藍字的感嘆號。

就這樣,第一章的內容算是學完了。是不是有股非常非常強烈的,想要寫應用的衝動?不要著急,慢慢來。下一章簡單瞭解一下Unicode。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章