使用Delphi,SDK編寫Windows簡單程式 (轉)
接觸也已經有好長時間了,使用Delphi進行開發非常方便、,Delphi本身就提供了大量的(網上還有更多的元件)進行程式開發,這大大減輕了程式設計師的工作量,但是越方便越說明Delphi本身在背後為我們做的工作就越多,也許很多人沒有考慮過這些,還在充分的享受著它帶給我們的快捷與方便。我也是個C的愛好者,學習和使用C也有好長一段時間了,學了C/C++以後,要進行,常規的有兩種方法一種是利用SDK開發包,還有就是MFC,現在還有BCB,等等更多,當時很多人都把SDK作為一個基礎,無論怎樣都要或多或少的瞭解一些,然後在逐步走向MFC,儘管是這樣,不難發現後一種方法是前一種方法的改進,有一種逐步提高的感覺,MFC是對的一種封裝而已,給程式開發帶來了巨大的方便。
有一本書《Windows程式設計》可以說是一本經典之作,我想很多人都有這套書,書上第一個完整的例子就是Hello,world,一個簡單的窗體,有著Windows窗體的一般特徵,但是寫了很多程式碼。但是學完了Pascal語法,使用Delphi進行Windows程式設計好像是一下子就跳到了使用VCL,對於什麼訊息迴圈,訊息處理,絲毫沒有涉及到,很多參考書也沒有提到這些,對於我的感覺好像就是C/C++天生就是用來開發Windows程式的,無縫連線,Pascal的語法是有一點怪怪的,好像不適合(一開始給我的感覺就是不可以)配合SDK進行Windows程式開發,後來查了一點資料,逐漸摸索,找到了一點眉目,希望能夠和大家共同進步。這個例子可以說是Charles例子的一個克隆,只是語法換成了Pascal而已,在這裡也同樣有訊息迴圈,訊息處理,等等。下面給出這個程式的具體程式碼還有詳細的註釋,為了閱讀的關係我分成了幾個處理,都有特殊的註明。
具體開始的時候也是new一個Application然後關掉預設給我們加的視窗還有程式碼視窗當顯示提示是否要儲存的時候選擇否,然後在project中選擇view 選項,跳到程式碼視窗,修改其中程式碼。
:namespace prefix = o ns = "urn:schemas--com::office" />
program Project2;
uses
Windows,
Messages;
var
Msg:TMsg;
wc:TWndClass; //RegisterClass()所需要的引數
hWnd:THandle; //主窗體的控制程式碼
const
ClassName='MainWClass';
OutText='Hello ';
Function MainWndProc(Handle:THandle;MsgID:UINT;wParam,lParam:Integer):LRESULT;stdcall;
var
pDC:HDC;
lpRect:TRECT;
begin
Result:=1;
case MsgID of
WM_CLOSE:
begin //關閉窗體所產生的訊息
if MessageBox(Handle,'要關閉這個程式嗎?','程式示例',MB_ICONQUESTION or MB_YESNO)=IDYES then
DestroyWindow(hWnd)
else
Result:=0;
Exit;
end;
WM_DESTROY: //DestroyWindow()所產生的訊息
begin
PostQuitMessage(0);
end;
WM_PAINT:
begin
pDC:=GetDC(hWnd);
GetClientRect(hWnd,lpRect);
DrawText(pDC,OutText,5,lpRect,DT_SINGLELINE or DT_CENTER or DT_VCENTER);
//TextOut(pDC,10,10,OutText,5);
ReleaseDC(hWnd,pDC);
end;
end;
//剩下的訊息交給Windows預設的處理函式就可以了,比如畫窗體的WM_NCPAINT訊息等等
Result:=DefWindowProc(Handle,MsgID,wParam,lParam);
end;
//初始化,註冊視窗類
Function InitApplication(hInstance:THANDLE):Boolean;
begin
//首先使用RegisterClass()註冊窗體類,這可不是Delphi資料型別中的類哦
wc.style:=CS_HREDRAW OR CS_VREDRAW;
wc.lpfnWndProc:=@MainWndProc; //訊息處理函式的地址
wc.hInstance:=hInstance; //程式的控制程式碼,同時也是基地址
wc.hIcon:=LoadIcon(0,PChar(IDI_APPLICATION));
wc.hCursor:=LoadCursor(0,IDC_ARROW); //圖示
wc.hbrBackground:=GetStock(WHITE_BRUSH); //背景畫刷
wc.lpszClassName:=ClassName; //前面定義的常量
Result:=Boolean(RegisterClass(wc));//註冊這個視窗類
end;
//InitInstance 生成視窗
Function InitInstance(hInstance:THANDLE;nCmdShow:Integer):Boolean;
begin
hWnd:=CreateWindowEx(0,
ClassName, //剛才註冊的類的名字
'示例', //窗體的標題
WS_OVERLAPPEDWINDOW, //窗體的型別,有標題欄、選單、最大化最小化選單,以及拉伸邊框
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
hInstance,
nil
);
if hWnd=0 then
begin
Result:=false;
Exit;
end;
ShowWindow(hWnd,CmdShow);
UpdateWindow(hWnd);
Result:=true;
end;
//主程式開始
begin
if Not InitApplication(hInstance) then Halt(0); //初始化註冊視窗類
if Not InitInstance(hInstance,CmdShow) then Halt(0); //產生視窗
while GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg); //該API將訊息分派到相應的窗體訊息處理函式
end;
ExitCode:=Msg.wParam;
end.
上面給出了詳細的程式碼,其中借鑑了有關文章,這就是最基本的,如果使用C進行過Windows程式開發的話,會對上面的程式碼非常熟悉,不錯確實是大同小異,只是很多變數的定義和寫法有點差別,還有就是函式時候有一些注意點。
我比較喜歡和大家一起討論,喜歡追究個所以然,希望各位能夠和我一起討論,一起進步。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992478/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用DELPHI編寫WINDOWS外殼 (轉)Windows
- 用Delphi編寫DelTree程式 (轉)
- 利用Delphi編寫Windows外殼擴充套件 (轉)Windows套件
- 用Delphi編寫安裝程式(1) (轉)
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 用Delphi編寫塗鴉桌面的小程式 (轉)
- Delphi編寫網路程式的安全措施 (轉)
- 一個用delphi寫的整合彙編與api的簡單的視窗程式API
- Delphi寫的讀狗程式的簡單逆向對比.
- 用VB編寫簡單的程式來清空文件選單 (轉)
- 用Delphi編寫點對點傳檔案程式(1) (轉)
- 用Delphi編寫點對點傳檔案程式(2) (轉)
- 利用Delphi編寫IE擴充套件 (轉)套件
- C編寫的簡單密碼程式密碼
- 使用Delphi呼叫C++編寫的DLLC++
- windows下如何使用QT編寫dll程式WindowsQT
- 編寫簡單的Java程式碼:HelloWoridJava
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- webase go-sdk 簡單使用WebGo
- 使用Windows訊息控制Winamp(Delphi) (轉)Windows
- Delphi源程式格式書寫規範 (轉)
- 排除Delphi5中編寫COM+程式的一個錯誤 (轉)
- 用 webpack 寫一個簡單的 JS SDKWebJS
- 編寫簡單的windows bat批處理指令碼檔案WindowsBAT指令碼
- 初學 Delphi 嵌入彙編[26] - 大小寫字母轉換
- 在Delphi中編寫控制元件的基本方法 (轉)控制元件
- 如何編寫簡單的應用window視窗程式
- 用Java編寫一個最簡單的桌面程式Java
- 編寫簡單宏程式碼 快速開啟Word文件
- 用Golang寫了個簡單易用的微信SDKGolang
- 基於順豐同城介面編寫sdk,java三方sdk編寫思路Java
- 在Delphi中編寫控制元件的基本方法(1) (轉)控制元件
- 使用MFC編寫internet查詢程式 (轉)
- 編寫最簡單的核心:HelloWorld
- 利用Delphi編寫IE擴充套件套件
- Windows95的裝置驅動程式的編寫 (轉)Windows
- 編寫隨Windows啟動自動執行的程式 (轉)Windows
- 防止用DeDe軟體反編譯delphi程式 (轉)編譯