Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: [VC] Tại sao cuối hàm xử lý cửa sổ phải return FALSE?

  1. #1
    Ngày gia nhập
    08 2006
    Bài viết
    60

    Mặc định [VC] Tại sao cuối hàm xử lý cửa sổ phải return FALSE?

    Tạo 1 project đơn giản có About box. Sau đó, sửa lại để cuối hàm xử lý cửa sổ About trả về TRUE . Chạy chương trình lên , chọn cửa sổ About thì chương trình sẽ ăn 100%CPU, và cái cửa sổ About tự nhiên 0 có màu nền.

    Nói thiệt, do tui tự học VC++, tui chỉ có tài liệu tự học đh từ xa thôi ! Và 1 số sách MFC nhưng 0 có sách nào nói về quy tắc trả dữ liệu về của các hàm xử lý cửa sổ hết !
    Ai biết, chỉ dùm ! Cám ơn diễn đàn nhiều !

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Do cậu không có MSDN nên không biết, cài MSDN đi, sau đó type DialogProc, đọc sẽ hiểu. Tui trích ra cho cậu đọc:
    DialogProc Function

    --------------------------------------------------------------------------------

    The DialogProc function is an application-defined callback function used with the CreateDialog and DialogBox families of functions. It processes messages sent to a modal or modeless dialog box. The DLGPROC type defines a pointer to this callback function. DialogProc is a placeholder for the application-defined function name.

    Syntax

    INT_PTR CALLBACK DialogProc( HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    );
    Parameters

    hwndDlg
    [in] Handle to the dialog box.
    uMsg
    [in] Specifies the message.
    wParam
    [in] Specifies additional message-specific information.
    lParam
    [in] Specifies additional message-specific information.
    Return Value

    Typically, the dialog box procedure should return TRUE if it processed the message, and FALSE if it did not. If the dialog box procedure returns FALSE, the dialog manager performs the default dialog operation in response to the message.

    If the dialog box procedure processes a message that requires a specific return value, the dialog box procedure should set the desired return value by calling SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult) immediately before returning TRUE. Note that you must call SetWindowLong immediately before returning TRUE; doing so earlier may result in the DWL_MSGRESULT value being overwritten by a nested dialog box message.

    The following messages are exceptions to the general rules stated above. Consult the documentation for the specific message for details on the semantics of the return value.

    WM_CHARTOITEM
    WM_COMPAREITEM
    WM_CTLCOLORBTN
    WM_CTLCOLORDLG
    WM_CTLCOLOREDIT
    WM_CTLCOLORLISTBOX
    WM_CTLCOLORSCROLLBAR
    WM_CTLCOLORSTATIC
    WM_INITDIALOG
    WM_QUERYDRAGICON
    WM_VKEYTOITEM



    Remarks

    You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.

    Function Information

    Header Declared in Winuser.h, include Windows.h
    Import library None
    Minimum operating systems Windows 95, Windows NT 3.1

    See Also

    Dialog Boxes Overview, CreateDialog, CreateDialogIndirect, CreateDialogIndirectParam, CreateDialogParam, DefWindowProc, DialogBox, DialogBoxIndirect, DialogBoxIndirectParam, DialogBoxParam, SetFocus, WM_INITDIALOG

    --------------------------------------------------------------------------------

    © 2005 Microsoft Corporation. All rights reserved.

  3. #3
    Ngày gia nhập
    08 2006
    Bài viết
    60

    Hah ha ! Từ nào tui chỉ biết winproc thôi ! 0 nghĩ tới hàm dialogproc.
    Theo tui hiểu thì khi xử lý thông điệp thì trước tiên nên gọi SetWindowLong(hwndDlg, DWL_MSGRESULT, lResult), sau đó mới return TRUE.
    Sao tui thấy nhiều hàm xài nút OK, Cancel gì đó 0 gọi hàm này mà có sao đâu ?

Các đề tài tương tự

  1. Tầng Bussiness trong kiến trúc 3 tầng có phải chỉ đơn giản là return?
    Gửi bởi votantho93 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 09-11-2013, 08:10 AM
  2. Lập trình C++ Vì sao khi đa năng hóa toán tử lại phải return *this
    Gửi bởi nhockon trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 21-02-2012, 04:25 PM
  3. ADO.NET Cách viết (? true : false;) này phải hiểu như thế nào vậy
    Gửi bởi truonghuy89 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 24-08-2011, 04:43 PM
  4. hàm bắt buộc nhập số, nếu là số thì return 1, còn ký tự thì return 0;
    Gửi bởi khacphuctran trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 11-03-2011, 04:39 PM
  5. Khi nào cần return 0, return 1 trong int main()
    Gửi bởi jojocolumbus trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 22-06-2010, 10:23 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn