2010-03-08 25 views

उत्तर

46

सी में/C++

LONG lStyle = GetWindowLong(hwnd, GWL_STYLE); 
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU); 
SetWindowLong(hwnd, GWL_STYLE, lStyle); 

WS_CAPTION के रूप में परिभाषित किया गया है (WS_BORDER | WS_DLGFRAME)। आप इन दो शैलियों को हटाने के साथ दूर हो सकते हैं, क्योंकि कैप्शन गायब होने पर न्यूनतम अधिकतम और sytem मेनू गायब हो जाएगा, लेकिन उन्हें हटाने के लिए सबसे अच्छा है।

विस्तारित सीमा शैलियों को हटाने के लिए भी सबसे अच्छा है।

LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE); 
lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE); 
SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle); 

और आखिरकार, बदली गई शैलियों के साथ अपनी खिड़की को फिर से निकालने के लिए, आप SetWindowPos का उपयोग कर सकते हैं।

SetWindowPos(hwnd, NULL, 0,0,0,0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); 
+1

यह पुराना है –

+3

@NathanGoings क्या आप कृपया बता सकते हैं कि यह आपकी राय में पुराना क्यों है और इसके बजाय अद्यतित क्यों है? – RamboNo5

+8

@ रैम्बोनो 5: SetWindowLong() को SetWindowLongPtr फ़ंक्शन() – dns

8

निम्नलिखित डेल्फी कोड यह करता है:

SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_BORDER and not WS_SIZEBOX and not WS_DLGFRAME); 
    SetWindowPos(Handle, HWND_TOP, Left, Top, Width, Height, SWP_FRAMECHANGED); 
बेशक

, इन API कॉल सभी भाषाओं में ही दिखते हैं।

5

कोड की यह पंक्ति नीचे किसी भी विंडो के बॉर्डर निकाल देता है, और केवल अपने ग्राहक रहता है:

SetWindowLong(hWnd /*The handle of the window to remove its borders*/, GWL_STYLE, WS_POPUP); 

इसके बजाय आप SetWindowLong समारोह के तीसरे पैरामीटर में WS_POPUPWINDOW उपयोग कर सकते हैं। यह दिए गए विंडो की सीमाओं को भी हटा देता है और यह भी काम करता है, लेकिन अंतर यह है कि यह को विंडो के शेष शेष क्लाइंट में काले आयत को भी रेखांकित करता है। उस उल्लिखित आयताकार की मोटाई 1 पिक्सेल है। WS_POPUP उस आयताकार को आकर्षित नहीं करता है, वास्तव में यह कुछ भी नहीं खींचता है, केवल खिड़की की सीमाओं को हटा दें।

GetWindowLong(hWnd /*The handle of the window that you want to remove its borders and later return them back to it*/, GWL_STYLE); 

लेकिन निश्चित रूप से है कि इस समारोह retuns:

आप के बारे में वापस खिड़की की सीमाओं पर लौटने के लिए, इससे पहले कि आप मैं ऊपर पोस्ट कोड की है कि लाइन का उपयोग कर रहे हैं, पहले नीचे दिए गए कोड की है कि लाइन फोन खिड़की की शैलियों, इसलिए नया वैरिएबल बनाएं जो इन शैलियों को बनाए रखे, यानी इस चर को उस फ़ंक्शन के रिटर्न वैल्यू पर सेट करें।

तो फिर तुम अपनी सीमाओं को दूर करने के रूप में मैं ऊपर showen SetWindowLong उपयोग करते हैं, और जब आप चाहते हैं बाद में अपनी सीमाओं वापस बहाल करने के लिए, बस फिर से याद करते हैं SetWindowLong, पहले दो मापदंडों, एक ही (hWnd और GWL_STYLE) कर रहे हैं लेकिन तीसरे पैरामीटर है GetWindowLong से लौटाई गई विंडो की शैलियों। यदि आप GetWindowLong पर कॉल नहीं करना चाहते हैं, लेकिन फिर भी विंडो की सीमाएं वापस कर दें, तो आप पहले 12 पैरामीटर के साथ SetWindowLong का उपयोग कर सकते हैं, और तीसरे पैरामीटर में, आप निम्न में से किसी एक का उपयोग कर सकते हैं: WS_OVERLAPPED या/और WS_OVERLAPPEDWINDOW या/और WS_SIZEFRAME

नोट: आप मेरा उत्तर की कोशिश, लेकिन यह आप के लिए काम नहीं करता है, तो यह हो सकता है, क्योंकि यह है कि दोनों कार्यों SetWindowLong और GetWindowLong कर लिया गया है और आप के लिए काम नहीं करता है, और है कि क्योंकि वे के साथ संगत हैं32-बिट विंडोज़ संस्करण। शायद आप 64-बिट Windows के संस्करण का उपयोग कर रहे हैं, तो SetWindowLongPtr और GetWindowLongPtr का उपयोग करने के बजाय, जो दोनों32-बिट और 64-बिट Windows के संस्करण के साथ संगत कर रहे हैं। एमएसडीएन सूचित करता है कि नोट अनुभाग में इन कार्यों के बारे में। बस उस साइट में उनके लिए खोजें।

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms633584(v=vs.85).aspx

आशा है कि यह सब आपके प्रश्न के उत्तर: यहाँ अपने लिए लिंक्स हैं।

+1

'WS_POPUP' का उपयोग करने के लिए याद दिलाने के लिए धन्यवाद, यह पहले से ही सीमाहीन विंडो बनाने के साथ काम करने वाला एक तरीका है। – nekavally

संबंधित मुद्दे