日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Win32窗口编程基础知识——主函数

發(fā)布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32窗口编程基础知识——主函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

雖然說編程重要的是思想,用什么語言實現(xiàn)都是雞肋,但是并不是說你對一個語言一點也不會看一遍就可以精通,我的經(jīng)歷就是以前只注意C/C++編程,對其他語言完全不看,發(fā)現(xiàn)最后自己練個窗口圖形都寫不出來,只能無聊的控制臺程序。其實從控制臺到Win32窗口的過度也不是一個簡單的過程,很多知識,也學(xué)要我們一點一滴的積累。

所有的程序都有一個主函數(shù)作為程序的入口,在控制臺中我們都熟悉了,main這樣的函數(shù),但是在Win32窗口中這個函數(shù)的名字是WinMain函數(shù)的固定形式如下。

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE prevhInst,LPSTR cmd,int show)

{

??????????? return 0;

}

這個主函數(shù)會接受四個參數(shù),不要被形式嚇到,實際上這四個參數(shù)是我們運行程序的時候系統(tǒng)分配的。從右到左講解。

show 是一個int類型,表示顯示的形式,比如是顯示,還是隱藏,是全屏幕,還是最小化。當然了,在程序中我們不會直接使用數(shù)字而是使用宏命令,這個參數(shù)的值可以是如下:

SW_HIDE:隱藏窗口并且激活另外一個窗口。

  SW_MINIMIZE:最小化指定的窗口,并且激活在系統(tǒng)表中的頂層窗口。

  SW_RESTORE:激活并顯示窗口。如果窗口已經(jīng)最小化或最大化,系統(tǒng)將以恢復(fù)到原來的尺寸和位置顯示窗口(與SW_SHOWNORMAL相同)。

  SW_SHOW:激活一個窗口并以原來的尺寸和位置顯示窗口。

  SW_SHOWMAXIMIZED:激活窗口并且將其最大化。

  SW_SHOWMINIMIZED:激活窗口并將其最小化(以圖標顯示)。

  SW_SHOWMINNOACTIVE:將一個窗口顯示為圖標。激活窗口維持活動狀態(tài)。

  SW_SHOWNA:以窗口的當前狀態(tài)顯示窗口。激活窗口保持活動狀態(tài)。

  SW_SHOWNOACTIVATE:以窗口的最近一次的尺寸和位置顯示窗口。激活窗口維持激活狀態(tài)。

  SW_SHOWNORMAL:激活并顯示窗口。如果窗口最大化或最小化,系統(tǒng)將其恢復(fù)到原來的尺寸和位置

實際上這些變量是開始定義好的值,比如 #define SW_SHOWNA 1234,當然了,這些名字要比數(shù)字好記憶的多。

上一個參數(shù),是表示傳遞的命令,其類型是LPSTR,首先介紹下LPSTR。不要以為又遇到了一個新類型,其實這只是一個宏定義,#define LPSTR string *? (這里只是舉個例子為了更明白,實際可能不是這么簡單定義的。)說白了,這表示一個指針,指向一個以'/0'結(jié)尾的字符串,比如”asfasasf“,指向這個字符串的指針就可以看作是LPSTR

L代表Local P代表Point(指針)STR代表String.有時候我們還會發(fā)現(xiàn)一個LPWSTR的變量,其實大致相同,只不過WSTR代表WString。這個參數(shù)傳遞了一個命令,如果現(xiàn)在不知道什么意思可以過會再看整體的例子。

剩下的兩個參數(shù)都是HINSTANCE這個變量是一個進程的句柄(Win32和Win16的程序都可以使用此變量),實際上他也是一個無符號的長整型,比如 #define HINSTANCE unsigned long int 句柄就是一個進程的標志,比如我們的電腦中運行了很多進程,操作系統(tǒng)如何找到他們呢?給每個進程一個標號,比如1號,2號,。。。這樣可以通過標號找到進程。hInst是當前進程的標號,prehInst是該程序的上一個進程的標號,因為一個程序可以被運行多次。但是在Win32程序中這個標號通常永遠為null

下面我們舉一個例子,比如文本文件。你要打開D:\test.txt這個文本文件,操作系統(tǒng)打開文文件的程序叫做notepade.exe雙擊文本文件的圖標,由于是.txt結(jié)尾,操作系統(tǒng)選擇讓notepade.exe打開,操作系統(tǒng)為進程分配一個標號,即前兩個參數(shù)由操作系統(tǒng) 填充,接下來是第三個參數(shù),在本例中是"D\:test.txt"指向該字符串的指針,高所notpade.exe打開哪個文件,最后是第四個參數(shù),有系統(tǒng)選定顯示為什么樣的窗口。當我們打開了這個文件之后還想打開第二個名為text2.txt的文件,此時仍然運行notepade.exe程序,產(chǎn)生一個進程由系統(tǒng)分配ID第二個句柄參數(shù)怎是上一次打開test.txt進程的ID,即上一個進程的ID此時運行。

參數(shù)講完了,我們還剩下一點沒介紹,再往左是WInMain函數(shù)名,這個不用說了再往左是WINAPI,可能很多人會對這種形式感到迷惑,平時我們看到的函數(shù)返回類型后面加的不都是函數(shù)名嗎,這樣算什么啊。其實真正的函數(shù)還包括函數(shù)調(diào)用的方式,比如_cdecl? _stdcall等等,不同的調(diào)用在處理函數(shù)的時候才用的策略不同。我們只要知道其實WINAPI也是一個宏命令,聲明為 #define WINAPI _stdcall(在windows.h中生命)也就是說該函數(shù)的調(diào)用方式為_stdcall特點是參數(shù)是從右向左賦值的,也就是操作系統(tǒng)先賦值參數(shù)show 再cmd...最終賦值給第一個參數(shù)。

這樣,一個Win32中的主函數(shù)的基本講解就算完成了。

轉(zhuǎn)載于:https://my.oschina.net/u/269978/blog/56145

總結(jié)

以上是生活随笔為你收集整理的Win32窗口编程基础知识——主函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。