Sebuah metode yang dapat digunakan untuk menampilkan informasi tentang sistem secara dinamis, sangat berguna (^_^)
Informasi file bantuan kata kunci menampilkan nama penulis asli, Qi Gao, dan sumber asli artikel.
Pendahuluan: Sebagian besar file bantuan sistem umum menggunakan formulir statis untuk menampilkan konten pada antarmuka saat menampilkan informasi bantuan kali ini, karena saya bertanggung jawab untuk pengembangan proyek kali ini, saya selalu merasa itu terlalu monoton, jadi di setiap Setelah mencari situs web, saya menemukan kelas kontrol yang bagus (kelas kontrol tampilan font), jadi saya memperluasnya dan menyelesaikan beberapa fungsi tampilan dinamis. Setelah selesai, berbagai informasi bantuan yang akan ditampilkan dapat ditampilkan secara dinamis seperti film. Sekarang saya akan menuliskan proses produksi, kode dan efek demonstrasi. Saya harap ini dapat bermanfaat bagi mereka yang telah meneliti di bidang ini atau sedang mencari metode yang baik.
Pada saat yang sama, Anda dapat mengubah informasi teks yang ditampilkan dalam kode artikel ini sesuai kebutuhan.
Ketika teks utama menampilkan file bantuan, saya menggunakan metode tampilan layar penuh, tetapi jika saya menggunakan metode LIHAT layar penuh, saya selalu merasa itu terlalu jelek, jadi saya tempel dulu gambar latar belakang berdasarkan gambar penuh. layar, dan kemudian memuatnya pada gambar latar belakang. Sebenarnya, metode sederhananya adalah dengan membuat kontrol CSTATIC secara dinamis langsung pada gambar latar belakang. Namun, karena sistem saya melibatkan banyak antarmuka fungsional lain untuk diproses, saya menggunakan kotak dialog. , mengadopsi bentuk kotak dialog modeless, dan kemudian memindahkannya ke lokasi yang ditentukan setelah dibuat.
Langkah-langkah produksi:
Mulai VC, buat satu fungsi dokumen berdasarkan CVIEW, dan pertahankan sisanya dengan pengaturan default.
Saya tidak melanjutkan dengan konsep layar penuh seperti cara tradisional. Sebaliknya, saya memindahkan bingkai utama MoveWindow ke resolusi layar, dan kemudian menghapus bilah judul, bilah menu, bilah alat, bilah status, dll. untuk ditampilkan. hampir seperti efek layar penuh, lalu tempelkan saja gambar latar belakang di atasnya. Mungkin ini sama sekali tidak bisa dianggap sebagai konsep layar penuh (^_^).
Ubah fungsi InitInstance() APP sebagai berikut:
// Jendela satu-satunya telah diinisialisasi, jadi tampilkan dan perbarui.
m_pMainWnd->SetMenu(NULL);//Hapus menu
m_pMainWnd->ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);//Memodifikasi properti formulir
m_pMainWnd->MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)),TRUE);//Memindahkan formulir ke resolusi layar
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//Tidak perlu menjelaskan ini
m_pMainWnd->UpdateWindow();
Kemudian modifikasi fungsi anggota kelas MainFrame untuk menghapus toolbar dan bilah status. Ubah fungsi PreCreateWindow(CREATESTRUCT& cs) sebagai berikut:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
jika (CFrameWnd::OnCreate(lpCreateStruct) == -1)
kembali -1;
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_HIDE);//Sembunyikan taskbar. Jika tidak disembunyikan, hal ini akan selalu muncul pada waktu yang tidak tepat dan mempengaruhi efek keseluruhan.
kembali 0;
}
Langkah-langkah di atas menyembunyikan taskbar WINDOWS, jadi kita harus mengembalikannya ketika program keluar. Kami tidak ingin melihatnya setelah program berakhir. Karena program perlu mengirim pesan WM_CLOSE ketika keluar, kita dapat mencegat pesan WM_CLOSE. dari MainFrame, disini Untuk mengembalikan status bar, kodenya adalah sebagai berikut:
batal CMainFrame::OnClose()
{
// TODO: Tambahkan kode pengendali pesan Anda di sini dan/atau panggil default
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);//Pulihkan bilah tugas
CFrameWnd::OnClose();
}
Pada titik ini, kami telah menyelesaikan pekerjaan persiapan dasar. Tugas selanjutnya adalah menempelkan bitmap latar belakang dan membuat kotak dialog yang ditampilkan.
Tempelkan bitmap latar belakang: Muat bitmap latar belakang, petakan pesan WM_PAITN dari VIEW, lalu tempelkan bitmap latar belakang, petakan pesan WM_EARSEBKGND secara bersamaan, dan hapus pekerjaan penghapusan layar. Cukup ubah pernyataan pengembalian menjadi: kembalikan TRUE.
batal CAboutDemoView::OnPaint()
{
// TODO: Tambahkan kode pengendali pesan Anda di sini
CPaintDC dc(ini); // konteks perangkat untuk melukis
peta bit HBITMAP;
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));
HDC hMenDC=::BuatKompatibelDC(NULL);
SelectObject(hMenDC,hbitmap);
::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);
::HapusDC(hMenDC);
::DeleteObject(hbitmap);
// Jangan panggil CView::OnPaint() untuk pesan pengecatan
}
Buat sumber daya kotak dialog untuk menampilkan informasi yang relevan, ubah properti kotak dialog, Style->Popup, Border->None; dan buat kelas kotak dialog CShowAboutDlg; kemudian tempatkan kontrol CSTATIC pada kotak dialog dan sesuaikan posisinya.
Buat kotak dialog modeless ini di VIEW dan tampilkan:
CshowTentangDlg *m_pTentangDlg;
Benar;
m_pAboutDlg = baru CShowAboutDlg();
m_pTentangDlg->Buat(IDD_ABOUT);
m_pAboutDlg->MoveWindow(CRect(18,18,::GetSystemMetrics(SM_CXSCREEN)-13,::GetSystemMetrics(SM_CYSCREEN)-16),TRUE); //Karena gambar latar belakang memiliki batas, posisi tersebut harus dicadangkan di sini
m_pAboutDlg->GetClientRect(&rek);
m_pAboutDlg->m_AboutCtrl.MoveWindow(rect,TRUE);//Kontrol PIC ini menempati area klien kotak dialog
m_pTentangDlg->ShowWindow(SW_SHOW);
Berikut ini adalah file untuk menambahkan kelas kontrol tampilan font. Tambahkan ZgMemDC, ZgDraw.h, ZgDraw.cpp, TitleShow.h, TitleShow.cpp, PublicClass.cpp, PublicClass.h ke proyek, lalu tambahkan AutoFont.h dan AutoFont.cpp. Tak perlu dikatakan lagi, fungsi kelas ini telah diperkenalkan di artikel sebelumnya. Berdasarkan orang yang menyediakan kelas kontrol tampilan font, saya memodifikasi sejumlah kode yang sesuai dan membuat modifikasi pada tampilan teks, karena kelas asli Font ini tidak sesuai dengan persyaratan tampilan sistem kami saat ini (^_^).
Kemudian muat dan tampilkan pesan di kelas dialog.
Tentukan tampilan objek kelas CSTATIC TitleShow, dan kemudian tambahkan konten tampilan informasi Anda di inisialisasi:
****
Langkah lainnya adalah mencegat tombol carriage return dan ESC untuk keluar dari kotak dialog.
BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Tambahkan kode khusus Anda di sini dan/atau panggil kelas dasar
if(pMsg->pesan == WM_KEYDOWN)
{
beralih(pMsg->wParam)
{
kasus VK_RETURN:
kembali BENAR;
kasus VK_ESCAPE:
kembali BENAR;
}
}
kembalikan CDialog::PreTranslateMessage(pMsg);
}
Pada titik ini, pekerjaan dasar program telah selesai. Kompilasi dan jalankan proyek Anda untuk melihat efeknya.
Memperluas