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

Đề tài: Bị mất menu khi chạy code với Edit control - WIN32 API

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

    Mặc định Bị mất menu khi chạy code với Edit control - WIN32 API

    Mình đang tự học lập trình windows gặp 1 số chỗ khó hiểu quá mong các ae giúp đỡ. Vấn đề là khi mình run code với cái này:
    Code:
    CreateWindow(TEXT("edit"),TEXT("..."), WS_VISIBLE | WS_CHILD|ES_AUTOHSCROLL, 200, 152, 100, 50, hwnd, NULL, NULL, NULL)
    thì toàn bộ cái Menu mình Add vào biến mất, xóa đi thì lại hết , sai chỗ nào nhể các ae!!

    Visual C++ Code:
    1. #include "windows.h"
    2. #define FILE_MENU_NEW 1
    3. #define FILE_MENU_OPEN 2
    4. #define FILE_MENU_EXIT 3
    5. #define FILE_MENU_SUB 4
    6.  
    7. // Gửi hàm xử lí message
    8. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    9. void AddMenus(HWND);
    10. void AddControl(HWND);
    11.  
    12. // Hàm Winmain()
    13. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    14. {
    15.     MSG  msg;
    16.     HWND hwnd;
    17.     WNDCLASS wc;
    18.     wc.style = CS_HREDRAW | CS_VREDRAW;
    19.     wc.cbClsExtra = 0;
    20.     wc.cbWndExtra = 0;
    21.  
    22.     wc.lpszClassName = TEXT("Window");
    23.     wc.hInstance = hInstance;
    24.     wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
    25.     wc.lpszMenuName = NULL;
    26.     wc.lpfnWndProc = WndProc;
    27.  
    28.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    29.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    30.     RegisterClass(&wc);
    31.  
    32.     hwnd = CreateWindow(wc.lpszClassName, TEXT("Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    33.         100, 100, 500, 500, NULL, NULL, hInstance, NULL);
    34.     ShowWindow(hwnd, nCmdShow);   // Display windows
    35.  
    36.     UpdateWindow(hwnd);   // Update windows
    37.  
    38.     while (GetMessage(&msg, NULL, 0, 0))
    39.     {
    40.         DispatchMessage(&msg);
    41.         TranslateMessage(&msg);
    42.     }
    43.     return (int)msg.wParam;
    44. }
    45.  
    46. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    47. {
    48.     HDC hdc;
    49.     PAINTSTRUCT ps;
    50.     RECT rect;
    51.     /*Xử lý các thông điệp cần thiết với ứng dụng*/
    52.     switch (msg)
    53.     {
    54.     case WM_COMMAND:
    55.         switch (wParam)
    56.         {
    57.         case FILE_MENU_NEW:
    58.             MessageBeep(MB_OK);
    59.             break;
    60.         case FILE_MENU_OPEN:
    61.             MessageBeep(MB_OK);
    62.             break;
    63.         case FILE_MENU_EXIT:
    64.             //PostQuitMessage(0);
    65.             DestroyWindow(hwnd);
    66.             break;
    67.         }
    68.  
    69.     case WM_CREATE:
    70.         AddMenus(hwnd);
    71.         AddControl(hwnd);
    72.         break;
    73.     case WM_PAINT:
    74.         /*Viết đoạn mã khi tô vẽ lại cửa sổ*/
    75.         // hdc = BeginPaint ( hwnd, &ps);
    76.         //GetClientRect (hwnd, &rect);
    77.         //DrawText(hdc, "Hello", -1, &rect,DT_SINGLELINE| DT_CENTER| DT_VCENTER);
    78.         //EndPaint ( hwnd, &ps);
    79.         break;
    80.     case WM_SIZE:
    81.         /*Viết đoạn mã khi kích thước cửa sổ thay đổi*/
    82.         break;
    83.     case WM_DESTROY:
    84.         /*Cửa sổ bị đóng*/
    85.         PostQuitMessage(0);
    86.         break;
    87.     }
    88.     return DefWindowProc(hwnd, msg, wParam, lParam);
    89.  
    90. }
    91. void AddMenus(HWND hwnd)
    92. {
    93.     HMENU hMenu = CreateMenu();
    94.     HMENU hFileMenu = CreateMenu();
    95.     HMENU hSubMenu1 = CreateMenu();
    96.  
    97.     AppendMenu(hFileMenu, MF_POPUP, (UINT_PTR)hSubMenu1, "New");
    98.     AppendMenu(hFileMenu, MF_STRING, FILE_MENU_OPEN, "Open");
    99.     AppendMenu(hFileMenu, MF_SEPARATOR, NULL, NULL);
    100.     AppendMenu(hFileMenu, MF_STRING, FILE_MENU_EXIT, "Exit");
    101.  
    102.     AppendMenu(hSubMenu1, MF_STRING, FILE_MENU_SUB, "Open Folder");
    103.     AppendMenu(hSubMenu1, MF_STRING, NULL, "Open File");
    104.  
    105.     AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu, "File");
    106.     AppendMenu(hMenu, MF_STRING, 2, "View");
    107.     SetMenu(hwnd, hMenu);
    108. }
    109. void AddControl(HWND hwnd)
    110. {
    111.     CreateWindow(TEXT("static"), TEXT("Google"), WS_VISIBLE | WS_CHILD | SS_CENTER, 200, 100, 100, 50, hwnd, NULL, NULL, NULL);
    112.     CreateWindow(TEXT("edit"),TEXT("..."), WS_VISIBLE | WS_CHILD|ES_AUTOHSCROLL, 200, 152, 100, 50, hwnd, NULL, NULL, NULL);
    113. }
    Đã được chỉnh sửa lần cuối bởi MHoang : 31-05-2018 lúc 05:52 PM. Lý do: Chỉnh khung mã

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    866

    Bạn đặt 1 lệnh vào dòng 68 : break; thì sẽ hết lỗi này.

    Cũng có thêm vài góp ý :

    _ Khi tạo điều khiển cần cho nó một định danh số ở tham số thứ 9 và thể hiện chương trình ở tham số 10. Ví dụ
    Visual C++ Code:
    1. //................
    2. #define  IDC_STATIC1  1001 // nếu muốn truy xuất NOTIFY điều khiển tĩnh
    3. #define  IDC_EDIT1  1002
    4. //..............
    5. void AddControl(HINSTANCE hInst, HWND hwnd)
    6. {
    7.     CreateWindow(TEXT("static"), TEXT("Google"), WS_VISIBLE | WS_CHILD | SS_CENTER, 200, 100, 100, 50, hwnd, (HMENU)IDC_STATIC1, hInst, NULL);
    8.     CreateWindow(TEXT("edit"),TEXT("..."), WS_VISIBLE | WS_CHILD|ES_AUTOHSCROLL, 200, 152, 100, 50, hwnd, (HMENU)IDC_EDIT1, hInst, NULL);
    9. }

    _ Khi tạo các Menu popup thì nên tạo bằng : CreatePopupMenu()
    _ Các lệnh chèn Menu của bạn không chính xác lắm, thiếu các cờ.

    Khi bạn thêm nhiều thành phần khác, nó rất dễ va chạm nếu không chỉnh sửa ngay từ đầu.

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

    Mình thấy lỗi rồi, cảm ơn góp ý của bạn nhiều nhé

Tags của đề tài này

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