Windows數據類型與API函數(MessageBox函數 和 ReadFile函數)

所有的Windows數據類型都是大寫的

所有的Windows API函數 大量地使用了Windows數據類型


這裏以這兩個函數爲例,它們的返回值和參數都大量地使用了Windows數據類型

所有的Windows API函數都有W版和A版(後面會學到)

先來看MessageBoxW函數

四個參數:

1. 表示Message窗口的所有者 , 如果填 NULL 就代表它的所有者是桌面

2. 填消息的內容,類型是 LPCWSTR

3. 填消息框的標題,類型是 LPCWSTR

4. MB_OK表示一個按鈕

紅色圈出的地方是自己加上去的內容





而把第一個參數設成NULL是一個不好的選擇,應該把它設置成當前窗口   所以這裏我們找到

//
//   函數:  InitInstance(HINSTANCE, int)
//
//   目的:  保存實例句柄並創建主窗口
//
//   註釋: 
//
//        在此函數中,我們在全局變量中保存實例句柄並
//        創建和顯示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // 將實例句柄存儲在全局變量中

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

這邊,把 
   HWND hWnd;
變成全局變量,然後把 hWnd代入第一個參數  就ok啦


下面是ReadFile函數

功能是 讀取文件內容

參數含義:

1. 這個文件的句柄

2. 緩存區,都出來的內容就在這裏(是個字符數組)    因爲不可能一次性全部都出來,我們要指定每次讀多少個

3. 因爲不可能一次性全部都出來,我們要指定每次讀多少個

4. 實際讀取的字節數

5. NULL

首先,我們要用 CreateFile去打開這個文件   這又是一個API函數

#include <stdio.h>
#include <Windows.h>
#define BUF_SIZE 256
int main()
{
	HANDLE hFileRead;
	DWORD nIn;
	CHAR buffer[BUF_SIZE];

	hFileRead = CreateFile("aaa.txt",
		GENERIC_READ,//表示我們去讀這個文件
		FILE_SHARE_READ,//指定如何共享這個文件,這裏是共享讀
		NULL,//文件的安全屬性,我們用NULL表示默認的安全屬性
		OPEN_EXISTING,//代表打開已經存在的,而不是創建新的文件
		FILE_ATTRIBUTE_NORMAL,//文件的屬性,這裏是常規屬性
		NULL);//要指定模板,這裏沒有模板
		

	//打開文件,得到一個句柄,而打開文件可能會出錯,我們下面要檢查這個句柄,如果是無效句柄,就是出錯了
	//那麼發生了什麼錯誤,可以通過一個API函數(GatLastError),來獲取錯誤信息
	if (hFileRead == INVALID_HANDLE_VALUE)//如果這個句柄是一個無效的句柄,就說明文件打開出錯
	{
		printf("Cannot open file   Error: %x\n", GetLastError());
		system("pause");
		return -1;
	}

	//如果沒有出錯,我們就可以讀取這個文件
	while (ReadFile(hFileRead, buffer, BUF_SIZE, &nIn, NULL) && nIn > 0)
	{
		printf("%s\n", buffer);
	}

	CloseHandle(hFileRead);
	system("pause");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章