MFC (Microsoft Foundation Classes) এ Custom Control তৈরি করা মানে এমন একটি কন্ট্রোল ডিজাইন করা যা আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী কাস্টমাইজড এবং ড্রয়িং করা হয়। একটি সাধারণ উদাহরণ হলো Owner-Drawn Control, যা এমন কন্ট্রোল যা ব্যবহৃত অ্যাপ্লিকেশন দ্বারা ড্র করা হয়, অর্থাৎ কন্ট্রোলের চেহারা এবং আচরণ পুরোপুরি কাস্টমাইজ করা হয়।
Owner-Drawn Control তৈরি করার মাধ্যমে আপনি একটি কন্ট্রোলের (যেমন, বাটন, চেকবক্স, লিস্ট বক্স) আউটপুট কাস্টমভাবে ডিজাইন করতে পারেন। MFC তে এটি করতে WM_DRAWITEM মেসেজ ব্যবহার করা হয়, যা কন্ট্রোলের ড্রইং প্রক্রিয়াকে কাস্টমাইজ করতে সাহায্য করে।
Owner-Drawn Control তৈরি করার প্রক্রিয়া
Owner-Drawn Control তৈরি করার জন্য, সাধারণত কয়েকটি প্রধান পদক্ষেপ অনুসরণ করতে হয়:
- Control Creation: প্রথমে কন্ট্রোল তৈরি করতে হবে, যেমন একটি Button, ComboBox, বা ListBox। এই কন্ট্রোলকে "Owner-Draw" হিসেবে চিহ্নিত করতে হবে।
- Handle WM_DRAWITEM Message: কন্ট্রোলটি যখন ড্র হয়, তখন WM_DRAWITEM মেসেজটি ডেলিভার করা হয়। এই মেসেজটি ক্যাচ করে কাস্টম ড্রইং রুটিন তৈরি করতে হয়।
- Handle Drawing: কাস্টম ড্রইং করার জন্য, আপনি CDC অবজেক্ট ব্যবহার করবেন এবং প্রোগ্রাম অনুযায়ী কাস্টম রেন্ডারিং কোড লিখবেন।
উদাহরণ: Owner-Draw Button তৈরি
ধরা যাক, আপনি একটি কাস্টম Owner-Draw Button তৈরি করতে চান, যেটি রঙ এবং টেক্সট স্টাইল কাস্টমাইজ করবে।
Step 1: Button তৈরি করুন
প্রথমে Dialog Box বা উইন্ডোতে একটি বাটন যোগ করুন এবং এটি Owner-Draw হিসেবে চিহ্নিত করুন।
- Resource View এ গিয়ে Dialog নির্বাচন করুন।
- একটি Button কন্ট্রোল যোগ করুন।
- Properties এ গিয়ে বাটনের Style নির্বাচন করে Owner-Draw নির্বাচন করুন।
Step 2: WM_DRAWITEM মেসেজ হ্যান্ডল করা
এখন কোডে WM_DRAWITEM মেসেজ হ্যান্ডল করতে হবে। এই মেসেজটি OnDrawItem মেথডের মাধ্যমে হ্যান্ডল করা হয়।
void CMyDialog::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if (nIDCtl == IDC_MYBUTTON) // Check if it's the custom button
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC); // Attach device context
CRect rect = lpDrawItemStruct->rcItem; // Get the rectangle of the button
// Draw background (e.g., light blue color)
dc.FillSolidRect(rect, RGB(173, 216, 230));
// Set the text color and font
dc.SetTextColor(RGB(255, 0, 0)); // Red text
CFont font;
font.CreatePointFont(120, _T("Arial"));
CFont* pOldFont = dc.SelectObject(&font);
// Draw text in the center of the button
CString strText;
GetDlgItem(IDC_MYBUTTON)->GetWindowText(strText);
dc.DrawText(strText, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// Restore old font
dc.SelectObject(pOldFont);
}
}
Step 3: Control Interaction
Owner-Draw Button-এর উপর ক্লিক করার সময় ইভেন্ট হ্যান্ডল করার জন্য, যেমন BN_CLICKED মেসেজ হ্যান্ডল করার জন্য, আপনি সাধারণভাবে ইভেন্ট হ্যান্ডলার ব্যবহার করবেন।
void CMyDialog::OnBnClickedMyButton()
{
AfxMessageBox(_T("Owner-Draw Button Clicked"));
}
Owner-Draw Control এর ড্রইং পদ্ধতি
- CDC (Device Context): ড্রইংয়ের জন্য, আপনি CDC অবজেক্ট ব্যবহার করবেন। এটি গ্রাফিক্স ড্র করার জন্য পেইন্টিং ডিভাইসের সাথে সংযোগ স্থাপন করে।
- LPDRAWITEMSTRUCT: এই স্ট্রাকচারটি WM_DRAWITEM মেসেজের মাধ্যমে প্রাপ্ত হয় এবং এতে কন্ট্রোলের রেকটেঙ্গুলার অ্যারিয়া, ড্রইং স্টাইল এবং অন্যান্য তথ্য থাকে।
- CFont, CPen, CBrush: কাস্টম ড্রইংয়ের জন্য বিভিন্ন গ্রাফিক্যাল অবজেক্ট ব্যবহার করা হয় যেমন কাস্টম ফন্ট, পেন (রেখা আঁকার জন্য), এবং ব্রাশ (পটভূমি পূর্ণ করার জন্য)।
সারাংশ
MFC তে Owner-Drawn Control তৈরি করা মানে আপনি একটি কন্ট্রোলের দৃশ্যমান আউটপুট কাস্টমাইজ করবেন। WM_DRAWITEM মেসেজ হ্যান্ডল করে, আপনি বিভিন্ন কন্ট্রোলের (যেমন, বাটন, চেকবক্স, লিস্ট বক্স) আউটপুট কাস্টমাইজ করতে পারেন। এই প্রক্রিয়াতে CDC অবজেক্ট ব্যবহার করে গ্রাফিক্যাল ড্রইং করা হয়, এবং আপনি কাস্টম পেন, ব্রাশ, ফন্ট ইত্যাদি ব্যবহার করে বিভিন্ন ডিজাইন তৈরি করতে পারেন। Owner-Drawn Control তৈরি করলে, আপনার অ্যাপ্লিকেশনের ইউজার ইন্টারফেসে আরও উন্নত এবং ইন্টারঅ্যাকটিভ কন্ট্রোল অন্তর্ভুক্ত করতে পারবেন।
Read more