Skill

MFC এর Events এবং Message Handling Mechanism

এমএফসি (MFC) - Microsoft Technologies

579

MFC (Microsoft Foundation Classes) তে Events এবং Message Handling অ্যাপ্লিকেশনের ইন্টারঅ্যাকশন এবং ইউজার ইন্টারফেসের অন্যতম গুরুত্বপূর্ণ অংশ। Message Handling ব্যবস্থাটি ব্যবহৃত হয় মেসেজগুলির সঙ্গে যোগাযোগ স্থাপনের জন্য, যা উইন্ডো, কন্ট্রোল বা সিস্টেম থেকে আসতে পারে। মেসেজগুলো হল বিশেষ ধরনের সিগন্যাল যা অ্যাপ্লিকেশনকে কিছু কাজ করার জন্য নির্দেশ করে, যেমন ইউজার কোন বাটন ক্লিক করেছে বা কীবোর্ড ইনপুট প্রদান করেছে।

এখানে MFC তে Events এবং Message Handling Mechanism এর কাজ এবং এর মাধ্যমে অ্যাপ্লিকেশনটি কীভাবে ইউজারের ইনপুট এবং সিস্টেম ইভেন্টের প্রতিক্রিয়া জানায় তা বিস্তারিতভাবে ব্যাখ্যা করা হবে।


MFC এর ইভেন্ট এবং মেসেজ হ্যান্ডলিং (Event and Message Handling in MFC)

MFC তে মেসেজ হ্যান্ডলিং হল একটি ম্যাকানিজম যা অ্যাপ্লিকেশনকে একটি মেসেজ (যেমন ইউজার ইন্টারঅ্যাকশন) প্রাপ্ত হলে নির্দিষ্ট একটি কাজ করতে বলে। মেসেজগুলো হল কমান্ড বা সিস্টেমের ইভেন্ট যা অ্যাপ্লিকেশনে প্রসেস হয় এবং সেই অনুযায়ী সংশ্লিষ্ট ফাংশন কল করা হয়।

MFC মেসেজ হ্যান্ডলিং ব্যবস্থাটি দুটি প্রধান উপাদানে কাজ করে:

  1. Windows Messages
  2. Message Map

Windows Messages

MFC একটি ইভেন্ট-ড্রিভেন প্রোগ্রামিং প্যাটার্ন অনুসরণ করে, যেখানে উইন্ডো সিস্টেম থেকে মেসেজ আসে, এবং সেই মেসেজগুলো প্রক্রিয়া করার জন্য নির্দিষ্ট ফাংশন কল করা হয়। Windows Messages হল এই মেসেজগুলির নাম, যেমন কীবোর্ড প্রেস, মাউস ক্লিক, উইন্ডো রিসাইজ করা, এবং আরও অনেক কিছু।

কিছু সাধারণ উইন্ডোজ মেসেজ:

  • WM_COMMAND – ইউজার কন্ট্রোলের (যেমন বাটন ক্লিক) মাধ্যমে কমান্ড সিগন্যাল
  • WM_PAINT – উইন্ডো বা কন্ট্রোলের গ্রাফিক্যাল রেন্ডারিং
  • WM_KEYDOWN / WM_KEYUP – কীবোর্ডের কী প্রেস করা বা ছেড়ে দেওয়া
  • WM_MOUSEMOVE – মাউস পয়েন্টারের চলাচল

Message Map

Message Map হল মেসেজ হ্যান্ডলিংয়ের একটি বিশেষ ফিচার যা মেসেজগুলির সাথে তাদের প্রাসঙ্গিক হ্যান্ডলার ফাংশন সংযুক্ত করে। MFC অ্যাপ্লিকেশনটি Message Map ব্যবহার করে প্রাপ্ত মেসেজগুলো কিভাবে প্রসেস করবে তা নির্দেশ করে।

Message Map কনফিগারেশন

MFC তে মেসেজ ম্যাপ দুটি মূল জায়গায় থাকে:

  1. Message Map Declaration – সাধারণত ক্লাস ডিক্লারেশন বা হেডার ফাইলে থাকে।
  2. Message Map Implementation – ক্লাসের সি ফাইল বা সোর্স ফাইলে থাকে।

Message Map ডিক্লারেশন এবং ইমপ্লিমেন্টেশন সাধারণত BEGIN_MESSAGE_MAP এবং END_MESSAGE_MAP ম্যাক্রো দ্বারা ঘিরে থাকে। এখানে, মেসেজ ম্যাপটি কীভাবে ডিফাইন করা হয়, তার একটি উদাহরণ দেওয়া হল:

উদাহরণ:

class CMyWindow : public CWnd {
public:
    afx_msg void OnPaint();
    afx_msg void OnButtonClicked();

    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyWindow, CWnd)
    ON_WM_PAINT()                  // WM_PAINT মেসেজকে OnPaint হ্যান্ডলার দ্বারা হ্যান্ডল করা হবে
    ON_BN_CLICKED(IDC_BUTTON, OnButtonClicked)  // IDC_BUTTON এর ক্লিক ইভেন্টকে OnButtonClicked হ্যান্ডলার দ্বারা হ্যান্ডল করা হবে
END_MESSAGE_MAP()

void CMyWindow::OnPaint() {
    // উইন্ডোর পেইন্ট অপারেশন
}

