Windows API一日一練(2)使用應用程式控制代碼

來源:互聯網
上載者:User
 從上面這段程式就可以看到,_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"
#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控制代碼。因此應用程式控制代碼是表示程式在資源上唯一的標識符。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.