windows編程快速入門

sinnap 發布於 2015-3-17  遊戲/數碼

易語言、編程原理

工具/原料

易語言開發環境
windows程序設計教材

方法/步驟

動態連結 

Windows運作機制的核心是一個稱作「動態連結」的概念。Windows提供了應用程式豐富

的可呼叫函數,大多數用於實作其使用者接口和在視訊顯示器上顯示文字和圖形。這些函數

採用動態連結庫(Dynamic Linking Library,DLL)的方式撰寫。這些動態連結庫是些

具 有 .DLL 或 者 有 時 是 .EXE 擴 展 名 的 文 件 , 在 Windows 98 中 通 常 位 於

\WINDOWS\SYSTEM子目錄中,在Windows NT中通常位於\WINNT\SYSTEM和

\WINNT\SYSTEM32子目錄中。

在早期,Windows的主要部分僅通過三個動態連結庫實作。這代表了Windows的三個主要

子系統,它們被稱作Kernel、User和GDI。當子系統的數目在Windows最近版本中增多時,

大多數典型的Windows程序產生的函數呼叫仍對應到這三個模塊之一。Kernel(日前由16

位的KRNL386.EXE和32位的KERNEL32.DLL實現)處理所有在傳統上由作業系統核心

處理的事務-內存管理、文件I/O和多任務管理。User(由16位的USER.EXE和32位的

USER32.DLL實作)指使用者接口,實作所有窗口運作機制。GDI(由16位的GDI.EXE整理編撰:Defoe.Tu [email protected]

和32位的GDI32.DLL實作)是一個圖形設備接口,允許程序在螢幕和印表機上顯示文字和

圖形。

Windows 98支持應用程式可使用的上千種函數呼叫。每個函數都有一個描述名稱,例如

CreateWindow。該函數(如您所猜想的)為程序建立新窗口。所有應用程式可以使用的

Windows函數都在表頭文件里預先聲明過。

在Windows程序中,使用Windows函數的方式通常與使用如strlen等C語言連結庫函數的

方式相同。主要的區別在於C語言連結庫函數的機械碼連結到您的程序代碼中,而Windows

函數的程序代碼在您程序執行文件外的DLL中。

當您執行Windows程序時,它通過一個稱作「動態連結」的過程與Windows相接。一個

Windows的.EXE文件中有使用到的不同動態連結庫的參考數據,所使用的函數即在那些動

態連結庫中。當Windows程序被加載到內存中時,程序中的呼叫被指向DLL函數的入口。

如果該DLL不在內存中,就把它加載到內存中。

當您連結Windows程序以產生一個可執行文件時,您必須連結程序開發環境提供的特定「引

用連結庫(import library)」。這些引用連結庫包含了動態連結庫名稱和所有Windows函

數呼叫的引用信息。連結程序使用該信息在.EXE文件中建立一個表格,在加載程序時,

Windows使用它將呼叫轉換為Windows函數。

表頭文件 

HELLOMSG.C以一個前置處理器指示命令開始,實際上在每個用C編寫的Windows程序

的開頭都可看到:

#include <windows.h>

WINDOWS.H是主要的含入文件,它包含了其它Windows表頭文件,這些表頭文件的某些

也包含了其它表頭文件。這些表頭文件中最重要的和最基本的是:

WINDEF.H 基本型態定義。

WINNT.H 支持Unicode的型態定義。

WINBASE.H Kernel函數。

WINUSER.H 使用者接口函數。

WINGDI.H 圖形設備接口函數。

這些表頭文件定義了Windows的所有數據型態、函數呼叫、數據結構和常數標識符,它們

是Windows文件中的一個重要部分。使用Visual C++ Developer Studio的Edit菜單中的

Find in Files搜索這些表頭文件非常方便。您還可以在Developer Studio中打開這些表頭

文件並直接閱讀它們。

Windows表頭文件類型 

正如您在第一章所看到的那樣,一個Windows程序包括表頭文件WINDOWS.H。該文件包

括許多其它表頭文件,包括WINDEF.H,該文件中有許多在Windows中使用的基本型態定整理編撰:Defoe.Tu [email protected]

義,而且它本身也包括WINNT.H。WINNT.H處理基本的Unicode支持。

WINNT.H的前面包含C的表頭文件CTYPE.H,這是C的眾多表頭文件之一,包括wchar_t

的定義。WINNT.H定義了新的數據型態,稱作CHAR和WCHAR:

typedef char CHAR ;

typedef wchar_t WCHAR ; // wc

當您需要定義8位字符或者16位字符時,推薦您在Windows程序中使用的數據型態是

CHAR和WCHAR。WCHAR定義後面的注釋是匈牙利標記法的建議:一個基於WCHAR數

據型態的變量可在前面附加上字母wc以說明一個寬字符。

WINNT.H表頭文件進而定義了可用做8位字符串指針的六種數據型態和四個可用做const

8位字符串指針的數據型態。這裡精選了表頭文件中一些實用的說明數據型態語句:

typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;

typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;

前綴N和L表示「near」和「long」,指的是16位Windows中兩種大小不同的指標。在Win32

中near和long指標沒有區別。

類似地,WINNT.H定義了六種可作為16位字符串指針的數據型態和四種可作為const 16

位字符串指針的數據型態:

typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;

typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;

至此,我們有了數據型態CHAR(一個8位的char)和WCHAR(一個16位的wchar_t),

以及指向CHAR和WCHAR的指標。與TCHAR.H一樣,WINNT.H將TCHAR定義為一般的

字符類型。如果定義了標識符UNICODE(沒有底線),則TCHAR和指向TCHAR的指標就

分別定義為WCHAR和指向WCHAR的指標;如果沒有定義標識符UNICODE,則TCHAR

和指向TCHAR的指標就分別定義為char和指向char的指標:

#ifdef UNICODE

typedef WCHAR TCHAR, * PTCHAR ;

typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ;

typedef LPCWSTR LPCTSTR ;

#else

typedef char TCHAR, * PTCHAR ;

typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ;

typedef LPCSTR LPCTSTR ;

#endif

如果已經在某個表頭文件或者其它表頭文件中定義了TCHAR數據型態,那麼WINNT.H和

WCHAR.H表頭文件都能防止其重複定義。不過,無論何時在程序中使用其它表頭文件時,

都應在所有其它表頭文件之前包含WINDOWS.H。

WINNT.H表頭文件還定義了一個宏,該宏將L添加到字符串的第一個引號前。如果定義了整理編撰:Defoe.Tu [email protected]

UNICODE標識符,則一個稱作 __TEXT的宏定義如下:

#define __TEXT(quote) L##quote

如果沒有定義標識符UNICODE,則像這樣定義__TEXT宏:

#define __TEXT(quote) quote

此外, TEXT宏可這樣定義:

#define TEXT(quote) __TEXT(quote)

這與TCHAR.H中定義_TEXT宏的方法一樣,只是不必操心底線。我將在本書中使用這個宏

的TEXT版本。

這些定義可使您在同一程序中混合使用ASCII和Unicode字符串,或者編寫一個可被ASCII

或Unicode編譯的程序。如果您希望明確定義8位字符變量和字符串,請使用CHAR、

PCHAR(或者其它),以及帶引號的字符串。為明確地使用16位字符變量和字符串,請使

用WCHAR、PWCHAR,並將L添加到引號前面。對於是8位還是16位取決於UNICODE標

識符的定義的變量或字符串,要使用TCHAR、PTCHAR和TEXT宏。

總體結構 

進行Windows程序設計,實際上是在進行一種對象導向的程序設計(OOP)。這一點在

Windows中使用得最多的對象上表現最為明顯。這種對象正是Windows之所以命名為

「Windows」的原因,它具有人格化的特徵,甚至可能會在您的夢中出現,這就是那個叫

做「窗口」的東西。

桌面上最明顯的窗口就是應用程式窗口。這些窗口含有顯示程序名稱的標題列、菜單甚至可

能還有工具列和滾動條。另一類窗口是對話框,它可以有標題列也可以沒有標題列。

裝飾對話框表面的還有各式各樣的按鍵、單選按鈕、複選框、清單方塊、滾動條和文字輸入

區域。其中每一個小的視覺對象都是一個窗口。更確切地說,這些都稱為「子窗口」或「控

件窗口」或「子窗口控制項」。

作為對象,使用者會在螢幕上看到這些窗口,並通過鍵盤和滑鼠直接與它們進行交互操作。

更有趣的是,程序寫作者的觀點與使用者的觀點極其類似。窗口以「消息」的形式接收窗口

的輸入,窗口也用消息與其它窗口通訊。對訊息的理解將是學習如何寫作Windows程序所