void CMyWindow::OnButtonClicked() {
    // বাটন ক্লিক হলে কাজ করবে
    AfxMessageBox(_T("Button Clicked"));
}

এখানে, OnPaint() এবং OnButtonClicked() দুটি ফাংশন যথাক্রমে WM_PAINT এবং BN_CLICKED মেসেজগুলো হ্যান্ডল করছে।


MFC এর ইভেন্ট এবং মেসেজ টাইপ

MFC তে ইভেন্ট এবং মেসেজ দুটি প্রধান শ্রেণীতে বিভক্ত করা যেতে পারে:

  1. UI (User Interface) Events: এগুলি ইউজারের ইন্টারঅ্যাকশনের মাধ্যমে ঘটে, যেমন বাটন ক্লিক, কীবোর্ড ইনপুট, মাউস মুভমেন্ট ইত্যাদি। এই মেসেজগুলো UI কম্পোনেন্ট (যেমন বাটন, এডিট বক্স, চেকবক্স) এর মাধ্যমে প্রসেস হয়।
  2. System Events: এগুলি উইন্ডোজ সিস্টেম বা অ্যাপ্লিকেশনের নিজস্ব ইভেন্ট, যেমন উইন্ডো রিসাইজ, উইন্ডো ড্রয়িং, মাউস হোভার ইত্যাদি।

UI Events উদাহরণ

  • Button Click: ON_BN_CLICKED
  • Key Press: ON_WM_KEYDOWN
  • Mouse Click: ON_WM_LBUTTONDOWN

System Events উদাহরণ

  • Window Resize: ON_WM_SIZE
  • Window Painting: ON_WM_PAINT
  • Window Closing: ON_WM_CLOSE

Event Handler Functions

MFC তে, যখন কোনো মেসেজ একটি উইন্ডোতে পৌঁছায়, তখন সেই মেসেজের জন্য একটি নির্দিষ্ট event handler ফাংশন কল করা হয়। এই হ্যান্ডলার ফাংশনগুলো সেই ইভেন্টের জন্য নির্দিষ্ট কাজ বা লজিক পরিচালনা করে। MFC তে এই হ্যান্ডলারগুলো সাধারণত afx_msg কিওয়ার্ড দ্বারা ডিক্লেয়ার করা হয়।

উদাহরণ

class CMyDlg : public CDialogEx {
    afx_msg void OnBnClickedOk();
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);

    DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
    ON_BN_CLICKED(IDOK, &CMyDlg::OnBnClickedOk)
    ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

void CMyDlg::OnBnClickedOk() {
    AfxMessageBox(_T("OK Button Clicked"));
}

void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) {
    AfxMessageBox(_T("Mouse Moved"));
}

এখানে OnBnClickedOk() এবং OnMouseMove() ফাংশনগুলো যথাক্রমে বাটন ক্লিক এবং মাউস মুভমেন্ট ইভেন্ট হ্যান্ডল করছে।


Message Handling Process

  1. Message Dispatching: যখন কোনো মেসেজ একটি উইন্ডোতে আসে, উইন্ডোটি PreTranslateMessage ফাংশনে যাচ্ছেঃ
    • এটি ইভেন্টটি অ্যাপ্লিকেশনের মেসেজ কিউ থেকে বের করে নেয়।
  2. Message Mapping: মেসেজটি তারপর Message Map এ যাওয়া হয় যেখানে মেসেজটি তার হ্যান্ডলার ফাংশনের সাথে যুক্ত করা হয়।
  3. Event Handling: মেসেজটি সংশ্লিষ্ট হ্যান্ডলার ফাংশনে পৌঁছায় এবং সেখানে ডিফাইন করা লজিক কার্যকর করা হয়।

সারাংশ

MFC তে Events এবং Message Handling Mechanism অ্যাপ্লিকেশনটির কার্যকারিতা এবং ইউজার ইন্টারফেসের সাথে ইন্টারঅ্যাকশন পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ। মেসেজ ম্যাপ ব্যবহারের মাধ্যমে, MFC ডেভেলপাররা বিভিন্ন সিস্টেম ইভেন্ট এবং ইউজারের ইন্টারঅ্যাকশনের প্রতি প্রতিক্রিয়া জানাতে সক্ষম হয়, যেমন বাটন ক্লিক, মাউস মুভমেন্ট, কীবোর্ড ইনপুট, ইত্যাদি। এই মেসেজ হ্যান্ডলিং সিস্টেম অ্যাপ্লিকেশনটির ইভেন্ট ড্রিভেন প্রকৃতি নিশ্চিত করে, যা ব্যবহারকারীর ইন্টারঅ্যাকশন এর দ্রুত এবং কার্যকর প্রতিক্রিয়া প্রদান করে।

Content added By

MFC এর Message Map এবং Message Handling

407

MFC (Microsoft Foundation Classes) অ্যাপ্লিকেশনে Message Map এবং Message Handling হলো দুটি অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট যা ইভেন্ট ড্রিভেন প্রোগ্রামিং এ ব্যবহৃত হয়। MFC উইন্ডো সিস্টেমে যখন কোনো ইউজার ইন্টারঅ্যাকশন বা উইন্ডো ইভেন্ট ঘটে, তখন সেগুলো সংশ্লিষ্ট Message Map এর মাধ্যমে প্রোসেস করা হয় এবং সঠিক Message Handler কল করা হয়।

