知识大全 比较VC和Delphi的WinTest工程
Posted
工程
篇首语:逆水行舟用力撑,一篙松劲退千寻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 比较VC和Delphi的WinTest工程相关的知识,希望对你有一定的参考价值。
比较VC和Delphi的WinTest工程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
#include HWND hwndButton; int cx cy; LRESULT CALLBACK MainWndProc (HWND hWindow UINT nMsg WPARAM wPrm LPARAM lPrm) HDC dc; PAINTSTRUCT ps; RECT rc; switch (nMsg) case WM_CREATE: TEXTMETRIC tm; dc = GetDC (hWindow); SelectObject (dc GetStockObject (SYSTEM_FIXED_FONT)); GetTextMetrics (dc &tm); cx = tm tmAveCharWidth * ; cy = (tm tmHeight + tm tmExternalLeading) * ; ReleaseDC (hWindow dc); hwndButton = CreateWindow ( button Click Here WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON cx cy hWindow (HMENU) ((LPCREATESTRUCT) lPrm) >hInstance NULL ); return ; break; case WM_DESTROY: PostQuitMessage ( ); return ; break; case WM_PAINT: dc = BeginPaint (hWindow &ps); GetClientRect (hWindow &rc); rc bottom = rc bottom / ; DrawText (dc Hello World! &rc DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint (hWindow &ps); return ; break; case WM_SIZE: if (hwndButton && (wPrm == SIZEFULLSCREEN ||wPrm == SIZENORMAL)) rc left = (LOWORD(lPrm) cx) / ; rc top = HIWORD(lPrm) * / cy / ; MoveWindow (hwndButton rc left rc top cx cy TRUE); return ; break; case WM_MAND: if (LOWORD(wPrm) == && HIWORD(wPrm) == BN_CLICKED && (HWND) lPrm == hwndButton) DestroyWindow (hWindow); return ; break; return DefWindowProc (hWindow nMsg wPrm lPrm); //winmain 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 | CS_VREDRAW; wcex lpfnWndProc = (WNDPROC)MainWndProc; wcex cbClsExtra = ; wcex cbWndExtra = ; wcex hInstance = hInst; wcex hIcon = LoadIcon (NULL IDI_APPLICATION); wcex hCursor = LoadCursor (NULL IDC_ARROW); wcex hbrBackground = (HBRUSH)(COLOR_WINDOW+ ); wcex lpszClassName = WinTestWin ; wcex hIconSm = LoadIcon (NULL IDI_APPLICATION); RegisterClassEx (&wcex); hWindowMain = CreateWindow ( WinTestWin Hello WS_OVERLAPPEDWINDOW CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT hInst NULL ); ShowWindow (hWindowMain nShow); UpdateWindow (hWindowMain); while (GetMessage (&MyMsg )) TranslateMessage (&MyMsg); DispatchMessage (&MyMsg); return MyMsg wParam; 其中选择Release方式编译 打开VC 的最小代码优化 编译生成的执行码为 KB 然后将其翻译成Delphi代码 如下 program WinTest; uses Windows Messages; var hwndButton:HWND; cx cy:Integer; function MainWndProc (hWindow:HWND;nMsg:UINT;wPrm:WPARAM;lPrm:LPARAM):LRESULT;stdcall; var dc:HDC; ps:PAINTSTRUCT; rc:TRect; tm:TEXTMETRIC; pctst:PCREATESTRUCT; begin case nMsg of WM_CREATE: begin dc := GetDC (hWindow); SelectObject (dc GetStockObject (SYSTEM_FIXED_FONT)); GetTextMetrics (dc tm); cx := tm tmAveCharWidth * ; cy := (tm tmHeight + tm tmExternalLeading) * ; ReleaseDC (hWindow dc); pctst:= PCREATESTRUCT(lPrm); hwndButton := CreateWindow( button Click Here WS_CHILD or WS_VISIBLE or BS_PUSHBUTTON cx cy hWindow HMENU( ) pctst^ hInstance nil ); Result:= ; Exit; end; WM_DESTROY: begin PostQuitMessage( ); Result:= ; Exit; end; WM_PAINT: begin dc := BeginPaint (hWindow ps); GetClientRect (hWindow rc); rc bottom := Round(rc bottom / ); DrawText (dc Hello World! rc DT_SINGLELINE or DT_CENTER or DT_VCENTER); EndPaint (hWindow ps); Result:= ; Exit; end; WM_SIZE: begin if (hwndButton<> ) and (wPrm = SIZEFULLSCREEN) or (wPrm = SIZENORMAL) then begin rc left := Round((LOWORD(lPrm) cx) / ); rc top := Round(HIWORD(lPrm) * / cy / ); MoveWindow (hwndButton rc left rc top cx cy True); end; Result:= ; Exit; end; WM_MAND: begin if (LOWORD(wPrm) = ) and (HIWORD(wPrm) = BN_CLICKED) and (HWND(lPrm) = hwndButton) then begin DestroyWindow (hWindow); end; Result:= ; Exit; end; end; Result:=DefWindowProc (hWindow nMsg wPrm lPrm); end; //winmain var hWindowMain:HWND; MyMsg:MSG; wcex:WNDCLASSEX; begin wcex cbSize := SizeOf(WNDCLASSEX); wcex style := CS_HREDRAW or CS_VREDRAW; wcex lpfnWndProc := @MainWndProc; wcex cbClsExtra := ; wcex cbWndExtra := ; wcex hInstance := MainInstance; wcex hIcon := LoadIcon ( IDI_APPLICATION); wcex hCursor := LoadCursor ( IDC_ARROW); wcex hbrBackground := HBRUSH(COLOR_WINDOW+ ); wcex lpszClassName := WinTestWin ; wcex hIconSm := LoadIcon ( IDI_APPLICATION); RegisterClassEx (wcex); hWindowMain := CreateWindow ( WinTestWin Hello WS_OVERLAPPEDWINDOW CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT CW_USEDEFAULT MainInstance nil ); ShowWindow (hWindowMain CmdShow); UpdateWindow (hWindowMain); while GetMessage (MyMsg )=True do begin TranslateMessage (MyMsg); DispatchMessage (MyMsg); end; end 最后发现Delphi生成的代码仅有 k 比VC小了一半以上 说明Delphi有一个不错的编译器 加之VCL的可视化功能 应该是一个很好的开发工具 以我来看 Delphi开发大型系统是一点问题没有的 甚至可能性能将超过VC 只是VCL的高封装层次使得使用VCL的程序通常都大 但开发效率却不是VC可以比的 cha138/Article/program/Delphi/201311/8414 相关参考
知识大全 VC++.NET几个比较难缠的问题及其解决方法
VC++.NET几个比较难缠的问题及其解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 问
知识大全 Delphi软件工程师试题
Delphi软件工程师试题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!您为什么选择软件开发这个行
知识大全 Delphi中动态链接库两种调用方式的比较
Delphi中动态链接库两种调用方式的比较 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一动态链接
知识大全 解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
解析PHP中VC6X86和VC9X86的区别及NonThreadSafe的意思 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,
白癜风和VC有哪些关系呢
大家都知道白癜风患者的身上会有明显的白斑,而我们身上之所以颜色不是白色的是因为我们皮肤中有黑色素。患者身上的白斑就是因为局部缺乏黑色素的结果。那么我们常常提到的VC又与白斑的形成及黑色素有什么关联呢?
白癜风和VC有哪些关系呢
大家都知道白癜风患者的身上会有明显的白斑,而我们身上之所以颜色不是白色的是因为我们皮肤中有黑色素。患者身上的白斑就是因为局部缺乏黑色素的结果。那么我们常常提到的VC又与白斑的形成及黑色素有什么关联呢?
知识大全 VC#2005快速入门之使用do语句
VC#2005快速入门之使用do语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! while和
鱼虾饵料宜加VC
鱼虾VC缺乏时,主要表现为食欲不振、生长缓慢、体态异常、游动缓慢等,严重时甚至出现类似哺乳动物的坏血病症状。例如草鱼缺乏VC时,易引起眼窝充血、鳍基部出血、鳃盖出血及腹腔出血等症状。虾类的典型VC缺乏
鱼虾饵料宜加VC
鱼虾VC缺乏时,主要表现为食欲不振、生长缓慢、体态异常、游动缓慢等,严重时甚至出现类似哺乳动物的坏血病症状。例如草鱼缺乏VC时,易引起眼窝充血、鳍基部出血、鳃盖出血及腹腔出血等症状。虾类的典型VC缺乏
知识大全 Delphi设计形象的动态三维饼图
Delphi设计形象的动态三维饼图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在进行数据比较或者