// template -------- byhottey2004-4-13-0: 18 //
// موقع المؤلف: http://asp.itdrp.com/hottey //
ProgramDelphi ؛
يستخدم
النوافذ ،
رسائل؛
كونست
Hellostr = 'HelloWorld!' ؛
{$ rdelphi.res}
// وظيفة معالجة رسالة النوافذ.
functionMyWinProc (hwnd: thandle ؛ umsg: uint ؛ wparam ، lparam: cardinal): cardinal ؛ exp
ort ؛ stdcall ؛
var
HDCA ، HDCB: Thandle ؛ // Device Description Table Handle.
المستقيم: TRECT ؛ // بنية مستطيلة.
الخط: Hfont ؛
PS: TpaintStruct ؛ // هيكل الرسم.
يبدأ
النتيجة: = 0 ؛
caseumsgof
wm_paint:
يبدأ
HDCA: = beginpaint (hwnd ، ps) ؛
SetBkMode(hdca,Transparent);
SetBkColor(hdca,GetBkColor(hdca));
getClientRect (hwnd ، rect) ؛ // احصل على حجم منطقة عميل النافذة.
DrawText (HDCA ، PCHAR (HelloStr) ،-1 ، Rect ، dt_singlelineordt_centerordt
_vCenter) ؛
// textout (HDC ، 100،40 ، Hellosttr ، طول (HelloStr)) ؛
Endpaint (hwnd ، ps) ؛
نهاية؛
wm_create:
يبدأ
HDCB: = getDC (hwnd) ؛
الخط: = createFont (45،0،0،0 ، fw_normal ، 0،0 ، Ansi_charset ، Out
_default_precis ، clip_default_precis ،
default_quality ، 34 ، pchar ('arial')) ؛
SelectObject (HDCB ، الخط) ؛
تم إصداره (HWND ، HDCB) ؛
نهاية؛
wm_destroy:
postquitmessage (0)
آخر
//使用缺省的窗口消息处理函数.
result:=DefWindowProc(hWnd,uMsg,wParam,lParam);
نهاية؛
نهاية؛
// يبدأ البرنامج الرئيسي.
var
MSG: TMSG ؛ // هيكل الرسائل.
HWND ، Hinst: Thandle ؛ // Windows Window Handle.
Winclass: TwndClassex ؛ // هيكل فئة Windows Window.
يبدأ
hinst: = getModuleHandle (nil) ؛ // getTheApplicationInstance
winclass.cbsize: = sizeof (twndclassex) ؛
winclass.lpszClassName: = 'mywindow' ؛ // اسم الفئة.
WinClass.Style:=CS_HREDRAWORCS_VREDRAWORCS_OWNDC ؛
winclass.hinstance: = hinst ؛ // مقبض مثيل البرنامج.
// تعيين وظيفة معالجة رسالة النافذة.
winclass.lpfnwndproc: =@mywinproc ؛ // window عملية.
winclass.cbclsextra: = 0 ؛ // يتم استخدام المجالين التاليين في بنية الفئة والنافذة
تم حفظ بنية النافذة داخل S
winclass.cbwndextra: = 0 ؛ // حجز بعض المساحة الإضافية فيه.
winclass.hicon: = loadicon (hinstance ، makeintresource ('mainicon')) ؛
winclass.hiconsm: = loadicon (hinstance ، makeintresource ('mainicon')) ؛
winclass.hcursor: = loadCursor (0 ، idc_arrow) ؛
// GetStockObject يحصل على كائن رسومي ، إليك الحصول على الفرشاة التي ترسم خلفية النافذة ، وإعادة فرشاة بيضاء
مقبض الطفل.
winclass.hbrackground: = hbrush (getStockObject (white_brush)) ؛
winclass.lpszmenuname: = nil ؛ // حدد قائمة فئة النافذة.
// تسجيل فئة نافذة مع Windows.
ifregisterclassex (winclass) = 0then
يبدأ
MessageBox (0 ، "registerationError!" ، "SDK/API" ، MB_OK) ؛
مخرج؛
نهاية؛
// إنشاء كائن نافذة.
HWND: = CreateWindowex (
WS_EX_OVERLIPPEDWINDOW ، // نمط النافذة الموسعة.
winclass.lpszClassName ، // اسم الفصل.
'HelloWindow',//窗口标题.
WS_OVERLIPPEDWINDOW ، // نمط النافذة.
cw_usedefault ، // الزاوية اليسرى العلوية من النافذة نسبة إلى الشاشة
الموضع الأولي x في الزاوية اليسرى العلوية.
0 ، // .... الحق y.
CW_USESTEFAULT ، // عرض النافذة x.
0 ، // ارتفاع النافذة y.
0 ، // مقبض النافذة الأصل.
0 ، // Window Menu Handle.
Hinst ، // برنامج مثيل البرنامج.
لا شيء) ؛ // إنشاء مؤشر المعلمة.
ifhwnd <> 0then
يبدأ
showwindow (hwnd ، sw_shownormal) ؛ // show window.
UpdateWindow (HWND) ؛ // نافذة التعليمات لتحديث نفسها.
setWindowpos (hwnd ، hwnd_topmirm ، 0،0،0،0 ، swp_nomove+swp_nosize) ؛
نهاية
آخر
MessageBox (0 ، "Windownotcreated!" ، "SDK/API" ، MB_OK) ؛
// برنامج حلقة الرسالة الرئيسية.
في حين أن getGESTAGE (MSG ، 0،0،0) تفعل
يبدأ
TranslateMessage (MSG) ؛ // تحويل رسائل لوحة مفاتيح معينة.
DispatchMessage (MSG) ؛ // إرسال الرسائل إلى عملية النافذة.
نهاية؛
نهاية.
في الواقع ، يجب أن يتقن برمجة Windows Windows شيء يجب أن يتقنه كل من يتعلم كتابة البرامج.
الكود أعلاه ليس بالسرعة التي يتم استخدام نموذج جديد في دلفي ، ولكن يمكن أن يخبرك بذلك
يمكن أن تساعدك الأشياء المؤهلة على فهم حلقة الرسائل وأشياء أخرى.
.
> ملاحظة: يتم ترجمة الكود أعلاه حرفيًا من برمجة Windows () إلى بناء جملة C ++ ، ولا توجد مشكلة بعد الاختبار.
إذا كان هناك أي أخطاء في التعليق التوضيحي ، يرجى تصحيحني!^_^
Hottey في 2004-5-19 موقع المؤلف الموقع: http://asp.itdrp.com/hottey (بواسطة روتين)