HINSTANCE

HINSTANCE

HINSTANCE 是句柄型數據類型,相當於裝入了記憶體的資源的ID。HINSTANCE對應的資源是instance.句柄實際上是一個 無符號長整數。在win32下與HMODULE是相同的東西,在Win32下還存在主要是因為win16程式使用HINSTANCE來區別task。argc指示程式啟動時命令行參數的個數,argv則包含具體的參數字元串。下面的程式將把程式的名稱(IDS_APP_TITLE)信息顯示在訊息視窗中。hInstance是作業系統分配給程式自身實例的句柄.句柄是用來標識實例的,句柄是實例指針的索引. 通過句柄能找到實例的地址.

API程式

HINSTANCEHINSTANCE

HINSTANCE常出現在 API 程式:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

{

// 這裡放 API 主程式內容

if(!InitWindowsClass(hInstance))

return FALSE;

if(!InitWindows(hInstance,nCmdShow))

return FALSE;

ShowWindow(hWndMain,nCmdShow);

....

}

BOOL InitWindowsClass(HINSTANCE hInstance)

{

WNDCLASS wndclass;

....

wndclass.hIcon=LoadIcon(hInstance,"abcd.ico");

wndclass.hInstance=hInstance;

.....

}

//子程式:

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)

{

HWND hWnd;

....

hWnd=CreateWindow( "Windows Fill",str,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0,CW_USEDEFAULT,0,NULL,NULL, hInstance, NULL );

....

}

區別

程式使用HINSTANCE來區別task。

Handle 是代表系統的核心對象,如檔案句柄,執行緒句柄,進程句柄。

HMODULE 是代表應用程式載入的模組,win32系統下通常是被載入模組的線性地址。

HINSTANCE 在win32下與HMODULE是相同的東西,在Win32下還存在主要是因為win16

程式使用HINSTANCE來區別task。

HWND 是視窗句柄

熟悉C編程的人都知道main函式帶有2個參數:argc和argv,完整的main函式定義是:int main(int argc, char *argv[])。argc指示程式啟動時命令行參數的個數,argv則包含具體的參數字元串。

如果有程式叫“hello.exe”,直接啟動時,argc=1, argv=hello.exe。

如果以“hello.exereadme.txt”的形式啟動,argc=2, argv=hello.exe, argv=readme.txt

通過這兩個參數,程式可以獲知自身在啟動時的命令行信息。

而在WinMain函式中,帶有4個參數,分別是:hInstance, hPrevInstance, lpCmdLine, nShowCmd。今天就探討hInstance的含義。

hInstance是程式的當前實例的句柄。在Windows這樣的多任務作業系統中,一個程式可以同時運行多個實例。不同的實例間需要彼此區別,句柄就是幹這個的。

我們想辦法把句柄指示的信息顯示出來,用LoadString函式,格式為:

int LoadString(

HINSTANCE hInstance,

UINT uID,

LPTSTR lpBuffer,

int nBufferMax

);

其中第2個參數uID,表示裝載(Load)的是第幾個信息。下面的程式將把程式的名稱(IDS_APP_TITLE)信息顯示在訊息視窗中。

// second.cpp : 定義應用程式的入口點。

//

//

//第2個例子

//吳新2008/01/06

#include "stdafx.h"

#include "second.h"

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

const int BUFSIZE=256;

TCHAR wAppTitle[BUFSIZE];

//初始化全局字元串

LoadString(hInstance, IDS_APP_TITLE, wAppTitle, BUFSIZE);

//獲取桌面句柄

HWND hWnd = GetDesktopWindow();

//將wAppTitle顯示在訊息視窗中

MessageBox(hWnd, wAppTitle,_T("第2個例子"), MB_OK);

return 0;

}

程式運行後將顯示如下的視窗:

補充:

hInstance是作業系統分配給實例的指針. 程式根據hInstance訪問其相應的記憶體空間

hInstance是作業系統分配給程式自身實例的句柄.句柄是用來標識實例的,句柄是實例指針的索引. 通過句柄能找到實例的地址.

HINSTANCE hInstance;是應用程式的實例句柄

獲取方法 HINSTANCE AfxGetInstanceHandle( );

或者AfxGetApp( );

得到一個CWINAPP類的指針,其中有該句柄的成員

nCmdShow,你有SDK經驗就知道,它是主視窗的狀態,也就是WinMain(...)的參數之一

相關搜尋

熱門詞條

聯絡我們