Message Map এবং Message Handling এর মাধ্যমে, আপনি বিভিন্ন ধরনের মেসেজ যেমন কীবোর্ড, মাউস ক্লিক, পেইন্টিং, উইন্ডো রিফ্রেশ ইত্যাদি ইভেন্টের জন্য কোড লিখতে পারেন।


Message Map কী?

Message Map হল একটি ম্যাপ যা উইন্ডো বা কন্ট্রোলের বিভিন্ন ইভেন্টের সাথে সঠিক ফাংশন (হ্যান্ডলার) সংযুক্ত করে। এটি MFC-তে উইন্ডো মেসেজের (যেমন, বাটন ক্লিক, কীবোর্ড ইনপুট, উইন্ডো রিফ্রেশ ইত্যাদি) হ্যান্ডলিং এর জন্য ব্যবহৃত হয়। MFC Message Map ম্যাক্রো ব্যবহারের মাধ্যমে একটি সিস্টেম তৈরি করে যা বিভিন্ন মেসেজকে সংশ্লিষ্ট ফাংশনের সাথে ম্যাপ করে দেয়।

MFC উইন্ডো মেসেজ হ্যান্ডল করার জন্য ON_ প্রিফিক্স দিয়ে ম্যাক্রো ব্যবহার করা হয়, যেমন ON_BN_CLICKED, ON_WM_PAINT ইত্যাদি।


Message Map এর গঠন

MFC তে একটি Message Map সাধারণত দুটি অংশে ভাগ করা হয়:

  1. Message Declaration: এটি ক্লাসের হেডার ফাইলে হয়, যেখানে ম্যাক্রো দ্বারা বিভিন্ন মেসেজ ডিক্লেয়ার করা হয়।
  2. Message Map Implementation: এটি ক্লাসের সোস ফাইলে হয়, যেখানে প্রতিটি ম্যাক্রোকে সংশ্লিষ্ট ফাংশনের সাথে ম্যাপ করা হয়।

Message Map এর উদাহরণ

ধরা যাক, একটি বাটন ক্লিক হলে একটি মেসেজ বক্স দেখানো হবে। এর জন্য প্রথমে আপনাকে Message Map ডিক্লেয়ার করতে হবে।

1. Message Map Declaration

Header File (.h):

class CMyDialog : public CDialogEx
{
public:
    CMyDialog(CWnd* pParent = nullptr);   // Standard constructor
    enum { IDD = IDD_MYDIALOG };  // Dialog ID

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    DECLARE_MESSAGE_MAP()

public:
    afx_msg void OnButtonClicked();  // Button click handler
};

2. Message Map Implementation

Source File (.cpp):

BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
    ON_BN_CLICKED(IDC_BUTTON_OK, &CMyDialog::OnButtonClicked)  // Button click event
END_MESSAGE_MAP()

void CMyDialog::OnButtonClicked()
{
    AfxMessageBox(_T("Button Clicked!"));
}

এখানে, ON_BN_CLICKED(IDC_BUTTON_OK, &CMyDialog::OnButtonClicked) ম্যাক্রোটি IDC_BUTTON_OK বাটন ক্লিক হলে OnButtonClicked() ফাংশনকে কল করে।


Message Handling কী?

Message Handling হল একটি প্রক্রিয়া, যেখানে বিভিন্ন উইন্ডো মেসেজ বা ইভেন্টগুলোর জন্য হ্যান্ডলার ফাংশনগুলি কল করা হয়। MFC তে Message Handler ফাংশনগুলো একটি নির্দিষ্ট মেসেজ ট্রিগার হলে কল হয় এবং তাদের মধ্যে যথাযথ অ্যাকশন সম্পাদিত হয়।

উদাহরণস্বরূপ, উইন্ডো রিফ্রেশ (পেইন্টিং) বা কীবোর্ড ইনপুটের জন্য আলাদা আলাদা Message Handler ফাংশন থাকতে পারে।


Message Handling এর উদাহরণ

1. WM_PAINT (Window Painting) Message Handling

WM_PAINT মেসেজ যখন অ্যাপ্লিকেশন উইন্ডো রিফ্রেশ করতে চায় (অর্থাৎ, উইন্ডো পুনরায় আঁকতে চায়) তখন এটি ট্রিগার হয়। এই মেসেজটি হ্যান্ডল করার জন্য OnPaint() ফাংশন ব্যবহার করা হয়।

Code Example:

void CMyDialog::OnPaint()
{
    CPaintDC dc(this);  // Device context for painting

    // Drawing a simple line
    dc.MoveTo(10, 10);   // Starting point
    dc.LineTo(200, 200); // Ending point

    // Drawing a rectangle
    dc.Rectangle(50, 50, 150, 150); 
}

এখানে, OnPaint() ফাংশনটি WM_PAINT মেসেজ দ্বারা কল হয় এবং উইন্ডোতে ড্রইং কার্যক্রম সম্পাদন করে।

2. WM_KEYDOWN (Key Down) Message Handling

কীবোর্ড থেকে ইনপুট নেয়ার জন্য WM_KEYDOWN মেসেজ ব্যবহার করা হয়। আপনি যখন কীবোর্ডের একটি কী প্রেস করবেন, তখন এই মেসেজ ট্রিগার হবে এবং এর সাথে সংশ্লিষ্ট হ্যান্ডলার ফাংশনকে কল করবে।

