當前位置:首頁 » 編程軟體 » gdi高級編程

gdi高級編程

發布時間: 2022-04-22 19:04:52

『壹』 GDI+高級編程的編輯推薦

《GDI+高級編程》是由清華大學出版社出版的。《GDI+高級編程》採用C#語言描述,面向對.NET框架有一定認識並有一定編程經驗的中高級讀書。《GDI+高級編程》也可以作為對GDI+和C#感興趣的在校師生的參考讀物。

『貳』 誰給我推薦一本關於GDI+的C#高級編程的書

《GDI+高級編程》,《GDI+圖形程序設計》,《GDI+程序設計》
http://www.amazon.cn/GDI-%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B-%E6%9D%A8%E5%BB%BA%E6%98%8C/dp/B00328IJ6O/ref=sr_1_fkmr1_1?ie=UTF8&qid=1318138888&sr=8-1-fkmr1
http://www.amazon.cn/GDI-%E5%9B%BE%E5%BD%A2%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1-%E9%92%B1%E5%BE%B7/dp/B0011ASANM/ref=sr_1_fkmr1_3?ie=UTF8&qid=1318138888&sr=8-3-fkmr1
http://www.amazon.cn/GDI-%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/dp/B0011ABUMA/ref=sr_1_fkmr1_2?ie=UTF8&qid=1318138888&sr=8-2-fkmr1

『叄』 怎麼學習api函數

API是包含在一個附加名為DLL的動態連接庫文件中的。用標準的定義來講,API就是Windows的32位應用程序編程介面,是一系列很復雜的函數,消息和結構,可以說,如果你曾經學過VC,那麼API對你來說不是什麼問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那麼可以說,學習API將是一件很辛苦的事情。 如果你打開WINDOWS的SYSTEM文件夾,你可以發現其中有很多附加名為DLL的文件。一個DLL中包含的API函數並不只是一個,數十個,API函數總共大約有110多個。如果要全部掌握!那你非下苦功不可,但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統本身自帶的API函數就可以了。我可以敢跟你說,只要你熟悉地掌握100個,那麼你的編程水平比現在高出至少要兩倍。API函數和WINDOWS具有密切的關系,如果你學會了API,首要的收獲便是對WINDOWS體系結構的認識。這個收獲是來自不易的。 如果你不依靠API會怎麼樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。很多API函數都是很長很長的。想看什麼樣子嗎?如下就是作為例子的API DdeClientTransaction函數∶
Declare Function DdeClientTransaction Lib "user32" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long
哇!這么長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續學下去。不過不要擔心,幸運的是Microsoft的設計家們為我們提供了有用的工具,這便是API
文本查看器。 通過API文本查看器,我們可以方便地查找程序所需要的函數聲明、結構類型和常數,然後將它復制到剪貼板,最後再粘貼到VB程序的代碼段中。在大多數情況下,只要我們確定了程序所需要的函數、結構和常數這三個方面後,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數了。這些是學習API最基本的常識問題,它遠遠占不到API的龐大的體系內容。今後我們把精力浪費(這絕不是浪費)在哪裡呢?那就是∶
Function SetWindowRgn Lib "user32"Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long 即,這行代碼定義了名為SetWindowRgn的函數,此函數具有一個Long型數據類型的參數,並按值傳遞(ByVal),函數執行後將返回一個Long型數據。
API函數的聲明也很類似,如,API中的SetWindowRgn 函數是這樣寫的∶Public Declare Function SetWindowRgn Lib "user32" Alias "SetWindowRgn" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Declare 語句用於在模塊級別中聲明對動態鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數的動態鏈接庫或代碼資源。也就是說,它說明的是,函數或過程從何而來的問題。
如在上例中,SetWindowRgn Lib "user32"說明 函數 SetWindowRgn 來自 user32.dll文件。主要的dll動態連接庫文件有∶
user32.dll Windows管理。生成和管理應用程序的用戶介面。GDI32.dll 圖形設備介面。產生Windows設備的圖形輸出
Kernel32.dll 系統服務。訪問操作系統的計算機資源。
注意,當DLL文件不在Windows或System文件夾中的時候,必須在函數中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數聲明中的Alias 是可選的。表示將被調用的過程在動態鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetWindowRgn" ,說明SetWindowRgn函數在User32.dll中的另外一個名稱是,
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數屬於ANSI版本。需要注意的是,不是所有的API函數都有別名.選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數名必須注意大小寫,而且不能改動。當然,在很多情況下,由於函數聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發生機會是很少的,但您有必要知道這一點。
最後提醒你一句,API聲明(包括結構、常數)必須放在窗體或模塊的"通用(General Declarations)段。
數據類型與"類型安全" [返回]API函數中使用的數據類型基本上和VB中的一樣。但作為WIN32的API函數中,不存在Integer
數據類型。另外一點是在API函數中看不到Boolean數據類型。 Variant數據類型在API函數中是以Any的形式出現,如Data As Any。盡管其含義是允許任意參數類型作為一個該API函數的參數傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數的所有類型檢查都會被關閉。這自然會給各種類型的參數調用帶來了產生錯誤的機會。

