//時間有限,部分代碼的註釋可能不太精確,畢盡windows編程太過精深,不是壹兩句話可以說清楚的,最好在編譯器上使用,
//這樣比較容易看明白,已經使用VC 6.0 驗證。
//////////////////////////基本註釋////////////////////////////////////////////
// 紛雪繁沙 2009.05.31 c++ visual c++ 6.0 windows xp windows.cpp
//////////////////////////編寫預處理命/////////////////////////////////////////
#include <windows.h> // windows頭文件
//////////////////////////聲明全局變量/////////////////////////////////////////
//這只是壹個框架程序所以還沒有全局變量
//////////////////////////聲明自定義函數///////////////////////////////////////
//這只是壹個框架程序所以還沒有自定義函數
//函數的定義壹般放在末尾
//////////////////////////自定義類的聲明定義///////////////////////////////////
//這只是壹個框架程序所以還沒有自定義類
//習慣類的聲明定義同時進行
//////////////////////////編寫消息處理函數/////////////////////////////////////
//函數名可自定義,但形式固定//////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd, //指定窗口句柄
UINT msg, //消息代碼
WPARAM wparam, //消息附加參數
LPARAM lparam)//消息附加參數
//下面是消息處理函數的函數體,由使用者根據需要編寫具體內容
{
PAINTSTRUCT ps; //聲明PAINTSTRUCT結構體結構體,包含用於繪制窗口客戶區的信息
HDC hdc; //聲明壹個窗口設備描述表,供調用
//響應消息////////////////////////////////////////////////////////////////////////
//這個switch語句是整個應用程序的中心,我們編寫的絕大多數代碼,都是通過響應消息來工作
switch(msg)
//常見系統消息有以下幾種
//WN_ACTIVATE 當窗口被激活或者成為壹個焦點時傳遞
//WM_CLOSE 當窗口關閉時傳遞
//WM_CREATE 當窗口第壹次創建時傳遞
//WM_DESTROY 當窗口可能要被破壞時傳遞
//WM_MOVE 當窗口移動時傳遞
//WM_MOUSEMOVE 當移動鼠標時傳遞
//WM_KEYUP 當松開壹個鍵時傳遞
//WM_KEYDOWN 當按鈕壹下鍵時傳遞
//WM_TIMER 當發生定時程序事件時傳遞
//WM_USER 允許傳遞消息
//WM_PAINT 當壹個窗口需重畫時傳遞
//WM_QUIT 當Windows應用程序最後結束時傳遞
//WM_SIZE 當壹個窗口改變大小時傳遞
{
case WM_CREATE:// 當窗口第壹次創建時傳遞
{
//這裏根據需要編寫對應消息的處理代碼
} break;//離開語句
case WM_PAINT: //當壹個窗口需要重畫時
{
hdc =BeginPaint(hwnd,&ps);//準備指定的窗口來重繪並將窗口設備描述表放到壹個結構體中
EndPaint(hwnd,&ps);//釋放BeginPaint所占用的資源
} break;//離開語句
case WM_DESTROY: //當窗口可能要被破壞時傳遞
{
PostQuitMessage(0);//發送壹個WM_QUIT消息給消息隊列
} break;//離開語句
default://如果消息沒有相對應的處理,使用默認的處理方式
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
return (0);
}//消息處理函數結束////////////////////////////////////////////////////////////////////
//////////////////////////主函數////////////////////////////////////////////////////////
//主函數參數由系統傳入//////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,//windows為應用程序生成的實例句柄
HINSTANCE hprevinstance,//此參數已經過時,不再使用
LPSTR lpcmdline,//程序命令行參數
int ncmdshow)//打開主程序窗口的方式
{
//主函數函數體//////////////////////////////////////////////////////////////////////////
//聲明所需數據////////////
WNDCLASSEX winclass; // 聲明窗口類
HWND hwnd; // 聲明窗口句柄標識
MSG msg; // 聲明消息結構體標識
//定義窗口類///////////////
winclass.cbSize = sizeof(WNDCLASSEX);//窗口類占用內存的大小
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;//窗口屬性,常用以下幾種:
//CS_HREDRAW 若移動或改變了窗口寬度,則刷新整個窗口
//CS_VREDRAW 若移動或改變了窗口高度,則刷新整個窗口
//CS_OWNDC 為該類中每個窗口分配壹個單值的設備描述表
//CS_DBLCLKS 當用戶雙擊鼠標時向窗口程序發送壹個雙擊的信息,光標位於屬於該類的窗口中
//CS_PARENTDC 在母窗口中設定壹個子窗口的剪切區,以便於子窗口能夠畫在母窗口中
//CS_SAVEBITS 在壹個窗口中保存用戶圖像,以便於在該窗口被遮住、移動時不必每次刷新屏幕
//CS_NOCLOSE 禁止系統菜單上的關閉命令
winclass.lpfnWndProc = WindowProc;//窗口消息回調函數的指針,此函數從系統獲得消息
winclass.cbClsExtra = 0; //用於保存附加的運行時間,壹般默認0
winclass.cbWndExtra = 0; //用於保存附加的運行時間,壹般默認0
winclass.hInstance = hinstance; //應用程序生成的實例句柄
winclass.hIcon = LoadIcon(NULL,IDI_HAND);//應用程序圖標
//IDI_APPLICATION 默認圖標
//IDI_ASTERISK 星號
//IDI_EXCLAMATION 驚嘆號
//IDI_HAND 手形圖標
//IDI_QUESTION 問號
//IDI_WINLOGO Windows徽標
winclass.hCursor = LoadCursor(NULL,IDC_WAIT );//應用程序光標,
//IDC_ARROW 標準箭頭
//IDC_APPSTARTING 標準箭頭和小沙漏標
//IDC_CROSS 橫標線
//IDC_IBEAM 文本I型標
//IDC_NO 帶正斜線的圓圈
//IDC_SIZEALL 四向箭頭
//IDC_SIZENESW 指向東北-西南方向的雙向箭頭
//IDC_SIZENS 指向南北方向的雙向箭頭
//IDC_SIZENWSE 指向東南-西北方向的雙向箭頭
//IDC_SIZEWE 指向東西方向的雙向箭頭
//IDC_UPARROW 垂直方向的箭頭
//IDC_WAIT 沙漏
winclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);//窗口背景
//BLACK_BRUSH 黑色畫筆
//WHITE_BRUSH 白色畫筆
//GRAY_BRUSH 灰色畫筆
//LTGRAY_BRUSH 淡灰色畫筆
//DKGRAY_BRUSH 深灰色畫筆
//HOLLOW_BRUSH 空心畫筆
//NULL_BRUSH 無效(NULL)畫筆
//BLACK_PEN 黑色筆
//WHITE_PEN 白色筆
//NULL_PEN 無效(NULL)筆
winclass.lpszMenuName = NULL;//菜單資源
winclass.lpszClassName = "WINCLASS01";//窗口類名
winclass.hIconSm = LoadIcon(NULL, IDI_QUESTION);//窗口小圖標
//IDI_APPLICATION 默認圖標
//IDI_ASTERISK 星號
//IDI_EXCLAMATION 驚嘆號
//IDI_HAND 手形圖標
//IDI_QUESTION 問號
//IDI_WINLOGO Windows徽標
//註冊窗口類////////////////////////////
if (!RegisterClassEx(&winclass))
return(0);
//創建窗口//////////////////////////////
if (!(hwnd = CreateWindowEx(WS_EX_TOPMOST, //窗口的高級特性WS_EX_TOPMOST
"WINCLASS01", //窗口類名
"最基本的C++ 窗口程序", //窗口標題
WS_OVERLAPPEDWINDOW | WS_VISIBLE,//窗口式樣
//窗口式樣有
//WS_POPUP 彈出式窗口
//WS_OVERLAPPED 帶有標題欄和邊界的重疊式窗口,類似WS_TILED類型
//WS_OVERLAPPEDWINDOW 具有WS_OVERLAPPED、WS_CAPTION、WS_SYSMENU、
// 和WS_THICKFRAME、WS_MAXIMIZEBOXWS_MINIMIZEBOX的重疊式窗口
//WS_VISIBLE 開始就可見的窗口
//WS_SYSMENU 標題欄上有窗口菜單的窗口
//WS_BORDER 有細線邊界的窗口
//WS_CAPTION 有標題欄的窗口(包括WS_BORDER樣式)
//WS_ICONIC 開始就最小化的窗口,類似WS_MINIMIZE樣式
//WS_MAXIMIZE 開始就最大化的窗口
//WS_MAXIMIZEBOX 具有最大化按鈕的窗口。不能和WS_EX_CONGTEXTHELP樣式合並。WS_SYSMENU也必須指定
//MS_MINIMIZE 開始就最小化的窗口,類似WS_ICONIC樣式
//WS_MINIMIZEOBX 具有最小化按鈕的窗口。不能和WS_EX_CONGTEXITHELP樣式合並。WS_SYSMENU也必須指定
//WS_POPUPWINDOW 帶有WS_BORDER、WS_POPUP和WS_SYSMENU類型的彈出式窗口
//WS_SIZEBOX 壹個窗口邊界可以變化,和WS_THICKFRAME類型相同
//WS_HSCROLL 帶有水平滾動條的窗口
//WS_VSCROLL 帶有垂直滾動條的窗口
100,100, //窗口左上角坐標,默認值CW_USEDEFALT
600,400, //窗口大小,默認值CW_USEDEFALT
NULL, //父窗口句柄
NULL, //菜單句柄
hinstance,//應用程序實例句柄
NULL))) //高級特征
//顯示窗口/////////////////////////
ShowWindow(hwnd,//窗口句柄
SW_SHOWNORMAL);//打開主程序窗口的方式,主要有以下幾種:
//SW_SHOWNORMAL 激活並顯示壹個窗口。將它恢復到原始尺寸和位置。第壹次顯示該窗口時,應用程序將指定該標誌。
//SW_SHOW 激活壹個窗口,並按當前尺寸和位置顯示
//SW_HIDE 隱藏壹個窗口,並激活另外壹個窗口
//SW_MAXIMIZE 將指定的窗口最大化
//SW_MINIMIZE 將指定的窗口最小化
//SW_RESTORE 激活並顯示壹個窗口,將它恢復到原始尺寸和位置。恢復為最小化窗口時,應用程序必須指定該標誌。
//SW_SHOWMAXIMIZED 激活壹個窗口,並以最大化窗口顯示
//SW_SHOWMINIMIZED 激活壹個窗口,並以最小化窗口顯示
//SW_SHOWMINNOACTIVE 以最小化窗口方式顯示壹個窗口,激活的窗口依然保持激活的狀態
//SW_SHOWNA 以當前狀態顯示壹個窗口,激活的窗口依然保持激活的狀態
//SW_SHOWONACTIVATE 以上壹次窗口尺寸和位置來顯示窗口,激活的窗口依然保持激活的狀態
//刷新窗口////////////////////////
UpdateWindow(hwnd);//刷新窗口
//從消息列隊中取出消息,只有收到WM_QUIT消息時,GetMessage才返回0,循環終止/////////////
while(GetMessage(&msg,//消息結構體,用於保存獲得的消息
NULL,//指定所接收消息對應的窗口句柄
0,0))//指定所接收消息的最小值和最大值
{
// 把虛擬鍵消息轉換成字符消息
TranslateMessage(&msg);
// 把應用程序消息回傳系統
DispatchMessage(&msg);
}
return(msg.wParam);//返回WM_QUIT消息的wParam值
} //主函數結束//////////////////////////////
//////////////////////////////////定義自定義函數//////////////////////////////////////////////////////////////////
//這只是壹個框架程序所以還沒有自定義函數
//////////////////////////////程序源代碼結束//////////////////////////////////////////////////////////////////