Code Example:

afx_msg void CMyDialog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // Check if the pressed key is the 'Enter' key
    if (nChar == VK_RETURN)
    {
        AfxMessageBox(_T("Enter key pressed"));
    }
}

এখানে, OnKeyDown() ফাংশনটি WM_KEYDOWN মেসেজ দ্বারা কল হয় এবং কীবোর্ড থেকে কোনো কী প্রেস হলে সেই কী এর উপর নির্ভর করে একটি অ্যাকশন নেয়।


MFC তে Message Map ব্যবহারের উপকারিতা

  1. Code Clarity: Message Map এর মাধ্যমে, কোড পরিষ্কার এবং সুসংগঠিত হয়। প্রতিটি মেসেজের জন্য একটি নির্দিষ্ট হ্যান্ডলার ফাংশন থাকতে পারে।
  2. Event-Driven Programming: MFC এর Message Map প্রোগ্রামকে ইভেন্ট-ড্রিভেন (Event-Driven) করার জন্য সহায়তা করে, যেখানে প্রতিটি ইভেন্ট বা মেসেজের জন্য একটি নির্দিষ্ট অ্যাকশন বা হ্যান্ডলার কল হয়।
  3. Ease of Maintenance: Message Map ব্যবহার করলে কোডের রক্ষণাবেক্ষণ সহজ হয়, কারণ প্রতিটি মেসেজের জন্য একটি আলাদা হ্যান্ডলার ফাংশন থাকা সহজেই ট্র্যাক করা যায়।

Message Map এর অন্যান্য উদাহরণ

  1. Mouse Click Handling:
ON_WM_LBUTTONDOWN()
  1. Window Resizing:
ON_WM_SIZE()
  1. Key Press:
ON_WM_KEYDOWN()

সারাংশ: MFC এর Message Map এবং Message Handling হলো অত্যন্ত গুরুত্বপূর্ণ কনসেপ্ট, যা ইভেন্ট ড্রিভেন প্রোগ্রামিং সক্ষম করে এবং উইন্ডো বা কন্ট্রোলের ইন্টারঅ্যাকশনের জন্য সঠিক ফাংশনগুলো কল করতে সহায়তা করে। Message Map এর মাধ্যমে আপনি বিভিন্ন উইন্ডো মেসেজ এবং কন্ট্রোল ইভেন্টগুলোর জন্য হ্যান্ডলার ফাংশন সংজ্ঞায়িত করতে পারেন, যার ফলে আপনার অ্যাপ্লিকেশন আরও ইন্টারঅ্যাকটিভ এবং কার্যকরী হয়।

Content added By

WM_PAINT, WM_CLOSE, WM_SIZE ইত্যাদি উইন্ডো ম্যাসেজ

338

MFC (Microsoft Foundation Classes) এর মাধ্যমে উইন্ডো অ্যাপ্লিকেশন তৈরি করার সময়, বিভিন্ন উইন্ডো ম্যাসেজ (Window Messages) ব্যবহার করা হয়, যা উইন্ডোর আচরণ এবং ইন্টারঅ্যাকশন কন্ট্রোল করতে সাহায্য করে। MFC তে এই ম্যাসেজগুলো স্বয়ংক্রিয়ভাবে হ্যান্ডল করা হয়, তবে প্রয়োজনে আপনি নিজে এগুলো হ্যান্ডল করতে পারেন।

WM_PAINT, WM_CLOSE, WM_SIZE এবং অন্যান্য উইন্ডো ম্যাসেজগুলি হল উইন্ডোর জীবনচক্রের অংশ, যা গ্রাফিক্যাল ড্রইং, উইন্ডোর আকার পরিবর্তন, এবং উইন্ডো বন্ধ করার মতো কার্যকলাপ পরিচালনা করে।


WM_PAINT ম্যাসেজ

WM_PAINT ম্যাসেজটি যখন উইন্ডো বা কন্ট্রোলের ভিউ আপডেট করতে হয়, তখন তৎকালীন সিস্টেম থেকে পাঠানো হয়। সাধারণত, যখন উইন্ডো রিফ্রেশ করা হয় (যেমন উইন্ডো সাইজ পরিবর্তন, অথবা অন্য কোনো কারণে উইন্ডো পুনরায় দেখা যায়), তখন WM_PAINT ম্যাসেজটি কল হয়। এই ম্যাসেজের মাধ্যমে আপনি উইন্ডোর কন্টেন্ট ড্রয়িং করতে পারেন।

WM_PAINT হ্যান্ডল করার জন্য OnPaint মেথড ব্যবহার করা হয়, যেখানে আপনি উইন্ডোর কন্টেন্ট কাস্টম ড্র করতে পারেন।

WM_PAINT হ্যান্ডল করার উদাহরণ:

void CMyWnd::OnPaint()
{
    CPaintDC dc(this); // Device Context for painting

    // Draw a red rectangle
    CRect rect(10, 10, 200, 200);
    dc.FillSolidRect(rect, RGB(255, 0, 0)); // Red background
}

এখানে, OnPaint মেথডে CPaintDC ব্যবহার করা হয়েছে, যা ড্রইং ডিভাইসের সাথে যোগাযোগ স্থাপন করে। রেকট্যাঙ্গেল ড্র করতে FillSolidRect ফাংশন ব্যবহার করা হয়েছে।