必須越過的障礙之一。

這有一個Windows的消息範例:我們知道,大多數的Windows程序都有大小合適的應用程整理編撰:Defoe.Tu [email protected]

序窗口。也就是說,您能夠通過滑鼠拖動窗口的邊框來改變窗口的大小。通常,程序將通過

改變窗口中的內容來響應這種大小的變化。您可能會猜測(並且您也是正確的),是Windows

本身而不是應用程式在處理與使用者重新調整窗口大小相關的全部雜亂程序。由於應用程式

能改變其顯示的樣子,所以它也「知道」窗口大小改變了。

應用程式是如何知道使用者改變了窗口的大小的呢?由於程序寫作者習慣了往常的文字模

式程序,作業系統沒有設置將此類消息通知給使用者的機制。問題的關鍵在於理解Windows

所使用的架構。當使用者改變窗口的大小時,Window給程序發送一個消息指出新窗口的大

小。然後程序就可以調整窗口中的內容,以響應大小的變化。

「Windows給程序發送消息。」我們希望讀者不要對這句話視而不見。它到底表達了什麼意

思呢?我們在這裡討論的是程序代碼,而不是一個電子郵件系統。作業系統怎麼給程序發送

消息呢?

其實,所謂「Windows給程序發送消息」,是指Windows呼叫程序中的一個函數,該函數

的參數描述了這個特定消息。這種位於Windows程序中的函數稱為「窗口消息處理程序」。

無疑,讀者對程序呼叫作業系統的做法是很熟悉的。例如,程序在打開磁碟文件時就要使用

有關的系統呼叫。讀者所不習慣的,可能是作業系統呼叫程序,而這正是Windows對象導

向架構的基礎。

程序建立的每一個窗口都有相關的窗口消息處理程序。這個窗口消息處理程序是一個函數,

既可以在程序中,也可以在動態連結庫中。Windows通過呼叫窗口消息處理程序來給窗口

發送消息。窗口消息處理程序根據此消息進行處理,然後將控制傳回給Windows。

更確切地說,窗口通常是在「窗口類別」的基礎上建立的。窗口類別標識了處理窗口消息的

窗口消息處理程序。使用窗口類別使多個窗口能夠屬於同一個窗口類別,並使用同一個窗口

消息處理程序。例如,所有Windows程序中的所有按鈕均依據同一個窗口類別。這個窗口

類別與一個處理所有按鈕消息的窗口消息處理程序(位於Windows的動態連結庫中)聯結。

在對象導向的程序設計中,對象是程序與數據的組合。窗口是一種對象,其程序是窗口消息

處理程序。數據是窗口消息處理程序保存的信息和Windows為每個窗口以及系統中那個窗

口類別保存的信息。

窗口消息處理程序處理給窗口發送消息。這些消息經常是告知窗口,使用者正使用鍵盤或者

滑鼠進行輸入。這正是按鍵窗口知道它被「按下」的奧妙所在。在窗口大小改變,或者窗口

表面需要重畫時,由其它消息通知窗口。

Windows程序開始執行後,Windows為該程序建立一個「消息隊列」。這個消息隊列用來

存放該程序可能建立的各種不同窗口的消息。程序中有一小段程序代碼,叫做「消息循環」,

用來從隊列中取出消息,並且將它們發送給相應的窗口消息處理程序。有些消息直接發送給

窗口消息處理程序,不用放入消息隊列中。

如果您對這段Windows架構過於簡略的描述將信將疑,就讓我們去看看在實際的程序中,

窗口、窗口類別、窗口消息處理程序、消息隊列、消息循環和窗口消息是如何相互配合的。

這或許會對您有些幫助。

HELLOWIN程序 

建立一個窗口首先需要註冊一個窗口類別,那需要一個窗口消息處理程序來處理窗口消息。

處理窗口消息對每個Windows程序都帶來了些負擔。程序3-1所示的HELLOWIN程序中整整理編撰:Defoe.Tu [email protected]

個做的事情差不多就是料理這些事情。

程序3-1 HELLOWIN

HELLOWIN.C

/*------------------------------------------------------------------------

HELLOWIN.C -- Displays "Hello, Windows 98!" in client area

(c) Charles Petzold, 1998

-----------------------------------------------------------------------*/

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

static TCHAR szAppName[] = TEXT ("HelloWin") ;

HWND hwnd ;

MSG msg ;

WNDCLASwndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra = 0 ;

