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

    Làm thế nào chương trình vẫn hoạt động khi MessageBox được show lên?


  2. #2
    Tớ nghĩ là không thể. Không thể có các hành động chồng chéo lên nhau như thế được. Nó giống như cậu đang uống nươc thì không thể thở...nếu làm được thì rất dễ bị sặc...hihi

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi gaVC++
    Theo em được biết thì khi messagebox show lên thì chương trình sẽ dừng lại , khi nào messagebox tắt đi thì chương trình tiếp tục hoạt động , vậy có cách nào khi ta không tắt messagebox thì chương trình vẫn hoạt động bình thường không?
    Thực ra chương trình không dừng lại mà nó chuyển giao toàn bộ thực hiện cho vòng lặp sự kiện của messagebox.

    Vì bạn chưa lập trình đa luồng nên mặc định chương trình của bạn sẽ có một luồng duy nhất thực thi code của main. Khi gặp messagebox thì toàn bộ code trong main tạm thời dừng,và chuyển giao thực hiện mã lệnh của vòng lặp sự kiện bên messagebox. Vòng lặp sự kiến của messagebox sẽ kết thúc khi bạn đóng messagebox hoặc bấm vào một nút nào đó trên messagbox.
    Lúc đó quyền điều khiển trả về cho luồng chính của chương trình của bạn.


    Như vậy trong luồng nào gọi messagebox luồn đó sẽ phải nhường quyền điều khiển cho và tương tác cho messagebox tới khi messagebox này đóng thì luồng đó mới được thực hiện tiếp.

    Vì thế mà để làm như bạn nói tức là vừa có messagebox và vừa tương tác với chương trình chính ta có 2 cách sau
    Cách 1 : Sử dụng tạo ra 1 luồng mới ngoài luồng chính, vậy là chương trình của bạn sẽ có 2 luồng, luồng mới tạo sẽ gọi messagebox vì thế mà luồng chính trong chương trình của bạn vẫn tiếp tục hoạt động.

    Cách 2: Bạn tự tạo ra một messabox cho riêng bạn từ Dialog, sau đó gọi ShowWindows() để khiển Dialog hiện ra ở dạng modelless tức là bạn có thể tương tác với Dialog-Messagebox vừa có thể tương tác và thực hiện mã lệnh tiếp theo trong luồng chính chương trình của bạn.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Anh có thể nói kỹ cho em về cách 2 được không? Tại em hook MessageBoxA vào tiến trình đó.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bản nhớ đặc điểm của một Modeless Dialog là không hề chiếm quyền điều khiển của thread chính khi nó được hiện ra. Tức là Bạn vẫn có thể tương tác với main Window ở đằng sau và vẫn có thể tương tác với dialog như bạn muốn.
    Như vậy thì MyMessageBox của bạn sẽ kế thừa CDialog. trong đó MyDialog sẽ đặt các button các sự kiện xử lý như Dialog chuẩn của Windows.

    Lợi ích : Bạn có thể đặt Icon tùy ý ngoài mấy cái icon chuẩn của Windows, Vẽ vời hay sửa giao diện theo ý bạn. Tuy nhiên hơi công phu. Và khi gọi Dialog (nếu muốn Modeless thì gọi qua ShowWindow() còn nếu muốn nó hành xử như Message box chuẩ của Windows thì gọi hàm DoModal()).

    Tuy nhiên mình thấy thì cài riêng 1 thread gọi message vẫn hơn, dùng luôn messagebox chuẩn của Windows bạn mà lại đỡ tốn thời gian design lại cái message.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Anh ơi , vậy hook như thế nào để biến messagebox thành dialog vậy anh.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi gaVC++
    Anh ơi , vậy hook như thế nào để biến messagebox thành dialog vậy anh.
    Ý bạn là sao ? Tức là dùng Dialog giả làm Messagebox hay là làm cho messagebox chuẩn hoạt động gần giống như Dialog?

 

 

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
  •