WM_CLOSE ম্যাসেজ

WM_CLOSE ম্যাসেজটি একটি উইন্ডো বন্ধ করার জন্য ব্যবহৃত হয়। সাধারণত যখন ব্যবহারকারী উইন্ডোটি বন্ধ করতে চান (যেমন উইন্ডোর "X" বাটন ক্লিক করলে), তখন এই ম্যাসেজটি পাঠানো হয়। আপনি WM_CLOSE ম্যাসেজ হ্যান্ডল করে উইন্ডো বন্ধ হওয়ার আগে কিছু ক্লিনআপ বা চেক করতে পারেন, যেমন ব্যবহারকারীকে কনফার্মেশন ডায়ালগ দেখানো, ডাটা সেভ করা ইত্যাদি।

WM_CLOSE হ্যান্ডল করার উদাহরণ:

void CMyWnd::OnClose()
{
    if (AfxMessageBox(_T("Are you sure you want to exit?"), MB_YESNO) == IDYES)
    {
        CWnd::OnClose(); // Close the window
    }
}

এখানে, OnClose মেথডে, প্রথমে একটি কনফার্মেশন মেসেজ বক্স দেখানো হয়েছে। যদি ব্যবহারকারী "Yes" বেছে নেন, তবে উইন্ডো বন্ধ হবে।


WM_SIZE ম্যাসেজ

WM_SIZE ম্যাসেজটি তখন পাঠানো হয় যখন উইন্ডোর আকার পরিবর্তিত হয় (যেমন উইন্ডোটি রিসাইজ করা হলে)। এটি উইন্ডোর নতুন আকার (প্রস্থ এবং উচ্চতা) সম্পর্কে তথ্য প্রদান করে। আপনি এই ম্যাসেজটি হ্যান্ডল করে উইন্ডোর আকার পরিবর্তনের উপর নির্ভর করে বিশেষ কোন লেআউট বা রেন্ডারিং কাজ করতে পারেন।

WM_SIZE হ্যান্ডল করার উদাহরণ:

void CMyWnd::OnSize(UINT nType, int cx, int cy)
{
    CWnd::OnSize(nType, cx, cy);

    // Handle window resizing logic
    // For example, adjusting the position of controls
    if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)
    {
        // Code to resize controls based on new window size
        m_button.MoveWindow(10, 10, cx - 20, cy - 20); // Resize a button
    }
}

এখানে, OnSize মেথডে, উইন্ডোর নতুন আকার (প্রস্থ cx এবং উচ্চতা cy) পাওয়ার পরে, আপনি উইন্ডোর কন্ট্রোলগুলোর অবস্থান বা আকার পরিবর্তন করতে পারেন।


অন্যান্য সাধারণ উইন্ডো ম্যাসেজ

MFC তে আরও অনেক উইন্ডো ম্যাসেজ রয়েছে যেগুলো দিয়ে উইন্ডোর আচরণ নিয়ন্ত্রণ করা যায়। কিছু গুরুত্বপূর্ণ উইন্ডো ম্যাসেজ:

WM_CREATE

এই ম্যাসেজটি তখন পাঠানো হয় যখন একটি উইন্ডো তৈরি করা হয়। এটি উইন্ডোর শুরুতে কাস্টমাইজেশন করার জন্য ব্যবহৃত হয়।

void CMyWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // Initialization code here
    return 0;
}

WM_DESTROY

এই ম্যাসেজটি তখন পাঠানো হয় যখন উইন্ডো ধ্বংস করা হয় (যেমন উইন্ডো বন্ধ হলে)। এটি সাধারণত উইন্ডো ধ্বংসের আগে কিছু ক্লিনআপ কাজ করতে ব্যবহৃত হয়।

void CMyWnd::OnDestroy()
{
    CWnd::OnDestroy();
    // Clean-up code here
}

WM_COMMAND

এই ম্যাসেজটি তখন পাঠানো হয় যখন ব্যবহারকারী কন্ট্রোল (যেমন বাটন ক্লিক করা) দিয়ে কোনো অ্যাকশন ট্রিগার করেন। এই মেসেজের মাধ্যমে আপনি কন্ট্রোল ইভেন্ট হ্যান্ডল করতে পারেন।

void CMyWnd::OnCommand(UINT nID)
{
    if (nID == ID_FILE_EXIT)
    {
        PostMessage(WM_CLOSE); // Close the window
    }
}

সারাংশ

MFC তে WM_PAINT, WM_CLOSE, WM_SIZE ইত্যাদি উইন্ডো ম্যাসেজগুলি উইন্ডোর আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। WM_PAINT ম্যাসেজ গ্রাফিক্স ড্রইংয়ের জন্য, WM_CLOSE উইন্ডো বন্ধ করার জন্য এবং WM_SIZE উইন্ডোর আকার পরিবর্তন সংক্রান্ত তথ্য দেয়। এই উইন্ডো ম্যাসেজগুলো হ্যান্ডল করে আপনি আপনার অ্যাপ্লিকেশনের ইন্টারঅ্যাকশন এবং প্রদর্শন কাস্টমাইজ করতে পারেন।

Content added By

Custom Messages তৈরি এবং ব্যবহার

632

