Win32學習筆記
作者: 姜學哲()
教材: Windows程序設計(第五版)北京大學出版社
[美]Charles Petzold 著
北京博彥科技發展有限公司 譯 ¥:160
參考資料:
Windows 應用程序設計原理_方法_技術(因為是PDF格式的EBOOK,作者等不詳)
新編Windows API 參考大全 電子工業出版社 ¥:98
C++ Primer(第三版)中國電力出版社 Stanley B.Lippman & Josee Lajoie 著 潘愛民 張麗 譯 ¥:128
TURBO C實用大全 徐金梧 楊德斌 徐科 編 ¥:42
環境: windows2000 server + Internet Explorer 6.0 + DirectX7.0 + Visual C++ 6.0
圖們江計算機程序編制小組(chulsoft.xiloo.com)版權所有,轉載請說明出處
------------------------------------------------------------------
【第一章 開始】
爽完了"星際爭霸"后不禁有些遺憾。如果星際的地圖再大一點,人口限制再多一點就好了。地圖尺寸應該是8人地圖的81倍,人口應該是6000。目前來說這是不可能的事情。沒有任何一臺機子能承受得了。我是想指揮一場真正的戰爭。就像想當年劉鄧大軍和國民黨軍打仗一樣。其實星際已經很優秀了,我不能再要求什么。
說到這里,我想到了我們最常用的操作系統Windows系列。我去過很多論壇,包括Linux論壇在內,絕大多數網友們非常喜歡罵微軟公司和該公司的所有產品。以前我也罵過,后來意識到了自己的錯誤后,再也不罵了。有很多人用著盜版的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<windows.h>
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
具體的含義我不知道??赡芎竺鏁性敿氈v解吧。
#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
這些都是對話框中的圖標選項??梢杂肅語言中“|”運算符與前面所提到的六個選項中的一個結合起來,比如:
MessageBox(NULL, TEXT("Hello Windows98!"), TEXT("HelloMsg"), MB_OKCANCEL | MB_ICONHAND);
運行上面的程序后您將會看到原先的對話框中多出了一個紅色的圖標,那是一個表示出錯時用的“叉叉”,這個圖標我不喜歡,我比較喜歡感嘆號,所以把程序改成:
MessageBox(NULL, TEXT("Hello Windows98!"), TEXT("HelloMsg"), MB_OKCANCEL | MB_ICONASTERISK);
運行后您可以非常Lucky地看到對話框中出現了一個白底藍字的感嘆號。
就這樣,第一章的內容算是學完了。是不是有股非常非常強烈的,想要寫應用軟件的沖動?不要著急,慢慢來。下一章簡單了解一下Unicode。
原文轉自:http://www.anti-gravitydesign.com