سؤال

أنا أتساءل فقط ما (إن وجدت) الفرق بين التاليين رسالة الفخاخ في MFC وظيفة ، OnSize(..).

1 - عن طريق رسالة الخريطة:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
...
    ON_WM_SIZE()
..
END_MESSAGE_MAP()

2 - عن طريق afx_message:

afx_msg type OnSize(...);

يبدو أنها تستخدم بالتبادل ، وهو واحد ينبغي أن تستخدم أو أنها لا تعتمد على عوامل أخرى ؟

هل كانت مفيدة؟

المحلول

كل أجزاء من الضروري إضافة معالج رسالة إلى فئة.الرسالة خريطة ينبغي إعلان داخل الصف ، جنبا إلى جنب مع الإعلانات لأي معالج الرسالة وظائف (هـ.ز ، OnSize).

class CClassWnd : public CBaseClassWnd {
    ...
    afx_msg void OnSize(UINT nType, int cx, int cy);
    DECLARE_MESSAGE_MAP
};

afx_msg هو فقط نائب فارغة الكلية أنها لا تفعل في الواقع أي شيء, ولكن هو دائما المدرجة في الاتفاقية.

الرسالة الخريطة ثم تعريفها في الفئة .الملف cpp:

BEGIN_MESSAGE_MAP(CClassWnd, CBaseClassWnd)
    ON_WM_SIZE()
END_MESSAGE_MAP()

هذه وحدات الماكرو إنشاء جدول بحث عن الدرجة التي تسمح الرسائل الواردة من خلال النافذة إلى إرسالها إلى المقابلة معالج المهام.على ON_WM_SIZE ماكرو يسمح wParam و lParam رسالة المعلمات في WM_SIZE رسالة إلى فك الشفرة إلى أكثر وضوحا قيم دالة معالج الرسالة (nType, cx, ، cy في هذه الحالة).MFC يوفر وحدات الماكرو معظم نافذة الرسائل (WM_LBUTTONDOWN, WM_DESTROY, ، وما إلى ذلك).

يمكنك العثور على مزيد من المعلومات حول كيفية رسالة خرائط العمل في MFC هنا على MSDN.

نصائح أخرى

وafx_msg هو مجرد ماكرو فارغة، انها في الاساس هناك فقط للدلالة على أن هذه الطريقة معالج رسالة MFC لأغراض القراءة. حتى مع afx_msg هناك كنت لا تزال بحاجة إلى إدخال في مخطط الرسالة.

ما هي الرسالة التي سبق التعامل معها من قبل MFC, حتى في هذه الحالات يمكنك الحصول على بعيدا مع إضافة فقط طريقة إلى فئة مشتقة.

على سبيل المثال CWnd فئة (كما تفعل العديد من غيرها من فئات MFC) بالفعل خرائط بضع رسائل Windows في ذلك رسالة الخريطة (أي ON_WM_DRAWITEM, ON_WM_MEASUREITEM, ON_WM_ENTERIDLE الخ ، الخ).

ولكن أي رسالة أخرى لا تعيينها بالفعل من قبل MFC سوف تحتاج إلى أن يكون كل فئة طريقة إدخال في رسالة الخريطة من أجل أن تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top