當前位置:編程學習大全網 - 編程語言 - 在c++中窗口最大化、最小化、關閉的程序代碼是什麽?

在c++中窗口最大化、最小化、關閉的程序代碼是什麽?

//我寫了壹個C++ windows應用程序框架代碼,供參考,此源代碼屬函數編程,不涉及MFC類庫,可以保證程序的靈活性,

//時間有限,部分代碼的註釋可能不太精確,畢盡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值

} //主函數結束//////////////////////////////

//////////////////////////////////定義自定義函數//////////////////////////////////////////////////////////////////

//這只是壹個框架程序所以還沒有自定義函數

//////////////////////////////程序源代碼結束//////////////////////////////////////////////////////////////////

  • 上一篇:編程時間精度
  • 下一篇:求通信信號平均線角度的公式
  • copyright 2024編程學習大全網