『肆』 C++教程 求個好的C++教程 下載地址

★★強烈推薦★★ 全國計算機等級考試網 http://www.zxrd.com/ncre/index.asp?ip=2011996 含歷年各級等級考試筆試真題及答案、上機真題。
全國計算機等級考試上機考試系統(超級模擬軟體)根據考試大綱、歷年命題規律以及作者的實際經驗預測考試內容。該系統以對學生進行綜合指導為原則,具有極強針對性,特別適合希望在較短時間內取得較大收獲的廣大應試考生。
本系統依據等級考試的特點提供了全真的模擬環境和全真的試題,原題命中率高達100%。在作者所輔導的學生中,應用本系統,上機通過率高達95%,滿分高達47%。本系統含100套上機真題,真正免費下載、免費注冊。(現在有些軟體或者題量太少,或者要繳費注冊。該軟體的出現真是廣大考生的福音。)全國計算機等級考試上機考試系統(超級模擬軟體)下載地址: http://www.zxrd.com/ncre/soft.asp?ip=2011996
免費注冊地址: http://www.zxrd.com/ncre/reg.asp?ip=2011996

『伍』 GDI+高級編程的目錄

第1章 .NET Framework 2.0圖形設備介面 1
1.1 GDI+Vs GDI、DirectX、OpenGL 1
1.2 Visual Studio 2005集成開發環境與Visual C# 3
1.3 System.Drawing.dll程序集 13
1.4 本章小結 14
第2章 Windows視覺樣式和WinForm基礎控制項 15
2.1 VisualStyles和ControlPaint類 15
2.1.1 視覺樣式瀏覽器 16
2.1.2 ControlPaint類 31
2.1.3 Windows導航欄控制項 34
2.2 分層窗口 42
2.2.1 分層窗口的概念 42
2.2.2 CreateParams類 44
2.2.3 使用分層窗口 46
2.3 顏色空間和拾色器 52
2.3.1 顏色空間 52
2.3.2 色彩轉換 64
2.3.3 拾色器 75
2.4 本章小結 150
第3章 GDI+與.NET創意控制項 152
3.1 不規則形狀 152
3.1.1 Circle類 153
3.1.2 Circle類型轉換器 159
3.1.3 高級衍生圖形 163
3.1.4 WaitingCircle控制項 167
3.2 坐標系統與度量單位 175
3.2.1 坐標系統 176
3.2.2 屏幕坐標與工作區坐標 179
3.2.3 度量單位 180
3.2.4 Ruler控制項 183
3.3 矩陣變換 192
3.3.1 Matrix類 192
3.3.2 矩陣的仿射變換 194
3.3.3 全局變換和局部變換 199
3.3.4 Tuner控制項 204
3.4 設計時支持 211
3.4.1 設計時框架 211
3.4.2 優化屬性網格編輯 214
3.4.3 設計器 220
3.4.4 設計器序列化 236
3.4.5 調試設計時代碼 243
3.4.6 自定義窗體設計器 244
3.5 添加音效 262
3.5.1 播放聲音 262
3.5.2 音樂播放器 264
3.5.3 控制系統音量 272
3.6 管理雙倍緩存 273
3.6.1 點陣圖雙緩存 273
3.6.2 BufferedGraphics類 278
3.7 本章小結 280
第4章 字體、文本和列印 281
4.1 字體概述 281
4.1.1 基本概念 281
4.1.2 TrueType與OpenType字體 283
4.1.3 Microsoft ClearType技術 284
4.1.4 GDI+中的字體 287
4.2 繪制格式化文本 289
4.2.1 文本修整 289
4.2.2 文本簡排 290
4.3 測量文字大小 295
4.3.1 字體規格和排版 295
4.3.2 精確測量文字大小 299
4.4 3D效果文本 301
4.4.1 陰影文本 301
4.4.2 拉伸文本 302
4.4.3 浮雕及雕刻 303
4.4.4 鏡像文本 304
4.5 沿路徑文字 305
4.5.1 中式圓形印章 305
4.5.2 按任意路徑排版 309
4.6 列印 316
4.6.1 列印概述 316
4.6.2 列印設置與列印預覽 319
4.6.3 處理頁邊距和多頁 324
4.7 本章小結 328
第5章 動畫 329
5.1 播放GIF動畫 329
5.1.1 動態GIF圖像 330
5.1.2 ImageAnimator類 333
5.2 幻燈片 335
5.2.1 淡入與淡出效果 339
5.2.2 溶解效果 341
5.2.3 收縮效果 343
5.2.4 分散效果 346
5.2.5 翻轉效果 349
5.2.6 幻燈片控制器 354
5.3 屏幕保護程序 357
5.3.1 屏保概述 358
5.3.2 肥皂泡泡屏保 359
5.4 GDI+游戲 372
5.4.1 場景控制器 373
5.4.2 處理用戶輸入 381
5.4.3 人工智慧 384
5.5 本章小結 393
第6章 分形藝術 394
6.1 分形概述 394
6.1.1 分形和分形幾何 395
6.1.2 分形藝術 398
6.1.3 分形模型 401
6.2 繪制分形圖像 405
6.2.1 L-System及其應用 406
6.2.2 美妙的復動力系統 411
6.3 本章小結 424
第7章 圖像處理 425
7.1 圖像處理概述 425
7.1.1 常見圖像格式 426
7.1.2 使用GDI+處理圖像 430
7.1.3 處理圖像Exif信息 435
7.2 圖像預處理 444
7.2.1 單像素重新著色 445
7.2.2 直方圖與直方圖均衡 454
7.2.3 圖像變換 462
7.3 鄰域運算與卷積 478
7.4 色彩混合模式 483
7.4.1 偽混合模式 484
7.4.2 可交換對稱模式 485
7.4.3 非對稱模式 491
7.4.4 其他混合模式 498
7.5 特效慮鏡 499
7.5.1 浮雕 500
7.5.2 霓虹 502
7.5.3 毛玻璃 504
7.5.4 柔和 506
7.5.5 素描 509
7.6 其他實用技術 511
7.6.1 圖層與混合 511
7.6.2 僅操作選區 515
7.6.3 平滑與羽化選區 518
7.6.4 由Region重構GraphicsPath對象 522
7.7 本章小結 525
附錄一 GDI+特性速查 526
附錄二 .NET精簡版提供的GDI+特性 538參考文獻 544

