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;
}