-
14-11-2010, 08:49 AM #1Junior Member
- 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?
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?
View more random threads:
- Lập trình GUI cho mình trên Windows như thế nào?
- Cách tạo 1 cửa sổ tương tự như một số phần mềm tra từ điển(lingoes, lạc việt)?
- Sử dụng WriteProcessMemory, báo lỗi cannot open process :((
- VC++ Connect MySQL software
- Thuật toán Mã Hóa VMAC ?
- Hàm stricmp() so sánh kiểu WCHAR*
- Cryptography Next Generation Cách nào chạy trên windows XP ?
- Làm thế nào để đọc dữ liệu thanh ghi eax tại 1 dòng lệnh ASM
- Sử dụng hook trên ứng dụng không được focus như thế nào?
- Làm thế nào để phát hiện ra là Người dùng đang nhấn phím hay Unikey?
-
14-11-2010, 09:56 AM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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
-
14-11-2010, 11:00 AM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi gaVC++
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.
-
14-11-2010, 12:13 PM #4Junior Member
- 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 đó.
-
14-11-2010, 12:44 PM #5Junior Member
- 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.
-
14-11-2010, 01:08 PM #6Junior Member
- 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.
-
14-11-2010, 01:10 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi gaVC++
Vòng tay phong thủy là một vật phẩm mang lại sự may mắn trong tài lộc, tình duyên, sự nghiệp,.. Là một vật phẩm không xa lạ gì với chúng ta, vòng tay phong thủy có nhiều màu, đa dạng và mỗi màu sắc...
Ý nghĩa và cách phân loại vòng tay...