wndclass.cbWndExtra = 0 ;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuNam = NULL ;

wndclass.lpszClassName= szAppName ;

if (!RegisterClass (&wndclass))

{

MessageBox ( NULL, TEXT ("This program requires Windows NT!"), 整理編撰:Defoe.Tu [email protected]

szAppName, MB_ICONERROR) ;

return 0 ;

}

hwnd = CreateWindow( szAppName, // window class name

TEXT ("The Hello Program"), // window caption

WS_OVERLAPPEDWINDOW, // window style

CW_USEDEFAULT,// initial x position

CW_USEDEFAULT,// initial y position

CW_USEDEFAULT,// initial x size

CW_USEDEFAULT,// initial y size

NULL, // parent window handle

NULL, // window menu handle

hInstance, // program instance handle

NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,

LPARAM lParam)

{

HDC hdc ;

PAINTSTRUCT ps ;

RECT rect ;

switch (message) 整理編撰:Defoe.Tu [email protected]

{

case WM_CREATE:

PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;

return 0 ;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_DESTROY:

PostQuitMessage (0) ;

return 0 ;

}

return DefWindowProc (hwnd, message, wParam, lParam) ;

}

程序建立一個普通的應用程式窗口,如圖3-1所示。在窗口顯示區域的中央顯示「Hello,

Windows 98!」。如果安裝了音效卡,那麼您還可以聽到相應的朗讀聲音。

通盤考量 

實際上,每一個Windows程序代碼中都包括HELLOWIN.C程序的大部分。沒人能真正記住

此程序的全部寫法;通常,Windows程序寫作者在開始寫一個新程序時總是會複製一個現

有的程序,然後再做相應的修改。您可以按此習慣自由使用本書附帶光碟中的程序。

上面提到,HELLOWIN將在其窗口的中央顯示字符串。這種說法不是完全正確的。文字實

際顯示在程序顯示區域的中央,它在圖3-1中是標題列和邊界範圍內的大片白色區域。這區

別對我們來說很重要;顯示區域就是程序自由繪圖並且向使用者顯示輸出結果的窗口區域。

如果您認真思考一下,將會發現雖然只有80行程序代碼,這個窗口卻令人驚訝地具有許多

功能。您可以用滑鼠按住標題列,在螢幕上移動窗口;可以按住大小邊框,改變窗口的大小。整理編撰:Defoe.Tu [email protected]

在窗口大小改變時,程序自動地將「Hello, Windows 98!」字符串重新定位在顯示區域的

中央。您可以按最大化按鈕,放大HELLOWIN以充滿整個螢幕;也可以按最小化按鈕,將

程序縮小成一個圖示。您可以在系統菜單中執行所有選項(就是按下在標題列最左端的小圖

示);也可以從系統菜單中選擇 Close選項,或者單擊標題列最右端的關閉按鈕,或者雙擊

標題列最左端的圖標,來關閉窗口以終止程序的執行。

我們將在本章的餘下部分對此程序作一詳細的檢查。當然,我們首先要從整體上看一下。

與前兩章中的範例程序一樣,HELLOWIN.C也有一個WinMain函數,但它還有另外一個函

數,名為WndProc。這就是窗口消息處理程序。注意,在HELLOWIN.C中沒有呼叫WndProc

的程序代碼。當然,在WinMain中有對WndProc的參考,而這就是該函數要在程序開頭附

近聲明的原因。

Windows函數呼叫 

HELLOWIN至少呼叫了18個Windows函數。下面以它們在HELLOWIN中出現的次序列出

這些函數以及各自的簡明描述:

LoadIcon 加載圖標供程序使用。

LoadCursor 加載滑鼠光標供程序使用。

GetStockObject 取得一個圖形對象(在這個例子中,是取得繪製窗口背景的畫刷對象)。

RegisterClass 為程序窗口註冊窗口類別。

MessageBox 顯示消息框。

CreateWindow 根據窗口類別建立一個窗口。

ShowWindow 在螢幕上顯示窗口。

UpdateWindow 指示窗口自我更新。

GetMessage 從消息隊列中取得消息。

TranslateMessage 轉譯某些鍵盤消息。

DispatchMessage 將消息發送給窗口消息處理程序。

PlaySound 播放一個聲音文件。

BeginPaint 開始繪製窗口。

GetClientRect 取得窗口顯示區域的大小。

整理編撰:Defoe.Tu [email protected]