『陸』 高分懸賞visual c++編程題

long factorial(int m) //用於求階乘
{
if(m==0||m==1)
return 1;
else return m*factorial(m-1);
}
long forSum(int n) //用於求階乘之和
{
int i=0;
long y=0;
for(i=1;i<=n;i++)
{
y+=factorial(i);
}
return y;
}
#include <stdio.h>
int main()
{
long y=0;
int n=0;
printf("請輸入一個 n:");
scanf("%d",&n);
printf("y=%d\n",forSum(n));
printf("n=%d\n",n);
return 0;
}

第二題:
int weiShu(int x) //用於判斷數x是幾位數
{
int flag=0;
do
{
x=x/10;
flag++;
}while(x!=0);
return flag;
}
#include <stdio.h>
{
int flag=0,x=0,i=0;
int sum=0;
printf("請輸入一個數 x=");
scanf("%d",&x);
flag=weiShu(x);
for(i=1;i<=flag;i++)
{
sum+=x%10;
x=x/10;
}
printf("%d各個位上數字之和是%d\n",x,sum);
}

『柒』 C# 學習 高級

自定義控制項的方法在你有的那些「基礎的」書里沒說么……
那稍微深點的么就是《C#高級編程》
這本書里講的很少但是把自定義控制項的原理和大概的流程說清楚了
要跟著書上說的自己寫例子查資料才行
至於專門講怎麼做自定義控制項的書我就不清楚了
祝你好運……

『捌』 游戲編程

學習游戲編程最好是有系統的學習方式,有老師帶領會高效得多。

