Windows API一日一练(2)使用应用程序句柄
生活随笔
收集整理的這篇文章主要介紹了
Windows API一日一练(2)使用应用程序句柄
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ??從上面這段程序就可以看到,_tWinMain是應用程序的入口函數,這里是使用它的宏,定義在tchar.h頭文件里,為什么要這樣作宏定義的呢?由于Windows的應用程序要適應UNICODE和以前單字符的應用程序,由于Windows這兩個API的定義是不一樣的,如下:
UNICODE的定義: ?#define _tWinMain?? wWinMain 單字符的定義: ?#define _tWinMain?? WinMain 只要經過這樣的宏定義后,就可以適應不同字符寬度的函數接口了。由于我是采用UNICODE編譯的,所以這里使用wWinMain函數定義,下面再把它的定義找出來,如下: int WINAPI wWinMain( ??? HINSTANCE hInstance, ??? HINSTANCE hPrevInstance, ??? LPWSTR lpCmdLine, ??? int nShowCmd ); 這里要詳細地解釋一下函數wWinMain的參數,它有四個參數。 hInstance是當前應用程序的實例句柄,一般用來區分不同的資源使用。 hPrevInstance是以前Win98使用的句柄,在Win2000以后的操作系統里都是空值NULL。 lpCmdLine是命令行參數,比如你在Windows開始菜單里運行一個程序,并添加參數在后面,就會傳遞給應用程序,后面再詳細討論。 nShowCmd是窗口的顯示方式,比如最大化顯示,最小化顯示,還是正常顯示。 Windows運行程序時,是通過運行庫里的啟動代碼來調用wWinMain函數,它是在啟動文件里如下調用: #ifdef WPRFLAG ??????????? mainret = wWinMain( #else?/* WPRFLAG */ ??????????? mainret = WinMain( #endif?/* WPRFLAG */ ?????????????????????? (HINSTANCE)&__ImageBase, ?????????????????????? NULL, ?????????????????????? lpszCommandLine, ?????????????????????? StartupInfo.dwFlags & STARTF_USESHOWWINDOW ???????????? ???????????? StartupInfo.wShowWindow ??????????????????????? : SW_SHOWDEFAULT ????????????????????? ); 這就是操作系統傳遞給應用程序的值,現在就來演示使用第一個參數hInstance。 請看下面的例子: #001?#include "stdafx.h" #002?#include "First.h" #003? #004?// #005?//第一個例子。 #006?//蔡軍生?2007/07/03 #007?// #008?int APIENTRY _tWinMain(HINSTANCE hInstance, #009?????????????????????? HINSTANCE hPrevInstance, #010?????????????????????? LPTSTR??? lpCmdLine, #011?????????????????????? int?????? nCmdShow) #012?{ #013???? UNREFERENCED_PARAMETER(hPrevInstance); #014???? UNREFERENCED_PARAMETER(lpCmdLine);? #015???? UNREFERENCED_PARAMETER(nCmdShow); #016? #017???? //使用應用程序句柄 #018???? const int MAXSIZE_APPBUF = 256; #019???? TCHAR wAppTile[MAXSIZE_APPBUF]; #020??? LoadString(hInstance,IDS_APP_TITLE,wAppTile,MAXSIZE_APPBUF); #021? #022???? //獲取桌面的句柄。 #023???? HWND hWnd = GetDesktopWindow(); #024? #025???? //顯示一行消息。 #026???? MessageBox(hWnd, _T("第一個應用程序"), wAppTile, MB_OK);?? #027? #028???? // #029???? return 0; #030?}? ? ? ?這個例子是在前面的基礎上修改的,主要添加了使用應用程序實例句柄。在第19行里定義了一個保存應用程序標題的緩沖區,然后在第20行里調用函數LoadString從應用程序的資源里加載字符串,它的第一個參數就使用到hInstance句柄。因此應用程序句柄是表示程序在資源上唯一的標識符。
轉載于:https://blog.51cto.com/smallfish0315/1070697
總結
以上是生活随笔為你收集整理的Windows API一日一练(2)使用应用程序句柄的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Response.Write()方法响应
- 下一篇: hmlt ul li 水平排列