2009-05-30 18 views
5

मेरे कार्यक्रम में, WndProc ओवरराइड उपयोग करते हुए मेरे रूप को रोकने के लिए im आकार दिया जा रहा है। बात यह है कि जब आप पॉइंटर को फॉर्म के किनारे पर ले जाते हैं तो कर्सर अभी भी वहां होता है। क्या इस कर्सर को छिपाने के लिए वैसे भी है?सी # छिपाएं आकार कर्सर

+3

मैं इस परीक्षण नहीं किया है, इसलिए मैं सिर्फ टिप्पणी कर रहा हूँ, आप में अवरोध उत्पन्न करने की कोशिश की है WM_NCHITTEST संदेश? यहाँ और जानकारी: http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx –

उत्तर

7

मैं एक तरह से WndProc धन्यवाद लिंक करने के लिए लासे मुझे भेजा का उपयोग कर पाया है। आपके उत्तर जॉन के लिए धन्यवाद लेकिन यह वही नहीं था जो मैं चाहता था। जो लोग कैसे मैंने किया जानना चाहता हूँ के लिए, मैं इस प्रयोग किया है:

protected override void WndProc(ref Message m) 
    { 
     const int WM_NCHITTEST = 0x0084; 

     switch (m.Msg) 
     { 
      case WM_NCHITTEST: 
       return; 
     } 

     base.WndProc(ref m); 
    } 

मैं इसे अच्छी तरह से परीक्षण नहीं किया तो अगर कोई दुष्प्रभाव हैं पता नहीं है, लेकिन यह इस समय मेरे लिए ठीक काम करता है :)।

+0

होता है, जब मैं पोस्ट करता हूं, तो मुझे कुछ जवाब देने वाला था, खुशी है कि आपको अपना जवाब मिल गया। हालांकि वापसी के बाद आपको ब्रेक की आवश्यकता नहीं है। –

+0

हाँ, आपका अधिकार। आदत का बल^_^ – Ozzy

8

क्यों उचित रूप से बजाय FormBorderStyle गुण सेट नहीं? फिर आपको WndProc का उपयोग करने की आवश्यकता नहीं है।

यहाँ प्रदर्शित करने के लिए कुछ नमूना कोड - बटन पर क्लिक करें टॉगल करने के लिए किया जाए या नहीं प्रपत्र आकार दिया जा सकता:

using System; 
using System.Windows.Forms; 
using System.Drawing; 

class Test 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Button button = new Button 
     { 
      Text = "Toggle border", 
      AutoSize = true, 
      Location = new Point(20, 20) 
     }; 
     Form form = new Form 
     { 
      Size = new Size (200, 200), 
      Controls = { button }, 
      FormBorderStyle = FormBorderStyle.Fixed3D 
     }; 
     button.Click += ToggleBorder; 
     Application.Run(form); 
    } 

    static void ToggleBorder(object sender, EventArgs e) 
    { 
     Form form = ((Control)sender).FindForm(); 
     form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D 
      ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D; 
    } 
} 
+0

मैं इसे क्योंकि विस्टा में resizeable टूलबॉक्स करने के लिए सेट है, तो आप उसके चारों ओर है कि अच्छा सीमा मिलता है। फिक्स्ड 3 डी का उपयोग करके, आपको वह सीमा नहीं मिलती है (मैं नियंत्रण बॉक्स को झूठी और कोई शीर्षक नहीं सेट करता हूं) – Ozzy

+0

मानते हैं कि आप SizeableToolWindow का मतलब है, क्या आपने फिक्स्डटूलविंडो को आजमाया है? यह बिल्कुल मेरे जैसा ही दिखता है, बस आकार बदलने योग्य नहीं है। –

+0

डाउनवॉटर: कृपया समझाएं, इसलिए उत्तर में सुधार किया जा सकता है। –

0

बस की स्थापना FormBorderStyle इस के लिए पर्याप्त है। आप इसके लिए WndProc का उपयोग क्यों कर रहे हैं?

+0

क्योंकि इस मामले में formborderstyle पर्याप्त नहीं है। – Ozzy

0

@Ozzy/लासे मेरे लिए काम किया!

एक ही समस्या थी:

स्टैंडर्ड बॉर्डर शैलियां देखो मैं चाहता हूँ देना नहीं है, कस्टम CreateParams है। मैंने आकार बदलने के लिए आकार, न्यूनतम आकार और अधिकतम आकार के लिए समान मान निर्दिष्ट किए हैं। आकार बदलने कर्सर अभी भी ओजी & लासे हालांकि निर्धारित किया गया जा रहा है, धन्यवाद यह अब WM_NCHITTEST छान कर नियंत्रित किया जाता है ...

धन्यवाद

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