Hai cách ẩn hộp thoại trong MFC
Số trang: 3
Loại file: pdf
Dung lượng: 107.23 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Nếu đã từng phát triển ứng dụng dialog-based trên nền MFC, rất có thể bạn gặp vấn đề với việc ẩn hộp thoại chính mỗi khi chạy. Điều này rất quan trọng đối với những chương trình chạy nền, người dùng sẽ tương tác với chương trình thông qua hộp thoại phụ hoặc biểu tượng trên thanh Taskbar. Tôi cũng đã phải đau đầu với vấn đề này một thời gian khi những dòng lệnh như ShowWindow(SW_SHOW); đặt trong hàm OnInitDialog() tỏ ra vô hiệu. Sau khi tìm hiểu, tôi phát hiện ra đối với ứng dụng dialog-based, hộp thoại...
Nội dung trích xuất từ tài liệu:
Hai cách ẩn hộp thoại trong MFC Hai cách ẩn hộp thoại trong MFCNếu đã từng phát triển ứng dụng dialog-based trên nền MFC, rất có thể bạngặp vấn đề với việc ẩn hộp thoại chính mỗi khi chạy. Điều này rất quan trọngđối với những chương trình chạy nền, người dùng sẽ tương tác với chươngtrình thông qua hộp thoại phụ hoặc biểu t ượng trên thanh Taskbar. Tôi c ũng đãphải đau đầu với vấn đề này một thời gian khi những dòng lệnh nhưShowWindow(SW_SHOW); đặt trong hàm OnInitDialog() tỏ ra vô hiệu. Saukhi tìm hiểu, tôi phát hiện ra đối với ứng dụng dialog-based, hộp thoại chínhđược gọi thông qua câu lệnh .DoModal(). Câu lệnh này lại gọi hàm API làDialogBox(), do đó mặc nhiên hộp thoại chính sẽ được hiển thị.Cách xử lý dễ nhất là chuyển hộp thoại chính về dạng Modeless Box. Cách l àmrất đơn giản, bạn sửa đoạn mã trong hàm InitInstance() thành:CModelessDlg * pMainDlg;pMainDlg=new CModelessDlg;m_pMainWnd=pMainDlg;pMainDlg->Create(IDD_MODELESS_DIALOG);pMainDlg->ShowWindow(SW_HIDE);Chú ý, bạn phải thêm hàm PostNcDestroy() vào trong class CModelessDlg vàsửa CDialog::PostNcDestroy(); th ành delete this;Như vậy, chương trình của bạn đã có thể ẩn hộp thoại chính mỗi khi chạy.Tuy nhiên, cũng có thể bạn vẫn muốn giữ nguyên đặc tính của hộp thoại chính,vậy có một cách khác có thể giúp bạn thực hiện điều n ày. Bạn hãy thêm mộtbiến toàn cục có kiểu là BOOL, tên là bShow chẳng hạn. Trong hàm OnPaint()bạn hãy thêm đoạn mã sau:if(!bShow)ShowWindow(SW_HIDE);elseShowWindow(SW_SHOW);Và thiết lập sao cho mỗi khi chạy, biến bShow sẽ là FALSE nếu bạn muốn ẩnhộp thoại. Còn khi muốn hiện hộp thoại chính, bạn chỉ việc thêm đoạn mã:bShow=TRUE;Invalidate(TRUE);Trên đây là hai tìm tòi nhỏ của tôi, hy vọng có ích cho các bạn.Mai Văn QuânTGVT A tháng 2/2006, trang 108
Nội dung trích xuất từ tài liệu:
Hai cách ẩn hộp thoại trong MFC Hai cách ẩn hộp thoại trong MFCNếu đã từng phát triển ứng dụng dialog-based trên nền MFC, rất có thể bạngặp vấn đề với việc ẩn hộp thoại chính mỗi khi chạy. Điều này rất quan trọngđối với những chương trình chạy nền, người dùng sẽ tương tác với chươngtrình thông qua hộp thoại phụ hoặc biểu t ượng trên thanh Taskbar. Tôi c ũng đãphải đau đầu với vấn đề này một thời gian khi những dòng lệnh nhưShowWindow(SW_SHOW); đặt trong hàm OnInitDialog() tỏ ra vô hiệu. Saukhi tìm hiểu, tôi phát hiện ra đối với ứng dụng dialog-based, hộp thoại chínhđược gọi thông qua câu lệnh .DoModal(). Câu lệnh này lại gọi hàm API làDialogBox(), do đó mặc nhiên hộp thoại chính sẽ được hiển thị.Cách xử lý dễ nhất là chuyển hộp thoại chính về dạng Modeless Box. Cách l àmrất đơn giản, bạn sửa đoạn mã trong hàm InitInstance() thành:CModelessDlg * pMainDlg;pMainDlg=new CModelessDlg;m_pMainWnd=pMainDlg;pMainDlg->Create(IDD_MODELESS_DIALOG);pMainDlg->ShowWindow(SW_HIDE);Chú ý, bạn phải thêm hàm PostNcDestroy() vào trong class CModelessDlg vàsửa CDialog::PostNcDestroy(); th ành delete this;Như vậy, chương trình của bạn đã có thể ẩn hộp thoại chính mỗi khi chạy.Tuy nhiên, cũng có thể bạn vẫn muốn giữ nguyên đặc tính của hộp thoại chính,vậy có một cách khác có thể giúp bạn thực hiện điều n ày. Bạn hãy thêm mộtbiến toàn cục có kiểu là BOOL, tên là bShow chẳng hạn. Trong hàm OnPaint()bạn hãy thêm đoạn mã sau:if(!bShow)ShowWindow(SW_HIDE);elseShowWindow(SW_SHOW);Và thiết lập sao cho mỗi khi chạy, biến bShow sẽ là FALSE nếu bạn muốn ẩnhộp thoại. Còn khi muốn hiện hộp thoại chính, bạn chỉ việc thêm đoạn mã:bShow=TRUE;Invalidate(TRUE);Trên đây là hai tìm tòi nhỏ của tôi, hy vọng có ích cho các bạn.Mai Văn QuânTGVT A tháng 2/2006, trang 108
Tìm kiếm theo từ khóa liên quan:
Javascript ASP.NET Tin học đại cương giáo trình Tin học đại cương bài giảng Tin học đại cương tài liệu Tin học đại cương lý thuyết Tin học đại cươngTài liệu có liên quan:
-
Ứng dụng công cụ Quizizz thiết kế trò chơi học tập trong giảng dạy học phần tin học đại cương
12 trang 310 0 0 -
Tài liệu hướng dẫn thực hành Tin học đại cương - ĐH Bách Khoa Hà Nội
40 trang 263 0 0 -
Giáo trình Tin học đại cương part 7
19 trang 254 0 0 -
Giáo trình Tin học đại cương: Phần 1 - ĐH Kinh tế Quốc Dân
130 trang 184 0 0 -
Giáo trình Tin học đại cương: Phần 2 - Trần Đình Khang
118 trang 159 0 0 -
Giáo trình Tin học đại cương (Tái bản năm 2020): Phần 1 - PGS.TS. Nguyễn Thị Thu Thủy (Chủ biên)
105 trang 148 0 0 -
Hướng dẫn thực hành lập trình C trên Visual Studio
9 trang 138 0 0 -
Giáo trình Tin học đại cương: Phần 1 - Vi Hồng Thắm
90 trang 136 0 0 -
Quản trị người dùng trong Exchange 2007 bằng Powershell
9 trang 112 0 0 -
GIÁO TRÌNH LẬP TRÌNH WEB_PHẦN 2_BÀI 3
3 trang 110 0 0