MFC (Microsoft Foundation Classes)-এ Custom Messages হল বিশেষ মেসেজ যা অ্যাপ্লিকেশন বা উইন্ডো ক্লাসের মধ্যে নির্দিষ্ট কাজ করার জন্য প্রেরিত হয়। MFC তে ডিফল্ট মেসেজগুলি যেমন WM_PAINT, WM_KEYDOWN, ইত্যাদি থাকে, কিন্তু কখনও কখনও আপনাকে নিজের নির্দিষ্ট কাজ সম্পাদন করার জন্য Custom Messages তৈরি করতে হতে পারে। Custom Messages ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের কাস্টম কার্যকারিতা যুক্ত করতে পারেন এবং বিভিন্ন উইন্ডো বা কন্ট্রোলের মধ্যে ইন্টারঅ্যাকশন পরিচালনা করতে পারেন।


Custom Message তৈরি

MFC তে Custom Messages সাধারণত উইন্ডো মেসেজের মান (message ID) কাস্টমাইজ করে তৈরি করা হয়। Custom Message তৈরি করতে, আপনাকে প্রথমে একটি নতুন মেসেজ আইডি ডিফাইন করতে হবে। সাধারণত, এগুলো WM_USER বা এর উপরে শুরু হয়, কারণ WM_USER হল Windows API দ্বারা রিজার্ভড মেসেজের পরবর্তী সংখ্যা।

Custom Message ডিফাইন করা

Code Example:

#define WM_MY_CUSTOM_MESSAGE (WM_USER + 1)

এখানে WM_MY_CUSTOM_MESSAGE একটি কাস্টম মেসেজ আইডি যা WM_USER থেকে শুরু হয়ে নতুন মেসেজ আইডি তৈরি করেছে। WM_USER হল একটি রিজার্ভড সংখ্যা যা ব্যবহারকারীর মেসেজের জন্য ব্যবহৃত হয়।


Custom Message পাঠানো

একবার আপনি একটি Custom Message তৈরি করলে, আপনি এই মেসেজটি অন্য উইন্ডো বা কন্ট্রোলে পাঠাতে পারেন। Custom Message পাঠানোর জন্য, আপনি PostMessage() অথবা SendMessage() ফাংশন ব্যবহার করতে পারেন। PostMessage() অ্যাসিনক্রোনাসভাবে মেসেজ পাঠায়, আর SendMessage() সিঙ্ক্রোনাসভাবে মেসেজ পাঠায় এবং মেসেজ প্রক্রিয়া সম্পন্ন না হওয়া পর্যন্ত অপেক্ষা করে।

PostMessage বা SendMessage ব্যবহার করা

Code Example:

// মেসেজ পাঠানোর উদাহরণ
PostMessage(WM_MY_CUSTOM_MESSAGE, wParam, lParam);

এখানে PostMessage() ব্যবহার করা হয়েছে WM_MY_CUSTOM_MESSAGE মেসেজ পাঠানোর জন্য। wParam এবং lParam হল অতিরিক্ত ডাটা যা আপনি মেসেজের সাথে পাঠাতে পারেন।


Custom Message গ্রহণ করা

Custom Message গ্রহণ করার জন্য, আপনাকে মেসেজ হ্যান্ডলারের মাধ্যমে তা প্রক্রিয়া করতে হবে। ON_MESSAGE() ম্যাক্রো ব্যবহার করে আপনি Custom Message হ্যান্ডলিং করতে পারেন। যখন নির্দিষ্ট উইন্ডো বা কন্ট্রোল আপনার Custom Message গ্রহণ করবে, তখন সংশ্লিষ্ট মেসেজ হ্যান্ডলার কল হবে এবং আপনি সেখানে আপনার কোড বা কার্যকারিতা রাখতে পারবেন।

MFC-তে Custom Message হ্যান্ডলার তৈরি করা

Code Example:

BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
    ON_MESSAGE(WM_MY_CUSTOM_MESSAGE, OnMyCustomMessage)
END_MESSAGE_MAP()

LRESULT CMyWnd::OnMyCustomMessage(WPARAM wParam, LPARAM lParam)
{
    // কাস্টম মেসেজ হ্যান্ডলিং কোড
    AfxMessageBox(_T("Custom Message Received!"));
    return 0; // মেসেজটি সঠিকভাবে প্রক্রিয়া করা হয়েছে।
}

এখানে ON_MESSAGE() ম্যাক্রোটি WM_MY_CUSTOM_MESSAGE মেসেজটি হ্যান্ডল করার জন্য OnMyCustomMessage() ফাংশন কল করে। আপনি এখানে আপনার কাস্টম লজিক বা কার্যকারিতা রাখবেন।


Custom Message এর সাথে অতিরিক্ত ডেটা পাঠানো

Custom Messages-এর সাথে আপনি অতিরিক্ত ডেটাও পাঠাতে পারেন, যেমন সংখ্যার মান, পয়েন্ট, স্ট্রিং ইত্যাদি। এটি wParam এবং lParam এর মাধ্যমে করা হয়, যেখানে wParam এবং lParam হল অতিরিক্ত ডেটা ধারণ করার জন্য ব্যবহৃত ফিল্ড। আপনি এসব ফিল্ডে আপনার পছন্দমত ডেটা রাখতে পারেন এবং পরে হ্যান্ডলারের মধ্যে তা ব্যবহার করতে পারেন।

উদাহরণস্বরূপ অতিরিক্ত ডেটা পাঠানো

