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 2 của 2
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi sự kiện khi sử dụng hàm DefWindowProc !

    Chào mọi người, em xin phép vào đề luôn :

    Em tạo một Project VC++ 2010 WIN32 PROJECT .

    Em tạo một cái giao diện đơn giản vẽ thủ công bằng Dialog.rc như này

    Mã:
    IDD_FORMVIEW DIALOGEX 0, 0, 185, 93
    STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
    FONT 8, "MS Shell Dlg", 400, 0, 0x0
    BEGIN
        PUSHBUTTON      "Button1",IDC_BUTTON1,60,30,50,14
    END
    File Main.cpp

    Mã:
    #include <Windows.h>
    #include "resource.h"
    
    LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
    INT WINAPI wWinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPWSTR lpCmdLine, __in int nShowCmd )
    {
    	DialogBox(hInstance, MAKEINTRESOURCE(IDD_FORMVIEW), NULL, (DLGPROC)DlgProc);
    	return 0;
    }
    
    LRESULT CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    	case WM_SYSCOMMAND:
    		if (wParam == SC_CLOSE)
    		{
    			EndDialog(hWnd, NULL);
    			PostQuitMessage(WM_QUIT);
    		}
    		break;
    	case WM_COMMAND:
    		if (wParam == IDC_BUTTON1) { MessageBox(hWnd, NULL, NULL, NULL); break; }
    	default:
    		return DefWindowProc(hWnd, uMsg, wParam, lParam);
    	}
    	return 0;
    }
    Vấn đề :

    Sau khi em click vào cái Close hoặc ALT + F4 => OK Thoát
    Nhưng lúc click vào button thì nó vẫn hiện cái MessageBox kia nhưng nó bị treo ở cái box đó, click ok + x để đóng cái MsgBox lại nhưng không được

    Sau khi em xóa cái return DefWindowProc(hWnd, uMsg, wParam, lParam) và thay bằng return 0 thì lại OK .

    Xin mọi người giải thích cho em với ạ !

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đối với Dialog nói chung, TA KHÔNG GỌI DefWindowProc mà return FALSE nếu ta không xử lý một thông điệp nào đó. Hơn nữa EndDialog là đủ rồi, không cần PostQuitMessage

 

 

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
  •