私はVCとDelphiの比較に関するいくつかの記事を読みました。また、Wintestと呼ばれるVC6の下でコードを作成することにも興味があります。コードは次のとおりです。
#include <windows.h>
hwnd hwndbutton;
int cx、cy;
LRESULTコールバックMainWndProc(HWND HWINDOW、UINT NMSG、WPARAM WPRM、LPARAM LPRM)
{
HDC DC;
PaintStruct PS;
RECT RC;
スイッチ(nmsg)
{
ケースwm_create:
{
テキストメトリックTM;
dc = getdc(hwindow);
selectObject(dc、getstockobject(system_fixed_font));
getTextMetrics(DC、&TM);
cx = tm.tmavecharwidth * 30;
cy =(tm.tmheight + tm.tmexternalleading) * 2;
releasec(hwindow、dc);
hwndbutton = createwindow(
"ボタン"、
"ここをクリック"、
WS_CHILD |
0、0、cx、cy、
hwindow、
(hmenu)1、
((lpcreatestruct)lprm) - > hinstance、
ヌル
);
0を返します。
壊す;
}
ケースwm_destroy:
{
Pototmessage(0);
0を返します。
壊す;
}
ケースwm_paint:
{
dc = beginpaint(hwindow、&ps);
getClientRect(hwindow、&rc);
rc.bottom = rc.bottom / 2;
drawText(dc、 "hello、world!"、-1、&rc、
DT_SINGLELINE |。
endpaint(hwindow、&ps);
0を返します。
壊す;
}
ケースwm_size:
{
if(hwndbutton &&(wprm == sizefullscreen || wprm == sizenormal)))
{
rc.left =(loword(lprm)-CX) / 2;
rc.top = hiword(lprm) * 3/4 -cy / 2;
MoveWindow(hwndbutton、rc.Left、rc.top、cx、cy、true);
}
0を返します。
壊す;
}
ケースwm_command:
{
if(loword(wprm)== 1 && hiword(wprm)== bn_clicked &&
(hwnd)lprm == hwndbutton)
{
DestroyWindow(Hwindow);
}
0を返します。
壊す;
}
}
return defwindowproc(hwindow、nmsg、wprm、lprm);
}
//ウィンメイン
int __stdcall winmain(Hinstance Hinst、Hinstance hprev、lpstr lpcmd、int nshow)
{
hwnd hwindowmain;
msg mymsg;
wndclassex wcex;
wcex.cbsize = sizeof(wndclassex);
wcex.style = cs_hredraw |。
wcex.lpfnwndproc =(wndproc)mainwndproc;
wcex.cbclsextra = 0;
wcex.cbwndextra = 0;
wcex.hinstance = hinst;
wcex.hicon = loadicon(null、idi_application);
wcex.hcursor = loadcursor(null、idc_arrow);
wcex.hbrbackground =(hbrush)(color_window+1);
wcex.lpszclassname = "wintestwin";
wcex.hiconsm = loadicon(null、idi_application);
RegisterClassex(&WCEX);
hwindowmain = createwindow(
「wintestwin」、
"こんにちは"、
ws_overlappwindow、
cw_usedefault、
cw_usedefault、
cw_usedefault、
cw_usedefault、
0、
0、
ヒンスト、
ヌル
);
showwindow(hwindowmain、nshow);
updateWindow(hwindowmain);
while(getmessage(&mymsg、0、0、0))
{
翻訳(&mymsg);
DispatchMessage(&mymsg);
}
mymsg.wparamを返します。
}
リリースを選択してコンパイルし、VC6の最小コード最適化をオンにし、コンパイルによって生成された実行コードは36.0kbです。
次に、次のようにDelphiコードに翻訳します。
プログラムWintest;
用途
Windows、メッセージ;
var
hwndbutton:hwnd;
CX、CY:整数;
関数mainwndproc(hwindow:hwnd; nmsg:uint; wprm:wparam; lprm:lparam):lresult; stdcall;
var
DC:HDC;
PS:PaintStruct;
RC:Trect;
TM:TextMetric;
PCTST:pcreatestruct;
始める
のケースnmsg
wm_create:
始める
DC:= getDC(hwindow);
selectObject(dc、getstockobject(system_fixed_font));
getTextMetrics(DC、TM);
cx:= tm.tmavecharwidth * 30;
Cy:=(tm.tmheight + tm.tmexternalleading) * 2;
releasec(hwindow、dc);
pctst:= pcreatestruct(lprm);
hwndbutton:= createwindow(
'ボタン'、
'ここをクリック'、
ws_childまたはws_visibleまたはbs_pushbutton、
0、0、cx、cy、
hwindow、
hmenu(1)、
pctst^.hinstance、
nil
);
結果:= 0;
出口;
終わり;
wm_destroy:
始める
Pototmessage(0);
結果:= 0;
出口;
終わり;
wm_paint:
始める
DC:= beginPaint(hwindow、ps);
getClientRect(HWINDOW、RC);
rc.bottom:= round(rc.bottom / 2);
drawtext(dc、 'hello、world!'、-1、rc、
DT_SINGLELINEまたはDT_CENTERまたはDT_VCENTER);
endpaint(Hwindow、PS);
結果:= 0;
出口;
終わり;
wm_size:
始める
if(hwndbutton <> 0)および(wprm = sizefullscreen)または(wprm = sizenormal)then
始める
rc.Left:= round((loword(lprm)-cx) / 2);
rc.top:= round(hiword(lprm) * 3/4 -cy / 2);
MoveWindow(hwndbutton、rc.Left、rc.top、cx、cy、true);
終わり;
結果:= 0;
出口;
終わり;
wm_command:
始める
if(loword(wprm)= 1)および(hiword(wprm)= bn_clicked)and
(hwnd(lprm)= hwndbutton)
始める
DestroyWindow(Hwindow);
終わり;
結果:= 0;
出口;
終わり;
終わり;
結果:= defwindowproc(hwindow、nmsg、wprm、lprm);
終わり;
//ウィンメイン
var
hwindowmain:hwnd;
mymsg:msg;
WCEX:Wndclassex;
始める
wcex.cbsize:= sizeof(wndclassex);
wcex.style:= cs_hredrawまたはcs_vredraw;
wcex.lpfnwndproc:= @mainwndproc;
wcex.cbclsextra:= 0;
wcex.cbwndextra:= 0;
wcex.hinstance:= maininstance;
wcex.hicon:= loadicon(0、idi_application);
wcex.hcursor:= loadcursor(0、idc_arrow);
wcex.hbrbackground:= hbrush(color_window+1);
wcex.lpszclassname:= 'wintestwin';
wcex.hiconsm:= loadicon(0、idi_application);
RegisterClassex(WCEX);
hwindowmain:= createwindow(
'wintestwin'、
'こんにちは'、
ws_overlappwindow、
cw_usedefault、
cw_usedefault、
cw_usedefault、
cw_usedefault、
0、
0、
maininstance、
nil
);
showwindow(hwindowmain、cmdshow);
updateWindow(hwindowmain);
getmessage(mymsg、0、0、0)= true do
始める
TransMessage(mymsg);
DispatchMessage(mymsg);
終わり;
終わり。
最後に、Delphiによって生成されたコードはわずか16.5kであり、VCよりも半分以上小さいことがわかりました。これは、Delphiが優れたコンパイラを持っていることを示しており、VCLの視覚化機能は優れた開発ツールでなければなりません。 私の意見では、Delphiは大規模なシステムの開発に問題はありません。そのパフォーマンスはVCを超えることさえあります。 。 DelphiはVCLを使用してプログラムを作成することもできません。