當下互聯網行業發展迅速,與之相關的產業大多發展都很好,游戲設計的前景自然也是相當不錯的。一個游戲問世要經歷很多環節,劇本設計,原畫創作,場景建模,但核心部分還是編程語言開發。

主要學的內容如下:

1.游戲程序設計:C++程序設計入門;基本數據類型和輸入輸出;流程式控制制語句;數組、指針和引用、函數;程序結構和書寫規;范結構體和聯合體、類;繼承與多態;異常處理與程序調試。

2.演算法與數據結構:演算法分析;數據結構;基本演算法;STL的概念與使用;靜態庫與動態庫;XML庫的使用。

3.Win32程序設計:Windows程序入門;Windows消息;GDI繪圖游戲工具與MFC;網路編程基礎。

4.游戲數學和智能應用:游戲中的坐標系;矢量、矩陣;幾何碰撞;物理模擬;人工智慧與尋路演算法。

5.2D游戲技術與應用:2D游戲技術概論;游戲地圖系統;GUI系統;戰斗系統設計;任務系統;優秀的聲音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。

互聯網行業目前還是最熱門的行業之一,學習IT技能之後足夠優秀是有機會進入騰訊、阿里、網易等互聯網大廠高薪就業的,發展前景非常好,普通人也可以學習。

想要系統學習,你可以考察對比一下開設有相關專業的熱門學校,好的學校擁有根據當下企業需求自主研發課程的能力,能夠在校期間取得大專或本科學歷,中博軟體學院、南京課工場、南京北大青鳥等開設相關專業的學校都是不錯的,建議實地考察對比一下。

祝你學有所成,望採納。

『玖』 解釋下VB里的API函數及作用

什麼是API

首先,有必要向大家講一講,什麼是API。所謂API本來是為C和C++程序員寫的。API說來說去,就是一種函數,他們包含在一個附加名為DLL的動態連接庫文件中。用標準的定義來講,API就是Windows的32位應用程序編程介面,是一系列很復雜的函數,消息和結構,它使編程人員可以用不同類型的編程語言編制出的運行在Windows95和Windows NT操作系統上的應用程序。可以說,如果你曾經學過VC,那麼API對你來說不是什麼問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那麼可以說,學習API將是一件很辛苦的事情。

如果你打開WINDOWS的SYSTEM文件夾,你可以發現其中有很多附加名為DLL的文件。一個DLL中包含的API函數並不只是一個,數十個,甚至是數百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統本身自帶的API函數就可以了。但,在其中還應當拋開掉同VB本身自有的函數重復的函數。如,VB
的etAttr命令可以獲得文件屬性,SetAttr可以設置文件屬性。對API來講也有對應的函數
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那麼你的編程水平比現在高出至少要兩倍。盡管人們說VB和WINDOWS具有密切的關系,但我認為,API更接近
WINDOWS。如果你學會了API,首要的收獲便是對WINDOWS體系結構的認識。這個收獲是來自不易的。

如果你不依靠API會怎麼樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎麼辦,那個怎麼辦?煩不煩呢?當然,現在網上好人太多(包括我在內,嘻嘻),但,你應當明白,通過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子里根本行不成一種總體的設計構思。
API文本游覽器 [返回]

很多API函數都是很長很長的。想看什麼樣子嗎?如下就是作為例子的API DdeClientTransaction函數∶
Declare Function DdeClientTransaction Lib "user32" (pData As Byte, ByVal cbData As Long, ByVal hConv As Long, ByVal hszItem As Long, ByVal wFmt As Long, ByVal wType As Long, ByVal dwTimeout As Long, pdwResult As Long) As Long
哇!這么長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續學下去。不過不要擔心,幸運的是Microsoft的設計家們為我們提供了有用的工具,這便是API
文本查看器。

通過API文本查看器,我們可以方便地查找程序所需要的函數聲明、結構類型和常數,然後將它復制到剪貼板,最後再粘貼到VB程序的代碼段中。在大多數情況下,只要我們確定了程序所需要的函數、結構和常數這三個方面後,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數了。這些是學習API最基本的常識問題,它遠遠占不到API的龐大的體系內容。今後我們把精力浪費(這絕不是浪費)在哪裡呢?那就是∶
什麼時候使用什麼函數,什麼時候使用什麼結構類型,什麼時候使用什麼常數。
API函數聲明

