第二章 Windows API

1.常用的Windows數據類型

#include <windows.h>
#include <stdio.h>

/* ************************************
* 功能	Windows 數據類型演示
**************************************/
int WINAPI WinMain(
            HINSTANCE hInstance,
            HINSTANCE hPrevInstance,
            LPSTR lpCmdLine,
            int nCmdShow
            )
{
    //定義字符串
    LPSTR szString = "Windows data type, string.";
    //定義字符數組
    CHAR lpString[120];//要大於szString的長度
    //定義DWORD類型的數據
    DWORD dwMax = 0xFFFFFFFF;
    DWORD dwOne = 0x1;
    //定義INT類型的數據
    INT iMax = 0xFFFFFFFF;
    INT iOne = 0x1;
    
    //顯示字符串
    MessageBox(NULL,szString,"LPSTR",MB_OK);
    //複製內存,將字符串複製到數組中(包括NULL結束符)
    CopyMemory(lpString, szString,lstrlen(szString)+1);
    //顯示覆制的字符串
    MessageBox(NULL,lpString,"CHAR[]",MB_OK);

    //比較DWORD並顯示結果
    if(dwMax>dwOne)
    {
        MessageBox(NULL,"DWORD類型的數據 OxFFFFFFFF > 0x1","DWORD",MB_OK);
    }
    //比較INT並顯示結果
    if(iMax<iOne)
    {
        MessageBox(NULL,"INT類型的數據 OxFFFFFFFF < 0x1","INT",MB_OK);
    }
    return 0;
}

2.Windows API的功能分類

#include <windows.h>

/* 全局變量 */
HINSTANCE hinst; 

/* 函數聲明 */ 
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int); 
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); 

/* ************************************
* 功能	顯示一個窗口
**************************************/
int WINAPI WinMain(HINSTANCE hinstance, 
                   HINSTANCE hPrevInstance, 
                   LPSTR lpCmdLine, 
                   int nCmdShow) 
{     
    WNDCLASSEX wcx;         // 窗口類
    HWND hwnd;              //  窗口句柄     
    MSG msg;                // 消息
    BOOL fGotMessage;       // 是否成功獲取消息
    hinst = hinstance;      // 應用程序實例句柄,保存爲全局變量

    // 填充窗口類的數據結構
    wcx.cbSize = sizeof(wcx);          // 結構體的大小
    wcx.style = CS_HREDRAW | 
        CS_VREDRAW;                    // 樣式:大小改變時重繪界面 
    wcx.lpfnWndProc = MainWndProc;     // 窗口消息處理函數 
    wcx.cbClsExtra = 0;                // 不使用類內存
    wcx.cbWndExtra = 0;                // 不使用窗口內存 
    wcx.hInstance = hinstance;         // 所屬的應用程序實例句柄 
    wcx.hIcon = LoadIcon(NULL, 
        IDI_APPLICATION);              // 圖標:默認
    wcx.hCursor = LoadCursor(NULL, 
        IDC_ARROW);                    // 光標:默認
    wcx.hbrBackground = (HBRUSH)GetStockObject( 
        WHITE_BRUSH);                  // 背景:白色
    wcx.lpszMenuName =  NULL;          // 菜單:不使用
    wcx.lpszClassName = "MainWClass";  // 窗口類名 
    wcx.hIconSm = (HICON)LoadImage(hinstance, // 小圖標
        MAKEINTRESOURCE(5),
        IMAGE_ICON, 
        GetSystemMetrics(SM_CXSMICON), 
        GetSystemMetrics(SM_CYSMICON), 
        LR_DEFAULTCOLOR); 

    // 註冊窗口類
    if(!RegisterClassEx(&wcx))
    {
        return 1;
    }

    // 創建窗口 
    hwnd = CreateWindow( 
        "MainWClass",        // 窗口名
        "CH 2-3",            // 窗口標題 
        WS_OVERLAPPEDWINDOW, // 窗口樣式  
        CW_USEDEFAULT,       // 水平位置X:默認 
        CW_USEDEFAULT,       // 垂直位置Y:默認
        CW_USEDEFAULT,       // 寬度:默認
        CW_USEDEFAULT,       // 高度:默認 
        (HWND) NULL,         // 父窗口:無 
        (HMENU) NULL,        // 菜單:使用窗口類的菜單 
        hinstance,           // 應用程序實例句柄 
        (LPVOID) NULL);      // 窗口創建時數據:無 

    if (!hwnd) 
    {
        return 1; 
    }

    // 顯示窗口 
    ShowWindow(hwnd, nCmdShow); 
    UpdateWindow(hwnd); 
    
    // 消息循環
    while (
        (fGotMessage = GetMessage(&msg, (HWND) NULL, 0, 0)) != 0 
        && fGotMessage != -1) 
    { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    } 
    return msg.wParam; 

} 

/* ************************************
* MainWndProc
* 功能	窗口消息處理函數,
        對所有的消息都使用默認處理函數
**************************************/
LRESULT CALLBACK MainWndProc(HWND hwnd,
                             UINT uMsg,
                             WPARAM wParam,
                             LPARAM lParam
                             )
{
    switch (uMsg) 
    { 
        case WM_DESTROY: 
            ExitThread(0);
            return 0; 
        default: 
            return DefWindowProc(hwnd, uMsg, wParam, lParam); 
    } 
}

3.獲取系統目錄信息,並存儲到文件中

#include <windows.h>

/* ************************************
* 功能	獲取系統目錄信息,並存儲到文件中
**************************************/
int main(int argc, TCHAR argv[])
{
    //文件句柄
    HANDLE hFile;

    DWORD dwWritten;
    //字符數組,用於存儲系統目錄
    TCHAR szSystemDir[MAX_PATH];
    //獲取系統目錄
    GetSystemDirectory(szSystemDir,MAX_PATH);

    //創建文件systemroot.txt
    hFile = CreateFile("systemroot.txt",
        GENERIC_WRITE,
        0,NULL,CREATE_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL);
    //判斷文件是否創建成功
    if(hFile != INVALID_HANDLE_VALUE)
    {
        //將系統目錄系統信息寫入文件
        if(!WriteFile(hFile,szSystemDir,lstrlen(szSystemDir),&dwWritten,NULL))
        {
            return GetLastError();
        }
    }
    //關閉文件,返回。
    CloseHandle(hFile);
    return 0;
}

4.Unicode和多字節

#include <windows.h>

/* ************************************
* 功能	Unicode與多字節編碼演示
**************************************/
int WINAPI WinMain(
			HINSTANCE hInstance,
			HINSTANCE hPrevInstance,
			LPSTR lpCmdLine,
			int nCmdShow
			)
{
    //定義LPWSTR類型的寬字符串
	LPWSTR szUnicode = L"This is a Unicode String;";
    //定義LPSTR類型的窄字符串
    LPSTR szMutliByte = "This is not a Unicode String;";
    //定義LPTSTR類型的自適就字符串
    LPTSTR szString = TEXT("This string is Unicode or not depends on the option.");

    //使用W版本的API函數,以寬字符串爲參數。
    MessageBoxW(NULL,szUnicode,L"<字符編碼1>",MB_OK);
    //使用A版本的API函數,以窄字符串爲參數。
    MessageBoxA(NULL,szMutliByte,"<字符編碼2>",MB_OK);
    //使用自適用的API函數,採用相適應的字符串類型爲參數。
    MessageBox(NULL,szString,TEXT("<字符編碼3>"),MB_OK);

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