Code Example:

// Custom message with additional data
PostMessage(WM_MY_CUSTOM_MESSAGE, 123, (LPARAM)_T("Hello, MFC!"));

এখানে, wParam হিসেবে একটি integer মান (123) এবং lParam হিসেবে একটি স্ট্রিং পাঠানো হচ্ছে। আপনি এই ডেটাগুলো পরে মেসেজ হ্যান্ডলার থেকে গ্রহণ করে প্রক্রিয়া করতে পারবেন।

Code Example (Handler):

LRESULT CMyWnd::OnMyCustomMessage(WPARAM wParam, LPARAM lParam)
{
    int number = (int)wParam;           // wParam থেকে integer প্রাপ্তি
    CString message = (CString)lParam;  // lParam থেকে string প্রাপ্তি

    CString msg;
    msg.Format(_T("Received number: %d, message: %s"), number, message);
    AfxMessageBox(msg);

    return 0;
}

এখানে, মেসেজ হ্যান্ডলারে wParam এবং lParam থেকে অতিরিক্ত ডেটা গ্রহণ করা হয়েছে এবং একটি মেসেজ বক্সে দেখানো হয়েছে।


Custom Message এর ব্যবহার

Custom Messages সাধারণত নিচের কাজগুলোতে ব্যবহৃত হয়:

  • কমিউনিকেশন: বিভিন্ন উইন্ডো বা কন্ট্রোলের মধ্যে যোগাযোগ স্থাপন করার জন্য।
  • ডেটা পাসিং: এক উইন্ডো থেকে অন্য উইন্ডোতে ডেটা পাঠানোর জন্য।
  • ইউজার ইন্টারফেস কাস্টমাইজেশন: উইন্ডো বা কন্ট্রোলের আচরণ কাস্টমাইজ করার জন্য।

সারাংশ

Custom Messages হল এমন মেসেজ যা আপনি নিজের অ্যাপ্লিকেশনে বিশেষভাবে তৈরি করতে পারেন। এগুলি অ্যাপ্লিকেশন বা উইন্ডো ক্লাসের মধ্যে নির্দিষ্ট কার্যকারিতা সম্পাদনের জন্য ব্যবহৃত হয়। Custom Messages পাঠানোর জন্য PostMessage() বা SendMessage() ফাংশন ব্যবহার করা হয় এবং এগুলি গ্রহণ করার জন্য ON_MESSAGE() ম্যাক্রো ব্যবহার করা হয়। এগুলির সাহায্যে আপনি কাস্টম ডেটা পাঠাতে এবং উইন্ডো বা কন্ট্রোলের আচরণ কাস্টমাইজ করতে পারেন।

Content added By

Event Handling এবং Callback Functions

403

Event Handling এবং Callback Functions হল MFC (Microsoft Foundation Classes)-এ ব্যবহারকারী ইন্টারফেস (UI) এর ইন্টারঅ্যাকটিভিটি পরিচালনার প্রধান উপাদান। এগুলি ব্যবহারকারীর সাথে অ্যাপ্লিকেশনের যোগাযোগের জন্য প্রয়োজনীয় ইভেন্টগুলির প্রতিক্রিয়া জানাতে ব্যবহৃত হয়, যেমন বাটন ক্লিক, কীবোর্ড ইনপুট, মাউস মুভমেন্ট ইত্যাদি। MFC এ, ইভেন্ট হ্যান্ডলিং এবং কলব্যাক ফাংশন ব্যবহার করে অ্যাপ্লিকেশন আরও ইন্টারঅ্যাকটিভ এবং কার্যকরী হয়।


Event Handling in MFC

Event Handling হল এমন একটি প্রক্রিয়া যেখানে নির্দিষ্ট কিছু ব্যবহারকারী অ্যাকশন (যেমন মাউস ক্লিক, কী প্রেস ইত্যাদি) ঘটলে একটি নির্দিষ্ট ফাংশন বা মেথড ট্রিগার হয়। MFC এ, এই প্রক্রিয়াটি সাধারণত উইন্ডো মেসেজ বা কন্ট্রোলের ইভেন্ট দ্বারা পরিচালিত হয়।

MFC অ্যাপ্লিকেশনে ইভেন্ট হ্যান্ডলিং করার জন্য Message Map ব্যবহার করা হয়, যা নির্দিষ্ট মেসেজের জন্য হ্যান্ডলার ফাংশনগুলো ম্যাপ করে। এই মেসেজ ম্যানেজমেন্ট সিস্টেমের মাধ্যমে, MFC অ্যাপ্লিকেশনটি নির্দিষ্ট ইভেন্টের প্রতিক্রিয়া প্রদান করতে পারে।


MFC এ ইভেন্ট হ্যান্ডলিং

Message Map

MFC এ ইভেন্ট হ্যান্ডলিংয়ের জন্য Message Map ব্যবহৃত হয়। এটি একটি ম্যাপ যা Windows মেসেজগুলি এবং তাদের সংশ্লিষ্ট মেথডের মধ্যে সম্পর্ক স্থাপন করে। যখন একটি নির্দিষ্ট মেসেজ (যেমন WM_COMMAND, WM_MOUSEMOVE) অ্যাপ্লিকেশনে আসে, তখন MFC সেই মেসেজের জন্য সংশ্লিষ্ট মেথডটি কল করে।

