Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Một số hàm về Message

    PostMessage
    Mã:
    BOOL PostMessage(          
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
    );
    Hàm này gởi msg đến hàng đợi mà ko chờ xử lý msg.
    Do đó, khi gởi 1 msg mà ko cần return, ta xài hàm này.

    SendMessage
    Mã:
    LRESULT SendMessage(          
        HWND hWnd,
        UINT Msg,
        WPARAM wParam,
        LPARAM lParam
    );
    Hàm này có tính năng tương tự PostMessage, nhưng nó sẽ đợi msg dc xử lý.
    Và trả về giá trị. Chúng ta xài khi cần giá trị return của nó.


    PeekMessage
    Mã:
    BOOL PeekMessage(          
        LPMSG lpMsg,
        HWND hWnd,
        UINT wMsgFilterMin,
        UINT wMsgFilterMax,
        UINT wRemoveMsg
    );
    Tương tự như PostMessage, Hàm này ko đợi xem có msg trong hàng đợi hay ko,
    Nó return ngay.
    Có 1 thông số là wRemoveMsg
    PM_NOREMOVE //Không remove msg sau khi gọi hàm, nó vẫn nằm trong hàng đợi
    PM_REMOVE //Ngược lại
    Ngoài ra, ta có thể chỉ định nhận các msg loại nào
    PM_QS_INPUT //Keyboard hay Mouse
    PM_QS_PAINT //Paint

    GetMessage
    Mã:
    BOOL GetMessage(          
        LPMSG lpMsg,
        HWND hWnd,
        UINT wMsgFilterMin,
        UINT wMsgFilterMax
    );
    Hàm này lại giống SendMessage, Nó sẽ đợi đến khi có 1 msg, rồi sau đó mới return.


    Còn tiếp...

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mã:
            TranslateMessage(&msg);
            DispatchMessage(&msg);
    vậy 2 hàm này có ý nghĩa gì vậy anh,VD nó được đặt trong ngữ cảnh

    Mã:
    MSG msg;
        BOOL bRet;
        //vòng lặp đón và xử lý các message 
        while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
        { 
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    thì có ý nghĩa gì

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Một ứng dụng nhận các thông điệp từ hàng đợi thông điệp bằng cách thực thi một đoạn mã sau:
    Mã:
    while ( GetMessage(&msg, NULL, 0 ,0) )
    {
    TranslateMessage (&msg);
    DispatchMessage (&msg);
    }
    Trong đó msg là một biến cấu trúc kiểu MSG được định nghĩa trong tập tin tiêu đề
    Ý nghĩa của các trường trong cấu trúc MSG
    hwnd : Định danh của cửa sỗ mà thông điệp phát sinh.
    message : Định danh của thông điệp, ví dụ như thông điệp phát sinh khi bấm nút chuột trái là WM_LBUTTONDOWN có giá trị 0x0201.
    wParam : Tham số 32-bit chứa các thông tin phụ thuộc vào từng thông điệp cụ thể.
    lParam : Tham số 32-bit phụ thuộc vào thông điệp.
    time : Thời gian đặt thông điệp trong hàng đợi.
    pt : Tọa độ của chuột khi đặt thông điệp vào hàng đợi
    Hàm GetMessage sẽ trả về 0 nếu msg chứa thông điệp có định danh WM_QUIT (0x0012), khi đó vòng lặp thông điệp ngưng và ứng dụng kết thúc. Ngược lại thì hàm sẽ trả về một giá trị khác 0 với các thông điệp khác.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nói cho cùng thì nó là một vòng lặp để lấy thông điệp từ hàng đợi của ứng dụng và phân phát cho thủ tục Window xử lý, vòng lặp này chấm dứt khi thông điệp "qua" nó là WM_QUIT (Khi chúng ta "tắt" ứng dụng tạo ra thông điệp WM_DESTROY, thông điệp này sẽ gọi hàm PostQuitMessage đặt thông điệp WM_QUIT vào hàng đợi). Đơn giản là thế, còn bạn muốn khai thác chúng như thế nào thôi! Chúc vui vẻ.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •