MFC - विंडोज फंडामेंटल
इस अध्याय में, हम विंडोज के फंडामेंटल को कवर करेंगे। एक प्रोग्राम बनाने के लिए, जिसे एक एप्लिकेशन भी कहा जाता है, आप MFC के CWinApp से एक क्लास प्राप्त करते हैं।CWinApp के लिए खड़ा है Class for a Windows Application.
एक नया Win32 प्रोजेक्ट बनाकर एक सरल उदाहरण में देखें।
Step 1 - विज़ुअल स्टूडियो खोलें और फ़ाइल → नया → प्रोजेक्ट मेनू विकल्प पर क्लिक करें।
Step 2 - अब आप न्यू प्रोजेक्ट डायलॉग बॉक्स देख सकते हैं।
Step 3 - बाएं फलक से, टेम्पलेट → विज़ुअल C ++ → Win32 का चयन करें।
Step 4 - मध्य फलक में, Win32 प्रोजेक्ट चुनें।
Step 5- नाम फ़ील्ड में प्रोजेक्ट नाम 'MFCWindowDemo' दर्ज करें और जारी रखने के लिए ठीक क्लिक करें। आपको निम्नलिखित डायलॉग बॉक्स दिखाई देगा।
Step 6 - अगला।
Step 7 - ऊपर दिए गए संवाद बॉक्स में दिखाए गए विकल्पों का चयन करें और समाप्त पर क्लिक करें।
Step 8 - एक खाली प्रोजेक्ट बनाया जाता है।
Step 9 - इसे MFC प्रोजेक्ट बनाने के लिए, प्रोजेक्ट पर राइट-क्लिक करें और Properties को चुनें।
Step 10 - बाएं अनुभाग में, कॉन्फ़िगरेशन गुण → सामान्य पर क्लिक करें।
Step 11 - प्रोजेक्ट डिफॉल्ट सेक्शन में शेयर्ड डीएलएल ऑप्शन में यूज एमएफसी चुनें और ओके पर क्लिक करें।
Step 12 - एक नया स्रोत फ़ाइल जोड़ें।
Step 13 - अपने प्रोजेक्ट पर राइट-क्लिक करें और Add → New Item चुनें ...
Step 14 - टेम्प्लेट अनुभाग में, C ++ फ़ाइल (.cpp) पर क्लिक करें।
Step 15 - उदाहरण के रूप में नाम सेट करें और जोड़ें पर क्लिक करें।
खिड़की का निर्माण
किसी भी एप्लिकेशन के दो मुख्य भाग हैं -
- Class
- फ्रेम या खिड़की
हम निम्नलिखित चरणों का उपयोग करके एक विंडो बनाते हैं -
Step 1 - एक आवेदन पत्र बनाने के लिए, हमें MFC के CWinApp से एक वर्ग प्राप्त करना होगा।
#include
class CExample : public CWinApp {
BOOL InitInstance() {
return TRUE;
}
};
Step 2 - हमें अपने एप्लिकेशन की सामग्री दिखाने के लिए एक फ़्रेम / विंडो की भी आवश्यकता है।
Step 3 - इसके लिए, हमें एक और वर्ग जोड़ने और इसे MFC से प्राप्त करने की आवश्यकता है CFrameWnd क्लास और उसके कंस्ट्रक्टर को लागू करें और एक कॉल बनाएं () विधि, जो निम्नलिखित कोड में दिखाए गए अनुसार एक फ्रेम / विंडो बनाएगी।
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"));
}
};
Step 4 - जैसा कि आप देख सकते हैं कि Create () मेथड को दो पैरामीटर्स की जरूरत है, क्लास का नाम, जिसे NULL के रूप में पास किया जाना चाहिए, और विंडो का नाम, जो कि स्ट्रिंग है जिसे टाइटल बार पर दिखाया जाएगा।
मुख्य खिड़की
एक विंडो बनाने के बाद, एप्लिकेशन को इसका उपयोग करने देने के लिए, आप विंडो बनाने के लिए उपयोग किए गए वर्ग को दिखाने के लिए एक पॉइंटर का उपयोग कर सकते हैं। इस मामले में, सूचक CFrameWnd होगा। फ़्रेम विंडो का उपयोग करने के लिए, इसके पॉइंटर को CWinThread :: m_pMainWnd सदस्य चर पर असाइन करें। यह आपके आवेदन के InitInstance () कार्यान्वयन में किया जाता है।
Step 1 - यहाँ CExample वर्ग में InitInstance () का कार्यान्वयन है।
class CExample : public CWinApp {
BOOL InitInstance() {
CMyFrame *Frame = new CMyFrame(); m_pMainWnd = Frame;
Frame->ShowWindow(SW_NORMAL);
Frame->UpdateWindow();
return TRUE;
}
};
Step 2 - इसके बाद Example.cpp फ़ाइल का पूर्ण कार्यान्वयन है।
#include <afxwin.h>
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"));
}
};
class CExample : public CWinApp {
BOOL InitInstance() {
CMyFrame *Frame = new CMyFrame();
m_pMainWnd = Frame;
Frame->ShowWindow(SW_NORMAL);
Frame->UpdateWindow();
return TRUE;
}
};
CExample theApp;
Step 3 - जब हम उपरोक्त एप्लिकेशन चलाते हैं, तो निम्न विंडो बनाई जाती है।
विंडोज स्टाइल्स
विंडोज शैलियाँ ऐसी विशेषताएँ हैं जो विंडो उपस्थिति, सीमाओं, न्यूनतम या अधिकतम स्थिति, या अन्य आकार बदलने वाले राज्यों, आदि जैसी सुविधाओं को नियंत्रित करती हैं।
अनु क्रमांक। | शैली और विवरण |
---|---|
1 | WS_BORDER एक खिड़की बनाता है जिसमें एक सीमा होती है। |
2 | WS_CAPTION एक विंडो बनाता है जिसमें एक शीर्षक पट्टी होती है (जिसका अर्थ है WS_BORDER शैली)। WS_DLGFRAME शैली के साथ उपयोग नहीं किया जा सकता। |
3 | WS_CHILD एक बाल खिड़की बनाता है। WS_POPUP शैली के साथ उपयोग नहीं किया जा सकता। |
4 | WS_CHILDWINDOW WS_CHILD शैली के समान। |
5 | WS_CLIPCHILDREN जब आप मूल विंडो के भीतर ड्रा करते हैं, तो चाइल्ड विंडो के कब्जे वाले क्षेत्र को छोड़ देता है। जब आप पेरेंट विंडो बनाते हैं तो उपयोग किया जाता है। |
6 | WS_CLIPSIBLINGS एक दूसरे के सापेक्ष बाल खिड़कियां; वह है, जब एक विशेष चाइल्ड विंडो को एक पेंट संदेश प्राप्त होता है, तो WS_CLIPSIBLINGS स्टाइल क्लिप को अपडेट किए जाने वाले चाइल्ड विंडो के क्षेत्र से बाहर अन्य सभी ओवरलैप किए गए चाइल्ड विंडो को क्लिप करता है। (यदि WS_CLIPSIBLINGS नहीं दिए गए हैं और चाइल्ड विंडो ओवरलैप हैं, जब आप चाइल्ड विंडो के क्लाइंट एरिया के भीतर आते हैं, तो पड़ोसी बच्चे की विंडो के क्लाइंट एरिया में ड्रॉ करना संभव है।) केवल WS_CHILD के साथ उपयोग के लिए। |
7 | WS_DISABLED एक विंडो बनाता है जो शुरू में अक्षम है। |
8 | WS_DLGFRAME डबल बॉर्डर वाली विंडो बनाता है लेकिन कोई शीर्षक नहीं। |
9 | WS_GROUP नियंत्रण के एक समूह के पहले नियंत्रण को निर्दिष्ट करता है जिसमें उपयोगकर्ता तीर कुंजी के साथ एक नियंत्रण से अगले तक जा सकता है। पहले नियंत्रण के बाद WS_GROUP शैली FALSE के साथ परिभाषित सभी नियंत्रण एक ही समूह के हैं। WS_GROUP शैली के साथ अगला नियंत्रण अगले समूह को शुरू करता है (यानी, एक समूह समाप्त होता है जहां अगला शुरू होता है)। |
10 | WS_HSCROLL एक विंडो बनाता है जिसमें एक क्षैतिज स्क्रॉल पट्टी होती है। |
1 1 | WS_ICONIC एक विंडो बनाता है जिसे शुरू में छोटा किया जाता है। WS_MINIMIZE शैली के समान। |
12 | WS_MAXIMIZE अधिकतम आकार की एक विंडो बनाता है। |
13 | WS_MAXIMIZEBOX एक विंडो बनाता है जिसमें एक मैक्सिमम बटन होता है। |
14 | WS_MINIMIZE एक विंडो बनाता है जिसे शुरू में छोटा किया जाता है। केवल WS_OVERLAPPED शैली के साथ उपयोग के लिए। |
15 | WS_MINIMIZEBOX एक विंडो बनाता है जिसमें एक छोटा बटन होता है। |
16 | WS_OVERLAPPED एक ओवरलैप्ड विंडो बनाता है। ओवरलैप्ड विंडो में आमतौर पर एक कैप्शन और एक सीमा होती है। |
17 | WS_OVERLAPPED WINDOW WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX और WS_MAXIMIZIOBOX शैलियों के साथ एक ओवरलैप्ड विंडो बनाता है। |
18 | WS_POPUP एक पॉप-अप विंडो बनाता है। WS_CHILD शैली के साथ उपयोग नहीं किया जा सकता। |
19 | WS_POPUPWINDOW WS_BORDER, WS_POPUP और WS_SYSMENU शैलियों के साथ पॉप-अप विंडो बनाता है। नियंत्रण मेनू को दृश्यमान बनाने के लिए WS_CAPTION शैली को WS_POPUPWINDOW शैली के साथ जोड़ा जाना चाहिए। |
20 | WS_SIZEBOX एक विंडो बनाता है जिसमें एक साइज़िंग बॉर्डर होता है। WS_THICKFRAME शैली के समान। |
21 | WS_SYSMENU एक विंडो बनाता है जिसमें इसके शीर्षक पट्टी में एक नियंत्रण-मेनू बॉक्स होता है। केवल शीर्षक पट्टियों वाली खिड़कियों के लिए उपयोग किया जाता है। |
22 | WS_TABSTOP किसी भी संख्या में नियंत्रणों में से एक निर्दिष्ट करता है जिसके माध्यम से उपयोगकर्ता TAB कुंजी का उपयोग करके स्थानांतरित कर सकता है। TAB कुंजी उपयोगकर्ता को WS_TABSTOP शैली द्वारा निर्दिष्ट अगले नियंत्रण पर ले जाती है। |
23 | WS_THICKFRAME एक मोटे फ्रेम के साथ एक खिड़की बनाता है जिसका उपयोग खिड़की को आकार देने के लिए किया जा सकता है। |
24 | WS_TILED एक ओवरलैप्ड विंडो बनाता है। ओवरलैप्ड विंडो में टाइटल बार और बॉर्डर होता है। WS_OVERLAPPED शैली के समान। |
25 | WS_TILEDWINDOW WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX और WS_MAXIMIZIOBOX शैलियों के साथ एक ओवरलैप्ड विंडो बनाता है। WS_OVERLAPPEDWINDOW शैली के समान। |
26 | WS_VISIBLE एक खिड़की बनाता है जो शुरू में दिखाई देती है। |
27 | WS_VSCROLL एक विंडो बनाता है जिसमें वर्टिकल स्क्रॉल बार होता है। |
Step 1- आइए हम एक सरल उदाहरण देखें जिसमें हम कुछ स्टाइल जोड़ेंगे। एक विंडो बनाने के बाद, उपयोगकर्ता को प्रदर्शित करने के लिए, हम उस पर WS_VISIBLE शैली लागू कर सकते हैं और इसके अलावा, हम WS_OVERLAPPED शैली भी जोड़ देंगे। यहाँ एक कार्यान्वयन है -
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_VISIBLE | WS_OVERLAPPED);
}
};
Step 2 - जब आप इस एप्लिकेशन को चलाते हैं, तो निम्न विंडो बनाई जाती है।
अब आप देख सकते हैं कि न्यूनतम, अधिकतम और करीबी विकल्प अब दिखाई नहीं देते हैं।
विंडोज लोकेशन
मॉनिटर पर प्रदर्शित चीजों का पता लगाने के लिए, कंप्यूटर कार्टेशियन के समान एक समन्वय प्रणाली का उपयोग करता है, लेकिन मूल स्क्रीन के ऊपरी बाएं कोने पर स्थित है। इस समन्वय प्रणाली का उपयोग करके, किसी भी बिंदु को क्षैतिज और ऊर्ध्वाधर अक्षों के स्क्रीन के ऊपरी बाएं कोने से इसकी दूरी से स्थित किया जा सकता है।
Win32 library POINT नामक एक संरचना प्रदान करता है जो निम्नानुसार है -
typedef struct tagPOINT {
LONG x;
LONG y;
} POINT;
'X' सदस्य चर स्क्रीन के बाईं सीमा से बिंदु तक की दूरी है।
'Y' वेरिएबल स्क्रीन के टॉप बॉर्डर से पॉइंट तक की दूरी को दर्शाता है।
Win32 के सूत्र संरचना के अलावा, Microsoft Foundation Class (MFC) लाइब्रेरी CPoint वर्ग प्रदान करता है।
यह POINT संरचना के समान कार्यक्षमता प्रदान करता है। C ++ वर्ग के रूप में, यह एक बिंदु का पता लगाने के लिए आवश्यक अधिक कार्यक्षमता जोड़ता है। यह दो कंस्ट्रक्टर प्रदान करता है।
CPoint();
CPoint(int X, int Y);
विंडोज का आकार
जबकि स्क्रीन पर किसी ऑब्जेक्ट का पता लगाने के लिए एक बिंदु का उपयोग किया जाता है, प्रत्येक विंडो का आकार होता है। आकार एक वस्तु से संबंधित दो उपाय प्रदान करता है।
- किसी वस्तु की चौड़ाई।
- किसी वस्तु की ऊँचाई।
Win32 लाइब्रेरी SIZE संरचना का उपयोग इस प्रकार करता है -
typedef struct tagSIZE {
int cx;
int cy;
} SIZE;
Win32 की SIZE संरचना के अलावा, MFC CSize वर्ग प्रदान करता है। इस वर्ग में SIZE जैसी ही कार्यक्षमता है लेकिन C ++ वर्ग की विशेषताएं शामिल हैं। यह पांच कंस्ट्रक्टर प्रदान करता है जो आपको अपनी पसंद के किसी भी तरीके से आकार चर बनाने की अनुमति देता है।
CSize();
CSize(int initCX, int initCY);
CSize(SIZE initSize);
CSize(POINT initPt);
CSize(DWORD dwSize);
विंडोज आयाम
जब एक विंडो प्रदर्शित होती है, तो इसे मॉनिटर की सीमाओं के संबंध में स्क्रीन पर उसके स्थान से पहचाना जा सकता है। एक विंडो को उसकी चौड़ाई और ऊंचाई से भी पहचाना जा सकता है। इन विशेषताओं निर्दिष्ट या द्वारा नियंत्रित कर रहे रेक्ट के तर्कCreate()तरीका। यह तर्क एक आयत है जिसे Win32 RECT संरचना के माध्यम से बनाया जा सकता है।
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
Win32 के अलावा RECT संरचना, MFC को CRect वर्ग प्रदान करता है जिसमें निम्नलिखित निर्माता हैं -
CRect();
CRect(int l, int t, int r, int b);
CRect(const RECT& srcRect);
CRect(LPCRECT lpSrcRect);
CRect(POINT point, SIZE size);
CRect(POINT topLeft, POINT bottomRight);
आइए एक सरल उदाहरण देखें, जिसमें हम विंडो के स्थान और आकार को निर्दिष्ट करेंगे
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU, CRect(90, 120,
550, 480));
}
};
जब आप इस एप्लिकेशन को चलाते हैं, तो निम्न दो विंडो आपके स्क्रीन के ऊपरी बाएँ कोने पर बनाई गई हैं जैसा कि पहले दो मापदंडों में CRect कंस्ट्रक्टर में निर्दिष्ट है। अंतिम दो पैरामीटर विंडो का आकार हैं।
विंडोज माता-पिता
वास्तविक दुनिया में, कई एप्लिकेशन अलग-अलग विंडोज से बने होते हैं। जब कोई एप्लिकेशन विभिन्न विंडोज का उपयोग करता है, तो अधिकांश ऑब्जेक्ट एक विशेष पर निर्भर करते हैं। यह पहली विंडो हो सकती है जिसे बनाया गया था या दूसरी विंडो जिसे आपने निर्दिष्ट किया था। इस तरह के एक विंडो के रूप में जाना जाता हैParent Window। अन्य सभी खिड़कियां प्रत्यक्ष या अप्रत्यक्ष रूप से इस पर निर्भर करती हैं।
यदि आप जो विंडो बना रहे हैं, वह दूसरे पर निर्भर है, तो आप यह निर्दिष्ट कर सकते हैं कि उसका कोई अभिभावक है।
यह CFPameWnd :: Create () विधि के pParentWnd तर्क के साथ किया जाता है।
यदि विंडो में पैरेंट नहीं है, तो NULL मान के साथ तर्क पास करें।
आइए एक उदाहरण देखें, जिसमें केवल एक विंडो है, और कोई अभिभावक विंडो उपलब्ध नहीं है, इसलिए हम NULL मान के साथ तर्क पारित करेंगे जैसा कि निम्नलिखित कोड में दिखाया गया है -
class CMyFrame : public CFrameWnd {
public:
CMyFrame() {
Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU,
CRect(90, 120, 550, 480), NULL);
}
};
जब आप उपरोक्त एप्लिकेशन चलाते हैं, तो आपको वही आउटपुट दिखाई देता है।