Message Map একটি ম্যাক্রো BEGIN_MESSAGE_MAP এবং END_MESSAGE_MAP দিয়ে সংজ্ঞায়িত করা হয়।

Code Example:

// In header file (.h)
class CMyDialog : public CDialogEx
{
    // Other declarations...
    afx_msg void OnButtonClick();  // Button click handler
    DECLARE_MESSAGE_MAP()
};

// In implementation file (.cpp)
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
    ON_BN_CLICKED(IDC_BUTTON, &CMyDialog::OnButtonClick)  // Map the button click to handler function
END_MESSAGE_MAP()

void CMyDialog::OnButtonClick()
{
    AfxMessageBox(_T("Button clicked!"));
}

এখানে, ON_BN_CLICKED(IDC_BUTTON, &CMyDialog::OnButtonClick) ম্যাক্রোটি IDC_BUTTON বাটন ক্লিক হওয়া ঘটলে OnButtonClick ফাংশনটি কল করবে। এটি একটি সাধারণ ইভেন্ট হ্যান্ডলিং উদাহরণ।


Callback Functions in MFC

Callback Functions হল ফাংশনগুলো যা অ্যাপ্লিকেশন প্রোগ্রামকে একটি নির্দিষ্ট কাজ করার জন্য ডাকা হয় যখন কোনো নির্দিষ্ট ইভেন্ট ঘটে বা কোনো শর্ত পূর্ণ হয়। Callback Functions সাধারণত Windows API বা MFC এর ইভেন্ট ড্রিভেন প্রোগ্রামিংয়ে ব্যবহৃত হয়।

MFC এ callback ফাংশনগুলি সাধারণত মেসেজ হ্যান্ডলিং বা UI কন্ট্রোলের জন্য ব্যবহৃত হয়। MFC উইন্ডো বা কন্ট্রোলের জন্য ইভেন্ট ট্রিগার করার সময়, সেগুলি ডায়নামিকভাবে একটি ফাংশনকে কল করে যা সেই ইভেন্টের সঠিক কার্যাবলি পরিচালনা করে।

Example of Callback Function in MFC:

ধরা যাক, আপনি একটি টাইমার ইভেন্টে callback ফাংশন ব্যবহার করতে চান, যা প্রতি নির্দিষ্ট সময় অন্তর ট্রিগার হবে।

Code Example:

void CMyDialog::OnTimer(UINT_PTR nIDEvent)
{
    // Code to handle timer event
    AfxMessageBox(_T("Timer triggered!"));
    CDialogEx::OnTimer(nIDEvent);
}

// Set the timer
SetTimer(1, 1000, NULL);  // Timer ID, Interval (in ms), Timer procedure

এখানে OnTimer ফাংশনটি একটি callback ফাংশন হিসেবে কাজ করছে, যা SetTimer ফাংশনের মাধ্যমে নির্দিষ্ট সময় পর পর কল হবে।


Callback Functions এর ব্যবহার

Callback functions সাধারণত দুইটি অবস্থায় ব্যবহৃত হয়:

  1. Event-driven programming: যখন কিছু ইভেন্ট ঘটে এবং আমরা চাই যে একটি নির্দিষ্ট ফাংশন কল হোক, যেমন বাটন ক্লিক, মাউস মুভমেন্ট ইত্যাদি।
  2. Asynchronous programming: যখন একটি নির্দিষ্ট কাজ ব্যাকগ্রাউন্ডে চলতে থাকে, এবং তার পরিণাম পাওয়া গেলে বা কাজটি শেষ হলে একটি কলব্যাক ফাংশন ট্রিগার হয়। যেমন ফাইল ডাউনলোড, ডেটাবেস কোয়েরি ইত্যাদি।

Event Handling এবং Callback Functions এর মধ্যে পার্থক্য

  • Event Handling: এটি ইভেন্ট-ড্রিভেন প্রোগ্রামিং-এর অংশ, যেখানে একটি নির্দিষ্ট ব্যবহারকারী অ্যাকশন (যেমন বাটন ক্লিক, কী প্রেস) ঘটলে, সেই অ্যাকশনকে ট্রিগার করার জন্য একটি নির্দিষ্ট ফাংশন কল করা হয়।
  • Callback Functions: এটি একটি ফাংশন যা অন্যান্য ফাংশন বা সিস্টেম দ্বারা নির্দিষ্ট শর্ত পূর্ণ হলে কল করা হয়। এগুলি ইভেন্ট-ড্রিভেন বা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়।

সারাংশ

MFC তে Event Handling এবং Callback Functions উভয়ই অত্যন্ত গুরুত্বপূর্ণ। Event Handling দ্বারা আমরা ব্যবহারকারীর অ্যাকশনের জন্য ইভেন্ট হ্যান্ডলিং করতে পারি এবং Callback Functions দ্বারা আমরা নির্দিষ্ট কার্যাবলী পরিচালনা করতে পারি, যা অন্যান্য ফাংশন বা সিস্টেম দ্বারা ট্রিগার হয়। MFC এর মাধ্যমে এই দুটি কৌশল ব্যবহার করে, আমরা একটি ইন্টারঅ্যাকটিভ এবং কার্যকরী অ্যাপ্লিকেশন তৈরি করতে সক্ষম হই।

Content added By
Promotion

Are you sure to start over?

Loading...