DrawText 顯示字符串。

EndPaint 結束繪製窗口。

PostQuitMessage 在消息隊列中插入一個「退出程序」消息。

DefWindowProc 執行內定的消息處理。

這些函數均在Platform SDK文件中說明,並在不同的表頭文件中聲明,其中絕大多數聲明

在WINUSER.H中。

大寫字母標識符 

讀者可能注意到,HELLOWIN.C中有幾個大寫的標識符,這些標識符是在Windows表頭文

件中定義的。有些標識符含有兩個字母或者三個字母的前綴,這些前綴後頭接著一個底線:

這些是簡單的數值常數。前綴指示該常數所屬的類別,如表3-1所示。

表3-1

前綴 類別

CS 窗口類別樣式

CW 建立窗口

DT 繪製文字

IDI 圖示ID

IDC 游標ID

MB 消息框

SND 聲音

WM 窗口消息

WS 窗口樣式

奉勸程序寫作者不要費力氣去記憶Windows程序設計中的數值常數。實際上,Windows中

使用的每個數值常數在表頭文件中均有相應的標識符定義。

新的數據型態 

HELLOWIN.C中的其它標識符是新的數據型態,也在Windows表頭文件中使用typedef敘整理編撰:Defoe.Tu [email protected]

述或者#define敘述加以定義了。最初是為了便於將Windows程序從原來的16位系統上移

植到未來的使用32位(或者其它)技術的作業系統上。這種作法並不如當時每個人想像的那樣

順利,但是這種概念基本上是正確的。

有時這些新的數據型態只是為了方便縮寫。例如,用於WndProc的第二個參數的UINT數據

型態只是一個unsigned int (無正負號整數),在Windows 98中,這是一個32位的值。

用於WinMain的第三個參數的PSTR數據型態是指向一個字符串的指針,即是一個char *。

其它數據型態的含義不太明顯。例如,WndProc的第三和第四個參數分別被定義為

WPARAM和LPARAM,這些名字的來源有點歷史背景:當Windows還是16位系統時,

WndProc的第三個參數被定義為一個WORD,這是一個16位的 無正負號短(unsigned

short)整數,而第四個參數被定義為一個LONG,這是一個32位有正負號長整數,從而導

致了文字「PARAM」前面加上了前置前綴「W」和「L」。當然,在32位的Windows中,

WPARAM被定義為一個UINT,而LPARAM被定義為一個LONG(這就是C中的long整數型

態),因此窗口消息處理程序的這兩個參數都是32位的值。這也許有點奇怪,因為WORD

數據型態在Windows98中仍然被定義為一種16位的 無正負號整數,因此「PARAM」前的

「W」就有點誤用了。

WndProc函數傳回一個型態為LRESULT的值,該值簡單地被定義為一個LONG。WinMain

函數被指定了一個WINAPI型態(在表頭文件中定義的所有Windows函數都被指定這種型

態),而WndProc函數被指定一個CALLBACK型態。這兩個標識符都被定義為_stdcall,

表示在Windows本身和使用者的應用程式之間發生的函數呼叫的呼叫參數傳遞方式。

HELLOWIN還使用了Windows表頭文件中定義的四種數據結構(我們將在本章稍後加以討

論)。這些數據結構如表3-2所示。

表3-2

結構 含義

MSG 消息結構

WNDCLASS 窗口類別結構

PAINTSTRUCT 繪圖結構

RECT 矩形結構

前面兩個數據結構在WinMain中使用,分別定義了兩個名為msg和wndclass的結構,後面

兩個數據結構在WndProc中使用,分別定義了ps和rect結構。

句柄簡介  

最後,還有三個大寫標識符(見表3-3),用於不同型態的「句柄」:

表3-3

標識符 含義

HINSTANCE 執行實體(程序自身)句柄

HWND 窗口句柄

HDC 設備內容句柄

句柄在Windows中使用非常頻繁。在本章結束之前,我們將遇到HICON(圖標句柄)、

HCURSOR(滑鼠光標句柄)和HBRUSH(畫刷句柄)。 整理編撰:Defoe.Tu [email protected]

句柄是一個(通常為32位的)整數,它代表一個對象。Windows中的句柄類似傳統C或者

MS-DOS程序設計中使用的文件句柄。程序幾乎總是通過呼叫Windows函數取得句柄。程

序在其它Windows函數中使用這個句柄,以使用它代表的對象。代號的實際值對程序來說

