Announcement

Collapse
No announcement yet.

Cần được giúp đỡ về WndProc trong C#

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Cần được giúp đỡ về WndProc trong C#

    Các bạn có thể cho mình biết chi tiết về hàm này. nó dùng để làm gì? nó có tác dụng gì?
    ví dụ có 1 hàm thế này:
    PHP Code:
    protected override void WndProc(ref Message m)
            {
                if (
    m.Msg == 0x00f)
                {
                    if (
    m_bPaint)   //Biến m_bPaint sẽ nhận giá trị true hay false tùy điều kiện trong sự kiên text_change
                        
    base.WndProc(ref m);
                    else
                        
    m.Result IntPtr.Zero;
                }
                else
                    
    base.WndProc(ref m);
            } 
    không biết m.Msg, m.Result, IntPtr.Zero, base.WndProc(ref m); có tác dụng gì? Hàm này làm gì?
    Last edited by 09520133; 16-05-2011, 23:25.
    -----------------------------
    Mai Văn Khải
    Software Engineering, University Information of Technology
    a07d26eb5cbc98f77b36a461eb629456

  • #2
    huhu, không có ai giúp em à!!!!!
    -----------------------------
    Mai Văn Khải
    Software Engineering, University Information of Technology
    a07d26eb5cbc98f77b36a461eb629456

    Comment


    • #3
      Originally posted by 09520133 View Post
      huhu, không có ai giúp em à!!!!!
      Em thì đành chịu thôi! Nhưng xem vẻ cũng không nhiều người trả lời cho anh lắm thì phải!
      Networking and Telecommuting 05 - UIT
      phongpd@uitnetwork.com

      Comment


      • #4
        Originally posted by 09520133 View Post
        Các bạn có thể cho mình biết chi tiết về hàm này. nó dùng để làm gì? nó có tác dụng gì?
        ví dụ có 1 hàm thế này:
        PHP Code:
        protected override void WndProc(ref Message m)
                {
                    if (
        m.Msg == 0x00f)
                    {
                        if (
        m_bPaint)   //Biến m_bPaint sẽ nhận giá trị true hay false tùy điều kiện trong sự kiên text_change
                            
        base.WndProc(ref m);
                        else
                            
        m.Result IntPtr.Zero;
                    }
                    else
                        
        base.WndProc(ref m);
                } 
        không biết m.Msg, m.Result, IntPtr.Zero, base.WndProc(ref m); có tác dụng gì? Hàm này làm gì?
        - Mỗi 1 cửa sổ luôn có 1 hàng đợi chứa thông điệp ( nhận từ hệ thống,user input...) và 1 hàm xử lí các thông điệp đó: WM_PAINT (0x00F) , WM_CLOSE.... . Hàm đó nhận vô 4 tham số: LRESULT CALLBACK function_name(HWND,UINT,LPARAM,WPARAM) . Nếu bạn đã học qua Win32api thì cái này quá quen thuộc.
        - C# nó viết lại ( đúng hơn là bao lại ) theo hướng OOP. Như Message là 1 struct chứa các thông số tương ứng bên win32 như:
        + UINT messegeID;( định danh thông điệp ) ---> C# là Message.Msg.
        +LPARAM,WPARAM : (thông số đi kèm với thông điệp cụ thể , như WM_PAINT đi kèm là CON TRỎ tới cấu trúc PAINTSTRUCT.)
        ......vv

        Trở lại câu hỏi của bạn:
        -O trên tôi thấy bạn đã chặn thông điệp WM_PAINT( mã định danh là 0x00f(16)==15(10) ) để xử lí . Chỉ khi m_Paint bằng true thì mới paint bình thường. Ngược lại thì không làm j( coi như thoog điệp đó đã đc xử lí xong m.Result=IntPtr.Zero)

        - Và không phải thông điệp nào ta cũng phải chặn và xử lí ( ví dụ click vô nút minimize,maximize...,mất focus ). Có thông điệp ta để cho xử lí mặc định bằng base.WndProc(ref m); tương đượng bằng cách gọi hàm DefWindowProc(...) trong win32.
        +IntPtr chính là 1 lớp tương đương con trỏ int trong C++ . IntPtr.Zero tương đương con trỏ NULL.
        + Message.Result là kết quả trả về cho hệ thống để điều khiên thông điệp.


        - Tốt nhất bạn học qua Win32 tí đi.
        Last edited by tauit_dnmd; 17-05-2011, 20:23.

        Comment


        • #5
          Originally posted by tauit_dnmd View Post
          - Mỗi 1 cửa sổ luôn có 1 hàng đợi chứa thông điệp ( nhận từ hệ thống,user input...) và 1 hàm xử lí các thông điệp đó: WM_PAINT (0x00F) , WM_CLOSE.... . Hàm đó nhận vô 4 tham số: LRESULT CALLBACK function_name(HWND,UINT,LPARAM,WPARAM) . Nếu bạn đã học qua Win32api thì cái này quá quen thuộc.
          - C# nó viết lại ( đúng hơn là bao lại ) theo hướng OOP. Như Message là 1 struct chứa các thông số tương ứng bên win32 như:
          + UINT messegeID;( định danh thông điệp ) ---> C# là Message.Msg.
          +LPARAM,WPARAM : (thông số đi kèm với thông điệp cụ thể , như WM_PAINT đi kèm là CON TRỎ tới cấu trúc PAINTSTRUCT.)
          ......vv

          Trở lại câu hỏi của bạn:
          -O trên tôi thấy bạn đã chặn thông điệp WM_PAINT( mã định danh là 0x00f(16)==15(10) ) để xử lí . Chỉ khi m_Paint bằng true thì mới paint bình thường. Ngược lại thì không làm j( coi như thoog điệp đó đã đc xử lí xong m.Result=IntPtr.Zero)

          - Và không phải thông điệp nào ta cũng phải chặn và xử lí ( ví dụ click vô nút minimize,maximize...,mất focus ). Có thông điệp ta để cho xử lí mặc định bằng base.WndProc(ref m); tương đượng bằng cách gọi hàm DefWindowProc(...) trong win32.
          +IntPtr chính là 1 lớp tương đương con trỏ int trong C++ . IntPtr.Zero tương đương con trỏ NULL.
          + Message.Result là kết quả trả về cho hệ thống để điều khiên thông điệp.


          - Tốt nhất bạn học qua Win32 tí đi.
          Cho em hỏi thêm: thông điệp WM_PAINT( mã định danh là 0x00f(16)==15(10) ) là thông điệp gì? có tác dụng gì ạ?
          cảm ơn bác. Bác có tài liệu học win32 không share em với
          Last edited by 09520133; 17-05-2011, 21:42.
          -----------------------------
          Mai Văn Khải
          Software Engineering, University Information of Technology
          a07d26eb5cbc98f77b36a461eb629456

          Comment


          • #6
            Thông điệp WM_PAINT mang nghia như tên của nó. Khi cửa sổ cần đc vẽ lại thì thông điệp này sẽ đc phát sinh.

            Tài liệu thì bạn searrch trên mạng ,nhiều lắm mà: Window Programming,MFC Programming

            Comment


            • #7
              Để tìm hiểu chi tiết về hàm này thì bạn có thể nguyên gốc trong các chương trình Windows viết bằng C++. Chi tiết có thể xem tại đây: http://www.toymaker.info/Games/html/wndproc.html
              Hàm WndProc trong C# mang ý nghĩa tương tự như hàm WndProc trong Windows API. Chi tiết xem tại: http://msdn.microsoft.com/en-us/libr...l.wndproc.aspx
              CLB ITI UIT | https://www.facebook.com/groups/ITIClub/ | https://www.facebook.com/ITIClub/
              Microsoft Tech4Student | https://www.facebook.com/Tech4Student
              MSP Việt Nam | https://www.facebook.com/mspvn

              Comment

              LHQC

              Collapse
              Working...
              X