Win32 API
खिड़की संदेश
खोज…
वाक्य - विन्यास
- # पिन करें <windows.h>
- BOOL WINAPI विध्वंस (HWD hwnd);
- VOID WinAPI PostQuitMessage (int exitcode);
- BOOL WINAPI MoveWindow (HWND hwnd, int x, int y, int cx, int cy, BOOL bRepaint);
WM_CREATE
विंडो के CreateWindowEx
कॉल के दौरान आपकी विंडो प्रक्रिया के लिए एक WM_CREATE संदेश भेजा जाता है। lp
तर्क एक करने के लिए एक सूचक होता है CREATESTRUCT
जो तर्क के लिए पारित होता है CreateWindowEx
। यदि कोई अनुप्रयोग WM_CREATE से 0 देता है, तो विंडो बनाई जाती है। यदि कोई एप्लिकेशन -1 लौटाता है, तो निर्माण रद्द कर दिया जाता है।
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_CREATE:
CREATESTRUCT *cs = (CREATESTRUCT *) lp;
if (MessageBox(hwnd,
"Do you want to continue creating the window?", "", MB_YESNO)
== IDYES) {
/* create window controls */
return 0;
}
/* cancel creation */
return -1;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_DESTROY
यह संदेश आपकी विंडो प्रक्रिया में भेजा जाता है जब एक विंडो नष्ट हो रही होती है। यह स्क्रीन से विंडो को हटाने के बाद भेजा जाता है। WM_CREATE में प्राप्त अधिकांश एप्लिकेशन किसी भी संसाधन, जैसे मेमोरी या हैंडल को मुक्त करते हैं। यदि आप इस संदेश को संभालते हैं, तो 0 पर वापस लौटें।
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
static char *text;
switch (wm) {
case WM_CREATE:
text = malloc(256);
/* use the allocated memory */
return 0;
case WM_CLOSE:
switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
case IDYES:
savedoc();
/* fall through */
case IDNO:
DestroyWindow(hwnd);
break;
}
return 0;
case WM_DESTROY:
/* free the memory */
free(text);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_CLOSE
जब किसी एप्लिकेशन के क्लोज बटन पर क्लिक किया जाता है। WM_DESTROY
साथ WM_DESTROY
भ्रमित न करें जो तब भेजा जाता है जब एक खिड़की नष्ट हो जाएगी। मुख्य अंतर इस तथ्य में निहित है कि WM_CLOSE में समापन को रद्द किया जा सकता है (माइक्रोसॉफ्ट वर्ड के बारे में सोचें जो आपके बदलावों को बचाने के लिए पूछ रहा है), बनाम कि जब खिड़की पहले से ही बंद हो गई है तब नष्ट हो रहा है (माइक्रोसॉफ्ट वर्ड को मुफ्त मेमोरी के बारे में सोचें)।
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
static char *text;
switch (wm) {
case WM_CREATE:
text = malloc(256);
/* use the allocated memory */
return 0;
case WM_CLOSE:
switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
case IDYES:
savedoc();
/* fall through */
case IDNO:
DestroyWindow(hwnd);
break;
}
return 0;
case WM_DESTROY:
/* free the memory */
free(text);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_SIZE
आकार बदलने के बाद यह संदेश विंडो की विंडो प्रक्रिया में भेजा जाता है। इस संदेश को संभालने का सबसे आम कारण किसी भी बच्चे की खिड़कियों की स्थिति को समायोजित करना है। उदाहरण के लिए, नोटपैड में, जब विंडो का आकार बदल दिया जाता है तो बच्चे की खिड़की (एडिट कंट्रोल) का भी आकार बदल दिया जाता है। यदि आप इस संदेश को संभालते हैं तो 0 वापस करें।
बहस | मूल्य |
---|---|
WP | विंडो को आकार देने वाले स्थिरांक में से एक । |
एल.पी. | LOWORD (lp) क्लाइंट क्षेत्र की नई चौड़ाई है HIWORD (lp) क्लाइंट क्षेत्र की नई ऊंचाई है। |
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_SIZE:
/* hwndEdit is the handle of the edit control window */
MoveWindow(hwndEdit, 0, 0, LOWORD(lp), HIWORD(lp), TRUE);
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}
WM_COMMAND
एक विंडो प्रक्रिया के लिए भेजा जब:
- उपयोगकर्ता मेनू से एक आइटम का चयन करता है
- एक नियंत्रण इसकी मूल विंडो पर एक सूचना भेजता है
- एक त्वरक कीस्ट्रोके का अनुवाद किया जाता है
संदेश स्रोत | HIWORD (WP) | LOWORD (WP) | एल.पी. |
---|---|---|---|
मेन्यू | 0 | मेनू आईडी (IDM_ *) | 0 |
त्वरक | 1 | Accel ID (IDM_ *) | 0 |
नियंत्रण | अधिसूचना कोड | नियंत्रण आईडी | नियंत्रण खिड़की का संकेत |
उदाहरण के लिए, नोटपैड में, जब कोई उपयोगकर्ता "फ़ाइल-> खोलें" पर क्लिक करता है, तो उपयोगकर्ता को फ़ाइल खोलने की अनुमति देने के लिए एक संवाद बॉक्स प्रदर्शित होता है। मेनू आइटम विंडो प्रक्रिया के WM_CREATE संदेश में इस तरह संसाधित होते हैं:
LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
switch (wm) {
case WM_COMMAND:
switch (LOWORD(wp) {
case ID_FILE_OPEN:
/* show file open dialog */
break;
case ID_FILE_NEW:
/* create new instance */
break;
}
return 0;
}
return DefWindowProc(hwnd, wm, wp, lp);
}