讓我們回想一下。在VB中,如何聲明函數呢?我想,如果你正在看此文,那麼你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數聲明∶
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名為SetFocus的函數,此函數具有一個Long型數據類型的參數,並按值傳遞(ByVal),函數執行後將返回一個Long型數據。
API函數的聲明也很類似,如,API中的SetFocus 函數是這樣寫的∶

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點復雜了一些。是的,是復雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學到的東西是一樣的。函數在程序中的調用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不象你自己寫的程序那樣能夠看到裡面的運行機理,也不像VB
自帶的函數那樣,能夠從VB的聯機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。

Declare 語句用於在模塊級別中聲明對動態鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數的動態鏈接庫或代碼資源。也就是說,它說明的是,函數或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數 SetFocus 來自 user32.dll文件。主要的dll動態連接庫文件有∶
user32.dll Windows管理。生成和管理應用程序的用戶介面。

GDI32.dll 圖形設備介面。產生Windows設備的圖形輸出
Kernel32.dll 系統服務。訪問操作系統的計算機資源。
注意,當DLL文件不在Windows或System文件夾中的時候,必須在函數中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數聲明中的Alias 是可選的。表示將被調用的過程在動態鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數在User32.dll中的另外一個名稱是,
SetFocus。怎麼兩個名都一樣呢?當然,也可以是不同的。在很多情況下,Alias說明的函數名,即別名最後一個字元經常是字元A,如SetWindowsText函數的另一個名稱是
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數屬於ANSI版本。

那麼,別名究竟有什麼用途呢?從理論上講,別名提供了用另一個名子調用API的函數方法。如果你指明了別名,那麼 盡管我們按Declare語句後面的函數來調用該函數,但在函數的實際調用上是以別名作為首要選擇的。如,以下兩個函數(Function,ABCD)聲明都是有效的,他們調用的是同一個 SetFocus函數∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long

需要注意的是,選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數名必須注意大小寫,而且不能改動。當然,在很多情況下,由於函數聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發生機會是很少的,但您有必要知道這一點。
最後提醒你一句,API聲明(包括結構、常數)必須放在窗體或模塊的"通用(General Declarations)段。
數據類型與"類型安全"

API函數中使用的數據類型基本上和VB中的一樣。但作為WIN32的API函數中,不存在Integer
數據類型。另外一點是在API函數中看不到Boolean數據類型。 Variant數據類型在API函數中是以Any的形式出現,如Data As Any。盡管其含義是允許任意參數類型作為一個該API函數的參數傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數的所有類型檢查都會被關閉。這自然會給各種類型的參數調用帶來了產生錯誤的機會。

為了強制執行嚴格的類型檢查,並避免上面提到的問題,一個辦法是在函數里使用上面提到到Alias技術。如對API函數 GetDIBits 可進行另外一種聲明方法。如下∶
GetDIBits函數的原型∶
Public Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
GetDIBits函數的改型∶

Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學到的知識,我們已經可以得知原型 GetDIBits函數也好,改型 GetDIBitsLong函數也好,實際將調用的都是Alias所指定的 GetDIBits原函數。但你應當看到,兩者的區別在於,我們在改型的函數中強制指定lpBits參數為Long形。這樣就會使得函數調用中發生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。

API函數中經常看到的數據類型有∶Long,String,Byte,Any....(也就這些吧。)
常 數

對於API常數來講,沒有什麼太特別的學問。請看VB中的以下代碼∶
Msg = MsgBox("您好", vbOKCancel)
我們知道, vbOKCancel這個常數的值等於1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能∶
Msg = MsgBox("您好", 1)
但你大概不太願意選擇後一種,因為這會使得看懂代碼費勁起來。這種方法也被API採取了。只是API常數必須在事情之前做好初始化聲明VB本身是看不懂的。其內容仍然來自與API
文本游覽器。具體形式如下等等∶

Public Const ABM_ACTIVATE = &H6
Public Const RIGHT_CTRL_PRESSED = &H4
Public Const RPC_E_SERVER_DIED = &H80010007
Private Const RPC_S_CALL_FAILED_DNE = 1727&
在常數的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認為Public完全可以代替它。過去我也用過Global,但現在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來別扭。
結 構 [返回]

