システムの情報を動的に表示する方法、とても便利です(^_^)
キーワード ヘルプ ファイル情報には、元の著者の名前 Qi Gao と記事の元のソースが表示されます。
はじめに: 一般的なシステムのヘルプ ファイルは、ヘルプ情報を表示する際に静的なフォームを使用してインターフェイス上に内容を表示することが多いのですが、今回プロジェクト開発を担当しているため、いつも単調すぎると感じているため、それぞれの検索後にウェブサイトで、良いコントロールクラス(フォント表示コントロールクラス)を見つけたので、それを拡張し、いくつかの動的表示機能を完成させました。 完成後、表示されるさまざまなヘルプ情報がムービーのように動的に表示されます。ここでは、この分野を研究している人、または良い方法を探している人に役立つことを願って、作成プロセス、コード、およびデモンストレーションの効果を書き留めます。
同時に、必要に応じて、この記事のコードに表示されるテキスト情報を変更できます。
本文にヘルプファイルを表示するときは全画面表示方式を使っているのですが、VIEW全画面方式だといつも見苦しく感じてしまうので、まず全画面表示をベースに背景画像を貼り付けています。実際には、背景画像上に直接 CSTATIC コントロールを動的に作成するのが簡単な方法ですが、私のシステムでは処理する他の多くの関数インターフェイスを使用しました。ダイアログ ボックス。モードレス ダイアログ ボックスの形式を採用し、作成後に指定した場所に移動します。
製造手順:
VCを起動し、CVIEWに基づいて単一のドキュメント関数を作成し、残りはデフォルト設定のままにします。
従来のようなフルスクリーンの考え方は進めず、メインフレームのMoveWindowを画面の解像度に合わせて移動し、タイトルバー、メニューバー、ツールバー、ステータスバーなどを削除して表示しました。ほぼフルスクリーン効果で、その上に背景画像を貼り付けるだけです。おそらく、これはフルスクリーンの概念とはまったく考えられません(^_^)。具体的な実装手順は次のとおりです。
APP の InitInstance() 関数を次のように変更します。
// 唯一のウィンドウが初期化されたので、表示して更新します。
m_pMainWnd->SetMenu(NULL);//メニューを削除
m_pMainWnd->ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);//フォームのプロパティを変更します
m_pMainWnd->MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)),TRUE);//フォームを画面の解像度に移動します
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//これについては説明する必要はありません
m_pMainWnd->UpdateWindow();
次に、MainFrame クラスのメンバー関数を変更して、ツールバーとステータス バーを削除します。PreCreateWindow(CREATESTRUCT& cs) 関数を次のように変更します。
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
-1 を返します。
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_HIDE);//タスクバーを非表示にします。非表示にしないと、これは常に不適切なタイミングで表示され、全体的な効果に影響します。
0を返します。
}
上記の手順では WINDOWS タスクバーを非表示にするため、プログラムの終了時にタスクバーを復元する必要があります。プログラムは終了時に WM_CLOSE メッセージを送信する必要があるため、WM_CLOSE メッセージをインターセプトできます。 MainFrame のここで、ステータス バーを復元するコードは次のとおりです。
void CMainFrame::OnClose()
{
// TODO: ここにメッセージ ハンドラー コードを追加するか、デフォルトを呼び出します。
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);//タスクバーを元に戻す
CFrameWnd::OnClose();
}
この時点で、基本的な準備作業は完了しました。次のタスクは、背景ビットマップを貼り付け、表示されるダイアログ ボックスを作成することです。
背景ビットマップを貼り付けます。背景ビットマップをロードし、VIEW の WM_PAITN メッセージをマップし、次に背景ビットマップを貼り付け、同時に WM_EARSEBKGND メッセージをマップし、画面消去作業を削除します。return ステートメントを return TRUE に変更するだけです。
void CAboutDemoView::OnPaint()
{
// TODO: ここにメッセージ ハンドラー コードを追加します
CPaintDC dc(this); // ペイント用のデバイスコンテキスト
HBITMAP hビットマップ;
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));
HDC hMenDC=::CreateCompatibilityDC(NULL);
SelectObject(hMenDC,hbitmap);
::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);
::DeleteDC(hMenDC);
::DeleteObject(hbitmap);
// メッセージを描画するために CView::OnPaint() を呼び出さないでください
}
関連情報を表示するためのダイアログ ボックス リソースを作成し、ダイアログ ボックスのプロパティ ([スタイル]->[ポップアップ]、[境界]->[なし]) を変更し、ダイアログ ボックス クラス CShowAboutDlg を作成して、ダイアログ ボックスに CSTATIC コントロールを配置し、その位置を調整します。
このモードレス ダイアログ ボックスを VIEW で作成し、表示します。
CShowAboutDlg *m_pAboutDlg;
CRect;
m_pAboutDlg = 新しい CShowAboutDlg();
m_pAboutDlg->作成(IDD_ABOUT);
m_pAboutDlg->MoveWindow(CRect(18,18,::GetSystemMetrics(SM_CXSCREEN)-13,::GetSystemMetrics(SM_CYSCREEN)-16),TRUE); //背景画像には境界線があるため、その位置をここで予約する必要があります。
m_pAboutDlg->GetClientRect(&rect);
m_pAboutDlg->m_AboutCtrl.MoveWindow(rect,TRUE);//この PIC コントロールはダイアログ ボックスのクライアント領域を占有します
m_pAboutDlg->ShowWindow(SW_SHOW);
以下はフォント表示制御クラスを追加するファイルです。 ZgMemDC、ZgDraw.h、ZgDraw.cpp、TitleShow.h、TitleShow.cpp、PublicClass.cpp、PublicClass.h をプロジェクトに追加し、AutoFont.h とAutoFont.cpp の機能は言うまでもなく、以前の記事で紹介したフォント表示制御クラスをベースに、適当なコードを修正してテキスト表示を修正しました。オリジナルクラス このフォントは現在のシステムの表示要件に適していません (^_^)。
次に、メッセージをダイアログ クラスにロードして表示するだけです。
表示 CSTATIC クラス オブジェクト TitleShow を定義し、初期化で情報表示コンテンツを追加します。
****
もう 1 つの手順は、復帰キーと ESC キーをインターセプトしてダイアログ ボックスを終了することです。
BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 特殊なコードをここに追加するか、基本クラスを呼び出します。
if(pMsg->メッセージ == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
ケース VK_RETURN:
TRUEを返します。
ケース VK_ESCAPE:
TRUEを返します。
}
}
CDialog::PreTranslateMessage(pMsg) を返します。
}
この時点で、プログラムの基本的な作業は完了し、プロジェクトをコンパイルして実行して効果を確認します。
拡大する