2009-02-09 23 views
5

क्या कोई जानता है कि 'हमेशा-नीचे-नीचे' विंडो, या डेस्कटॉप पर पिन की गई विंडो कैसे बनाएं? इसे फोकस और माउसक्लिक प्राप्त करना चाहिए, लेकिन ज़ेड-ऑर्डर के नीचे रहना चाहिए। यह भी अच्छा होगा अगर यह डेस्कटॉप पर भी रह सकता है, भले ही उपयोगकर्ता सभी को कम करें या डेस्कटॉप ऑपरेशन दिखाएं।'हमेशा-नीचे-नीचे' विंडो बनाने के लिए कैसे करें

डेल्फी और सी # समाधान (या आंशिक समाधान/संकेत) दोनों महान होंगे।

+0

आप कुछ और लेकिन डेल्फी का उपयोग करना चाहिए यदि संभव हो, क्योंकि छिपा आवेदन खिड़की और मुख्य विंडो के बीच बातचीत सामान और भी जटिल बना देगा। इनमें से अधिकांश निजी रूपों में form.pas में बदलना मुश्किल है। – mghie

+0

शो डेस्कटॉप का उपयोग होने पर यह संभव नहीं हो सकता है। हालांकि, यह तब हो सकता है जब सभी को न्यूनतम करें - MinimizeBox प्रॉपर्टी को गलत पर सेट करके आप फ़ॉर्म को कम करने को अक्षम कर देंगे। – configurator

+0

डुप्लिकेट: http://stackoverflow.com/questions/365094/window-on-desktop –

उत्तर

12

चेतावनी यह सुझाव दिया गया था कि आप इसे सेटपैंट को कॉल करके और डेस्कटॉप को डेस्कटॉप के बच्चे के रूप में सेट करके इसे पूरा कर सकते हैं। यदि आप ऐसा करते हैं, तो आप अपने बच्चे को खिड़की के डेस्कटॉप के इनपुट कतार गठबंधन करने के लिए Win32 विंडो प्रबंधक पहुंचाता है, यह एक बुरी बात है - Raymond Chen explains why.

इसके अलावा, यह ध्यान रखें कि HWND_BOTTOM साथ SetWindowPos बुला अधूरा है। जब भी आपकी खिड़की ज़ेडर बदल रही है तो आपको यह करने की ज़रूरत है। WM_WINDOWPOSCHANGING ईवेंट को संभालें, अधिक जानकारी के लिए SWP_NOZORDER देखें।

7

SetWindowPos विंडोज हमेशा ऑटटॉप बना सकता है। सबसे अधिक संभावना यह विपरीत परिणाम दे सकता है। इन पंक्तियों के साथ कुछ प्रयास करें:

[DllImport("user32.dll")] 
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, 
    int Y, int cx, int cy, uint uFlags); 


public const uint SWP_NOSIZE   = 0x0001; 
public const uint SWP_NOMOVE   = 0x0002; 
public const uint SWP_NOACTIVATE  = 0x0010; 
public const int HWND_BOTTOM = 1; 


SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); 

नोट:

  • इस दृष्टिकोण
  • यह काम करने के लिए होता है (हमेशा तल पर खिड़कियां बनाने के लिए) सबसे अधिक संभावना शो डेस्कटॉप परीक्षण नहीं किया है, तो ऑपरेशन खिड़की छुपाएगा। तो शायद आपको इस 'अच्छा' एपीआई में भी गहरा जाना चाहिए।

संपादित करें: इन पंक्तियों के साथ कुछ खोज हो गया पुष्टि करने के लिए कि क्या यह चाल करते हैं और कुछ दिलचस्प पाया जाएगा - a duplicate

+1

+1, ओपी शुरू करने के लिए इसमें सबकुछ होना चाहिए। – mghie

1

यहां एटीएल विंडो के लिए समाधान है। यदि आप सी # पर आवेदन कर सकते हैं, तो यह आपकी मदद करेगा।


BEGIN_MSG_MAP(...) 
    ... 
    MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, OnWindowPosChanging) 
    ... 
END_MSG_MAP() 

LRESULT OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 

{ 

    if (_bStayOnBottom) 
    { 
     auto pwpos = (WINDOWPOS*)lParam; 

     pwpos->hwndInsertAfter = HWND_BOTTOM; 

     pwpos->flags &= (~SWP_NOZORDER); 

    } 
    return 0; 
} 
+0

यह बहुत अच्छा काम करता है! धन्यवाद! – Andy

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