結構是C和C++語言中的說法。在VB中一般稱為自定義數據類型。想必很多朋友都已經認識它。在API領域里,我更喜歡把它叫做結構,因為API各種結構類型根本不是我定義(
自定義)的。
在VB中,API結構同樣由TYPE.......END TYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
Public Type POINTAPI
X As Long '點在X坐標(橫坐標)上的坐標值

Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
又如,API中矩形(Rect)結構的定義如下∶
Public Type RECT
Left As Long '矩形左上角的X坐標
Top As Long '矩形左上角的Y坐標
Right As Long '矩形右下角的X坐標
Bottom As Long '矩形右下角的Y坐標

End Type
這些內容同樣可以從API文本游覽器中拷貝過來。這些結構中的變數名可隨意改動,而不會影響結構本身。也就是說,這些成員變數都是虛擬的。如,POINTAPI結構可改為如下∶
Public Type POINTAPI
MyX As Long '點在X坐標(橫坐標)上的坐標值
MyY As Long '點在Y坐標(縱坐標)上的坐標值
End Type
不過,一般來講,是沒有這種必要的。結構本身是一種數據類型,因此,使用時必須聲明具體變數為該結構型,才能在程序中真正使用到該結構。結構的聲明方法和其他數據的聲明方法一樣,如,以下語句把變MyPoint聲明為POINTAPI結構類型∶

MyPoint As POINTAPI
引用結構中的成員變數也十分簡單,在結構名後面加上一個".",然後緊接著寫要引用的成員變數即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經聲明的MyPoint結構中的X變數的值賦給變數Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數,即所有API
函數中,結構都是按ByRef傳遞的(在Declare語句 中ByRef是默認型)。對於結構的傳遞,你不要試圖採用ByVal,你將一無所獲。由於結構名實際上就是指向這個結構的指針(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)。

由於結構傳送的是指針,所以函數將直接對結構進行讀寫操作。這種特性很適合於把函數執行的結果裝載在結構之中。
小 結 [返回]

以下的程序是為了總結本課中學到的內容而給出的。啟動VB,新建一個項目,添加一個命令按鈕,並把下面的代碼拷貝到代碼段中,運行它。

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定義點(Point)結構
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '調用函數,獲取屏幕滑鼠坐標

Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos

End Sub

輸出結果為(每次運行都可能得到不同的結果,這得由函數調用時滑鼠指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151

程序中,GetCursorPos函數用來獲取滑鼠指針在屏幕上的位置。

以上例子中,你可以發現,以參數傳遞的MyPpint結構的內容在函數調用後發生了實質性變化。這是由於結構是按ByRef傳遞的原因。
一些API函數集

『拾』 關於MFC 和 C#

MFC 已經被微軟淘汰了, 很早的windows 平台的編程API , 是微軟為C++ 語言封裝的windows API。由於C++ 編程過於復雜。後來被.net 平台的 winform 取代(微軟的意思,但個人看來winform是雞肋,運行速度和渲染圖形的速度都太垃圾,使用傳統的
GDI+ 渲染。商業上很少使用以至於後來微軟推出了wpf)。 WPF 是windows 軟體平台的一次重要變革 ,是基於DirectX引擎的,支持GPU硬體加速。不在使用傳統GDI 渲染,所以可以製作2D/3D 動畫。 概念版QQ就是使用wpf 作為展現層。內核使用C++ 編寫。 所以 wpf是下一帶窗體程序的大勢所趨。 wpf 的開發方式 和android ,flex, 等開發方式一樣都是 xml+代碼。 學會了wpf 還可以編寫 微軟的銀光和 window Phone 的展現。 他們都是一樣的API ,只不過wpf 要比 銀光和wp7 多一部分 。編寫wpf 需要掌握.NET 主推的語言 C#

熱點內容
bp神經網路的學習演算法 發布:2025-04-03 09:01:19 瀏覽:597
重播編程 發布:2025-04-03 08:47:36 瀏覽:847
汽車配置買的太低怎麼辦 發布:2025-04-03 08:34:31 瀏覽:277
shell腳本中執行shell 發布:2025-04-03 08:26:36 瀏覽:781
給期貨賬號轉賬為什麼要銀行密碼 發布:2025-04-03 07:55:20 瀏覽:623
呼叫中心話術腳本 發布:2025-04-03 07:29:22 瀏覽:115
android密碼解鎖 發布:2025-04-03 07:28:47 瀏覽:508
安卓手機為什麼老是藍屏 發布:2025-04-03 07:28:36 瀏覽:325
windows搭建dns緩存伺服器 發布:2025-04-03 07:28:33 瀏覽:385
自己搭建機房和伺服器 發布:2025-04-03 07:27:56 瀏覽:652