windows函數 MessageBox

來源:互聯網
上載者:User

從Windows 1.0到Windows 3.1的16位Windows中,MessageBox函數位於動態連結程式庫USER.EXE。在Windows 3.1軟體開發套件的WINDOWS.H中,MessageBox函數定義如下:

int WINAPI MessageBox (HWND, LPCSTR, LPCSTR, UINT) ;        

注意,函數的第二個、第三個參數是指向常數字串的指標。當編譯連結一個Win16程式時,Windows並不處理MessageBox呼叫。程式.EXE檔案中的表格,允許Windows將該程式的呼叫與USER中的MessageBox函數動態連結起來。

32位的Windows(即所有版本的Windows NT,以及Windows 95和Windows 98)除了含有與16位相容的USER.EXE以外,還含有一個稱為USER32.DLL的動態連結程式庫,該動態連結程式庫含有32位使用者介面函數的進入點,包括32位的MessageBox。

這就是Windows支援Unicode的關鍵:在USER32.DLL中,沒有32位MessageBox函數的進入點。實際上,有兩個進入點,一個名為MessageBoxA(ASCII版),另一個名為MessageBoxW(寬字元版)。用字串作參數的每個Win32函數都在作業系統中有兩個進入點!幸運的是,您通常不必關心這個問題,程式中只需使用MessageBox。與TCHAR表標頭檔一樣,每個Windows表標頭檔都有我們需要的技巧。

下面是MessageBoxA在WINUSER.H中定義的方法。這與MessageBox早期的定義很相似:

WINUSERAPI int WINAPI MessageBoxA (HWND hWnd, LPCSTR lpText,                            LPCSTR lpCaption, UINT uType) ;        

下面是MessageBoxW:

WINUSERAPI int WINAPI MessageBoxW (HWND hWnd, LPCWSTR lpText,                                   LPCWSTR lpCaption, UINT uType) ;        

注意,MessageBoxW函數的第二個和第三個參數是指向寬字元的指標。

如果需要同時使用並分別匹配ASCII和寬字元函數呼叫,那麼您可在Windows程式中明確地使用MessageBoxA和MessageBoxW函數。但大多數程式寫作者將繼續使用MessageBox。根據是否定義了UNICODE,MessageBox將與MessageBoxA或MessageBoxW一樣。在WINUSER.H中完成這一技巧時,程式相當瑣碎:

#ifdef UNICODE        #define MessageBox  MessageBoxW        #else        #define MessageBox  MessageBoxA        #endif        

這樣,如果定義了UNICODE標識符,那麼程式中所有的MessageBox函數呼叫實際上就是MessageBoxW函數;否則,就是MessageBoxA函數。

執行該程式時,Windows將程式中不同的函數呼叫與不同的Windows動態連結程式庫的進入點連結。雖然只有少數例外,但是,在Windows 98中不能執行Unicode版的Windows函數。雖然這些函數有進入點,但通常返回錯誤碼。應用程式注意這些返回的錯誤並採取一些合理的動作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.