Win32窗口编程基础知识——主函数
2019獨角獸企業重金招聘Python工程師標準>>>
雖然說編程重要的是思想,用什么語言實現都是雞肋,但是并不是說你對一個語言一點也不會看一遍就可以精通,我的經歷就是以前只注意C/C++編程,對其他語言完全不看,發現最后自己練個窗口圖形都寫不出來,只能無聊的控制臺程序。其實從控制臺到Win32窗口的過度也不是一個簡單的過程,很多知識,也學要我們一點一滴的積累。
所有的程序都有一個主函數作為程序的入口,在控制臺中我們都熟悉了,main這樣的函數,但是在Win32窗口中這個函數的名字是WinMain函數的固定形式如下。
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE prevhInst,LPSTR cmd,int show)
{
??????????? return 0;
}
這個主函數會接受四個參數,不要被形式嚇到,實際上這四個參數是我們運行程序的時候系統分配的。從右到左講解。
show 是一個int類型,表示顯示的形式,比如是顯示,還是隱藏,是全屏幕,還是最小化。當然了,在程序中我們不會直接使用數字而是使用宏命令,這個參數的值可以是如下:
SW_HIDE:隱藏窗口并且激活另外一個窗口。
SW_MINIMIZE:最小化指定的窗口,并且激活在系統表中的頂層窗口。
SW_RESTORE:激活并顯示窗口。如果窗口已經最小化或最大化,系統將以恢復到原來的尺寸和位置顯示窗口(與SW_SHOWNORMAL相同)。
SW_SHOW:激活一個窗口并以原來的尺寸和位置顯示窗口。
SW_SHOWMAXIMIZED:激活窗口并且將其最大化。
SW_SHOWMINIMIZED:激活窗口并將其最小化(以圖標顯示)。
SW_SHOWMINNOACTIVE:將一個窗口顯示為圖標。激活窗口維持活動狀態。
SW_SHOWNA:以窗口的當前狀態顯示窗口。激活窗口保持活動狀態。
SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置顯示窗口。激活窗口維持激活狀態。
SW_SHOWNORMAL:激活并顯示窗口。如果窗口最大化或最小化,系統將其恢復到原來的尺寸和位置
實際上這些變量是開始定義好的值,比如 #define SW_SHOWNA 1234,當然了,這些名字要比數字好記憶的多。
上一個參數,是表示傳遞的命令,其類型是LPSTR,首先介紹下LPSTR。不要以為又遇到了一個新類型,其實這只是一個宏定義,#define LPSTR string *? (這里只是舉個例子為了更明白,實際可能不是這么簡單定義的。)說白了,這表示一個指針,指向一個以'/0'結尾的字符串,比如”asfasasf“,指向這個字符串的指針就可以看作是LPSTR
L代表Local P代表Point(指針)STR代表String.有時候我們還會發現一個LPWSTR的變量,其實大致相同,只不過WSTR代表WString。這個參數傳遞了一個命令,如果現在不知道什么意思可以過會再看整體的例子。
剩下的兩個參數都是HINSTANCE這個變量是一個進程的句柄(Win32和Win16的程序都可以使用此變量),實際上他也是一個無符號的長整型,比如 #define HINSTANCE unsigned long int 句柄就是一個進程的標志,比如我們的電腦中運行了很多進程,操作系統如何找到他們呢?給每個進程一個標號,比如1號,2號,。。。這樣可以通過標號找到進程。hInst是當前進程的標號,prehInst是該程序的上一個進程的標號,因為一個程序可以被運行多次。但是在Win32程序中這個標號通常永遠為null
下面我們舉一個例子,比如文本文件。你要打開D:\test.txt這個文本文件,操作系統打開文文件的程序叫做notepade.exe雙擊文本文件的圖標,由于是.txt結尾,操作系統選擇讓notepade.exe打開,操作系統為進程分配一個標號,即前兩個參數由操作系統 填充,接下來是第三個參數,在本例中是"D\:test.txt"指向該字符串的指針,高所notpade.exe打開哪個文件,最后是第四個參數,有系統選定顯示為什么樣的窗口。當我們打開了這個文件之后還想打開第二個名為text2.txt的文件,此時仍然運行notepade.exe程序,產生一個進程由系統分配ID第二個句柄參數怎是上一次打開test.txt進程的ID,即上一個進程的ID此時運行。
參數講完了,我們還剩下一點沒介紹,再往左是WInMain函數名,這個不用說了再往左是WINAPI,可能很多人會對這種形式感到迷惑,平時我們看到的函數返回類型后面加的不都是函數名嗎,這樣算什么啊。其實真正的函數還包括函數調用的方式,比如_cdecl? _stdcall等等,不同的調用在處理函數的時候才用的策略不同。我們只要知道其實WINAPI也是一個宏命令,聲明為 #define WINAPI _stdcall(在windows.h中生命)也就是說該函數的調用方式為_stdcall特點是參數是從右向左賦值的,也就是操作系統先賦值參數show 再cmd...最終賦值給第一個參數。
這樣,一個Win32中的主函數的基本講解就算完成了。
轉載于:https://my.oschina.net/u/269978/blog/56145
總結
以上是生活随笔為你收集整理的Win32窗口编程基础知识——主函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 个人出行不便损失保险是什么意思
- 下一篇: PyQt v4 - Python Bin