初級 Windows API C++語言版 編程(3)
2019-09-06 23:33:36
供稿:網(wǎng)友
由于上一章的文章中我沒有向大家介紹清楚初試化的具體實(shí)現(xiàn),造成很多的讀者無法很好的理解,這是我的失誤。本人現(xiàn)在補(bǔ)上,請大家原諒。
一個(gè)Windows API程序的初始化主要分為為四個(gè)部分。1、窗口類的定義2、窗口類的注冊3、創(chuàng)建窗口實(shí)例4、顯示窗口
①窗口類定義
在Windows應(yīng)用程序中,窗口類定義了窗口的形式與功能。它的定義過程通過給窗口類數(shù)據(jù)結(jié)構(gòu)WNDCLASS賦值來完成,這個(gè)數(shù)據(jù)結(jié)構(gòu)包含窗口類的各個(gè)屬性。窗口類的定義常用到以下幾個(gè)函數(shù),在這里一一介紹。
1、LoadIcon函數(shù)
LoadIcon函數(shù)的作用是在應(yīng)用程序中加載一個(gè)窗口圖標(biāo)。它的原型為:
HICON LoadIcon
(
HINSTANCE hInstance, //圖標(biāo)資源所在的模塊句柄;
//如果使用NULL,就會使用系統(tǒng)預(yù)定義的圖標(biāo)
LPCTSTR lpIconName //圖標(biāo)資源名或系統(tǒng)預(yù)定義的圖標(biāo)標(biāo)識名
)
2、LoadCursor函數(shù)
LoadCursor函數(shù)作用是在應(yīng)用程序中加載一個(gè)窗口光標(biāo)。它的原型為:
HCURSOR LoadCursor
(
HINSTANCE hInstance,//光標(biāo)資源所在的模塊句柄;
//如果使用NULL,它就會使用系統(tǒng)預(yù)定義的光標(biāo)
LPCTSTR lpCursorName//圖標(biāo)資源名或系統(tǒng)預(yù)定義的光標(biāo)標(biāo)識名
)
3、GetStockObject函數(shù)
應(yīng)用程序通過調(diào)用GetStockObject函數(shù)來獲取系統(tǒng)提供的背景刷,它的原型為:
HBRUSH GetStockObject(int nBrush);
//nBrush 為系統(tǒng)提供的背景刷標(biāo)示名
②注冊窗口類
Windows系統(tǒng)本身提供部分預(yù)定義的窗口類,我們也可以自己定義窗口類,窗口類必須先注冊后使用。窗口類注冊使用的函數(shù)是RegisterClass()實(shí)現(xiàn)。它的原型為:
RegisterClass(&wndclass);
//wndclass為窗口的類結(jié)構(gòu)(前面第二篇文章已經(jīng)介紹過了)
③創(chuàng)建窗口
窗口注冊之后就要把它實(shí)例化,簡單的說就是創(chuàng)建一個(gè)窗口的實(shí)例。它是由函數(shù)CreateWindow()實(shí)現(xiàn),函數(shù)的原型為:
HWND CreateWindow
(
LPCTSTR lpszClassName,//窗口實(shí)例的類的名字
LPCTSTR lpszTitle, //窗口標(biāo)題名
DWORD dwStyle, //新創(chuàng)建的窗口的樣式(后面將會詳細(xì)介紹)
int x, //窗口左上角的橫坐標(biāo)
int y, //窗口左上角的縱坐標(biāo)
int nWidth, //窗口的寬度
int nHeight, //窗口的高度
HWND hwndParent, //該窗口的父窗口的句柄
HMENU hMenu, //窗口主菜單句柄
HINSTANCE hInstance, //創(chuàng)建窗口的應(yīng)用程序當(dāng)前句柄
LPVOID lpParam //指向一個(gè)傳遞給窗口的參數(shù)值的指針
)
那么窗口的樣式有哪些呢?
標(biāo)識 說明
WS_BORDER 創(chuàng)建一般帶邊框的窗口
WS_CAPTION 創(chuàng)建一個(gè)帶標(biāo)題欄的窗口
WS_HSCROLL 創(chuàng)建一個(gè)帶水平滾動條的窗口
WS_MAXIMIZEBOX 創(chuàng)建一個(gè)帶最大化按鈕的窗口
WS_MINIMIZEBOX 創(chuàng)建一個(gè)帶最小化按鈕的窗口
WS_OVERLAPPED 創(chuàng)建一個(gè)帶邊框和標(biāo)題欄的窗口
WS_OVERLAPPEDWINDOW 創(chuàng)建一個(gè)帶邊框、標(biāo)題欄、系統(tǒng)菜單及最大化、最小化按鈕的窗口
WS_POPUP 創(chuàng)建一彈出式窗口
WS_POPUPWINDOW 創(chuàng)建一帶邊框和系統(tǒng)菜單的彈出式窗口
WS_SYSMENU 創(chuàng)建一帶系統(tǒng)菜單的窗口
WS_VSCROLL 創(chuàng)建一帶垂直滾動條的窗口
當(dāng)然為了實(shí)現(xiàn)具有多種風(fēng)格的窗口,WINAPI提供了“|”來表示并(∪)的意思。例如我們要實(shí)現(xiàn)一個(gè)即具有垂直滾動條又具有水平滾動條的彈出式窗口時(shí)可以輸入:WS_BSCOLL|WS_VSCROLL|WM_POPUP
④顯示窗口
以上的操作均由函數(shù)實(shí)現(xiàn),顯示窗口當(dāng)然也不例外。窗口類的顯示由ShowWindow和UpdateWindow函數(shù)實(shí)現(xiàn)。應(yīng)用程序調(diào)用ShowWindow函數(shù)在屏幕上顯示窗口,其形式為:
BOOL ShowWindow(hwnd,nCmdShow)
//其中hwnd為窗口句柄,nCmdShow為窗口顯示形式標(biāo)識
nCmdShow共有六個(gè)可選值
標(biāo)識 說明
SW_HIDE 隱藏窗口
SW_SHOWNORMAL 顯示并激活窗口
SW_SHOWMINIMIZE 顯示并最小化窗口
SW_SHOWMAXIMIZE 顯示并最大化窗口
SW_SHOWNOACTIVE 顯示但不激活窗口
SW_RESTORE 恢復(fù)窗口原來的位置及尺寸
在窗口顯示之后,應(yīng)用程序應(yīng)使用UpdateWindow函數(shù)更新并繪制用戶區(qū),并發(fā)出WM_PAINT消息。它的形式為:
BOOL UpdataWindow(hwnd);
//hwnd為窗口句柄
(未完待續(xù))