是無關緊要的。但是,向您的程序提供代號的Windows模塊知道如何利用它來使用相對應

的對象。

匈牙利表示法 

讀者可能注意到,HELLOWIN.C中有一些變量的名字顯得很古怪。如szCmdLine,它是傳

遞給WinMain的參數。

許多Windows程序寫作者使用一種叫做「匈牙利表示法」的變量命名通則。這是為了紀念

傳奇性的Microsoft程序寫作者Charles Simonyi。非常簡單,變量名以一個或者多個小寫

字母開始,這些字母表示變量的數據型態。例如,szCmdLine中的sz代表「以0結尾的字符

串」。在hInstance和hPrevInstance中的h前綴表示「句柄」;在iCmdShow中的i前綴表示

「整數」。WndProc的後兩個參數也使用匈牙利表示法。正如我在前面已經解釋過的,儘管

wParam應該更適當地被命名為uiParam(代表「無正負號整數」),但是因為這兩個參數

是使用數據型態WPARAM和LPARAM定義的,因此保留它們傳統的名字。

在命名結構變量時,可以用結構名(或者結構名的一種縮寫)的小寫作為變量名的前綴,或

者用作整個變量名。例如,在HELLOWIN. C的WinMain函數中,msg變量是MSG型態的

結構;wndclass是WNDCLASSEX型態的一個結構。在WndPmc函數中,ps是一個

PAINTSTRUCT結構,rect是一個RECT結構。

匈牙利表示法能夠幫助程序寫作者及早發現並避免程序中的錯誤。由於變量名既描述了變量

的作用,又描述了其數據型態,就比較容易避免產生數據型態不合的錯誤。

表3-4列出了在本書中經常用到的變量前綴。

表3-4

前綴 數據型態

c char或WCHAR或TCHAR

by BYTE (無正負號字符)

n short

i int

x, y int分別用作x坐標和y坐標

cx, cy int分別用作x長度和y長度;C代表「計數器」

b或f BOOL (int);f代表「旗標」

w WORD (無正負號短整數)

l LONG (長整數)

dw DWORD (無正負號長整數)

fn function(函數)

s string(字符串)

sz 以字節值0結尾的字符串

h 句柄

p 指標

注意事項

windows編程看起來枯燥乏味,只有編程才能感受快樂
windows編程一看就想睡覺,把你所知道的寫成上課筆記,分享給每一位易語言學習者。
原作者:windows程式設計師

aauto編程快速入門

快手( AAuto開發環境 ) 下載壓縮包僅 6.x MB, 綠色軟體解壓即用 - 無論個人或企業都可以永久免費 使用本軟體.快手內置AAuto標準庫,以及大量 ...
單片機快速入門

單片機快速入門

對於新手的51單片機入門介紹,及快速入門方法. 工具/原料 一塊單片機開發板 單片機書籍 方法/步驟 對於想學習單片機的新手來說,如何快速的入門是個問題.首先問 ...
如果快速入門學習第二語言

如果快速入門學習第二語言

你沒有看錯,是三月內入門,不是三個月掌握或者精通,因為速成絕無可能,只有積累才有出路,但是入門還是有點技巧的,現在我們已經被成功學洗腦了,什麼30天精通java ...
方正飛翔6.0數字版基礎功能快速入門

方正飛翔6.0數字版基礎功能快速入門

方正飛翔是方正在複合出版背景下開發的新一代的專業排版領域的設計軟體,基於新的開放的面向對象體系,可實現高度的擴展性,支持插件功能.方正飛翔6.0數字版能夠出色的 ...
Statsmodels:[2]快速入門

Statsmodels:[2]快速入門

這是Python.statsmodels系列文章的第二篇,為了讓大家快速入門,理解statsmodels工作的整個過程,我找到了一個很好的例子,在這裡介紹給大家 ...
chemdraw使用快速入門?

chemdraw使用快速入門?

對於很多剛開始學化學的人來說,chemdraw是化學學習過程中必不可少的一個學習工具,但是chemdraw全英文的菜單又讓很多人很苦惱.下面小編為大家介紹一下, ...
jQuery如何快速入門學習

jQuery如何快速入門學習

jQuery作為一種輕量級的前端框架廣受歡迎,此篇經驗主要總結了如何快速入門少走彎路. jQuery如何快速入門學習? jQuery是一款框架,我們首先需要將封 ...