ありますサンプル:DIB およびカラー パレットの使用を示しています

DIBLOOK サンプルでは、デバイスに依存しないビットマップ (DIB: Device-Independent Bitmap)、およびこれに関連するカラー パレットの使用方法を示します。

また、ファイル形式が外部で定義されている (この場合は DIB ファイル形式) ドキュメントの例もあります。 このファイル形式は、内部的に定義されたファイル形式とは対照的です。内部定義のファイル形式は、フレームワークが自動的にドキュメントの Serialize 関数を呼び出してドキュメントの内容をディスクに保存すると、自動的に指定されます。 さらに、DIBLOOK には、クリップボード、CFile、およびスクロール ビューの使用例もあります。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

DIBLOOK サンプルをビルドおよび実行するには

  1. ソリューション DibLook.sln を開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. でデバッグ メニューの、[デバッグなしで開始 をクリックします。

DIBLOOK は、同時に複数のビットマップを表示できるマルチ ドキュメント インターフェイス (MDI: Multiple Document Interface) アプリケーションです。 ファイルを開く既存のデバイスに依存しないビットマップ (.dib) ファイルまたはデバイス依存ビットマップ (.bmp) ファイルを開くには使用します。 または、次のようにクリップボードを使用して、ペイントブラシなどのアプリケーションからビットマップをコピーし、新しいビットマップ ドキュメントを作成することもできます。

  • ほかのアプリケーションからビットマップをクリップボードにコピーします。

  • あります [新規作成] コマンドは ファイル メニューを使用して、新しいビットマップ ドキュメントを作成します。

  • 編集 メニューの貼り付け コマンドを使用してビットマップをクリップボードから新しい文書にコピーします。

DIBLOOK にイメージを編集することはできませんが、ファイル メニューの に名前を付けて保存] コマンドを使用して、ビットマップを別のファイルに保存できます。 元の形式がデバイスに依存していた場合でも、ビットマップはデバイスに依存しないビットマップ形式で保存できます。

外部定義ドキュメント形式

DIBLOOK は、デバイスに依存しない標準 Windows ビットマップ形式でビットマップの読み取りと格納を行います。 メモリ内で、ビットマップ、不透明な HDIB ハンドルを使用して Windows によって管理されます。 ビットマップの内部形式は、アプリケーションから参照できます。 したがって、DIBLOOK のドキュメント自体にビットマップのビットまたはカラー テーブルは格納されません。 代わりに、CDibDoc (HDIB m_hDIB) の DIB にハンドルを保持します。 DIBLOOK (通常はいくつか標準ファイル形式標準 DIB など)、ドキュメント形式のアプリケーション外部ドキュメント形式、CDocument::Serialize 内のアイテムをオーバーライドして、ドキュメントにシリアル化の順序に従って暗黙的に定義されているアプリケーションとは対照的に定義されています。

DIBLOOK CDocument::Serialize が上書きされることはありません。 代わりに、ありますし、CDocument::OnOpenDocumentOnSaveDocument よりも優先されます。 両方のオーバーライドをフレームワークによって渡された pszPathName、 CFile オブジェクトを開くと読み DIB 保存したりします。 DIB ファイルの読み取りや保存のための実際のコードは、Myfile.cpp にあります。このコードは、DIB ファイルの読み取りや保存を必要とする、すべてのアプリケーションで再利用できます。

DIB およびカラー パレットの使用

DIBLOOK には、ウィンドウで DIB を表示する例、および DIB を表示するウィンドウ用にカラー パレットを準備する例があります。

DIBLOOK は DIB ファイルから読み取り後は、DIB カラー テーブルに基づく、CPalette オブジェクトを準備し、パレットを格納するとして m_palhDIBCDibDoc オブジェクトにします。 DIBLOOK は、DIB でその CDibView::OnDrawが表示されたら、DIBLOOK の Dibapi.cpp ファイルで実装されて Windows ::PaintDIB ルーチンを呼び出します。 PaintDIB ::SetDIBitsToDevice は、Windows の機能の旋回呼び出しまたは ::StretchDIBits の DIB カラー テーブルとしてのカラー パレットを使用して、します。 Dibapi.cpp の DIB 表示ルーチンは、DIB を表示するアプリケーションで再利用できます。

DIBLOOK は、現在アクティブなウィンドウに最適なカラー パレットを選択します。 DIBLOOK は、現在アクティブな MDI 子ウィンドウに表示されている DIB のカラー テーブルに対応するカラー パレットを選択します。 アプリケーションに入力フォーカス (別のアプリケーションから移行) が移ると、その最上位のウィンドウは WM_QUERYNEWPALETTE メッセージを受け取ります。 DIBLOOK の CMainFrame ウィンドウ、アプリケーション定義のメッセージ、 WM_DOREALIZE 各下位ウィンドウに送信することによって、このメッセージを処理します。 下位ウィンドウの一覧には、開いている可能性がある複数のドキュメントのすべてのビューが含まれています。 さらに、各ビューは、ビューがアクティブかどうかに応じて、優先表示パレットまたは 2 次パレットとしてディスプレイ コンテキストに取り込まれます。

別のアプリケーションがシステム パレットを変更すると、DIBLOOK は WM_PALETTECHANGED メッセージを受け取ります。 ここでは、CMainFrame ウィンドウ再度アプリケーション定義のメッセージ、 WM_DOREALIZE 各ビューに送ります。 各ビューは、それぞれのパレットを 2 次パレットとしてディスプレイ コンテキストに取り込みます。ただし、別のアプリケーションには優先表示パレットが生成されます。

別の 1 つのビューからアプリケーション内でフォーカスを移動したとき、DIBLOOK を選択し、パレットを現在アクティブな実現 (」を参照してください CDibView::OnActivateView) を表示します。 新しいパレットが実現されると、Windows は、WM_PALETTECHANGED メッセージをすべてのアプリケーションの最上位ウィンドウ (DIBLOOK のウィンドウも含む) に送ります。 DIBLOOK は、ほかのビューの DIB に関連付けられているカラー テーブルを 2 次パレットとして実現することによって、このメッセージを処理します。

Keywords

このサンプルでは、次のキーワードを使用します。

AfxGetApp; CCmdTarget::BeginWaitCursor; CCmdTarget::EndWaitCursor; CCmdUI::Enable; CDC::RealizePalette; CDC::SelectPalette; CDialog::DoModal; CDocument::DeleteContents; CDocument::OnNewDocument; CDocument::OnOpenDocument; CDocument::OnSaveDocument; CDocument::ReportSaveLoadException; CDocument::SetModifiedFlag; CDocument::SetPathName; CDocument::UpdateAllViews; CFile::Abort; CFile::Close; CFile::GetLength; CFile::Open; CFile::Read; CFile::ReadHuge; CFile::Write; CFile::WriteHuge; CFrameWnd::GetActiveView; CFrameWnd::LoadFrame; CMDIFrameWnd::MDIGetActive; CObject::AssertValid; CObject::Dump; CPalette::CreatePalette; CScrollView::SetScrollSizes; CStatusBar::Create; CStatusBar::SetIndicators; CString::LoadString; CToolBar::Create; CToolBar::LoadBitmap; CToolBar::SetButtons; CView::DoPreparePrinting; CView::GetDocument; CView::OnActivateView; CView::OnDraw; CView::OnInitialUpdate; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::DoDataExchange; CWnd::OnCreate; CWnd::OnPaletteChanged; CWnd::OnQueryNewPalette; CWnd::OpenClipboard; CWnd::SendMessage; CWnd::SendMessageToDescendants; CWnd::ShowWindow; CWnd::UpdateWindow; CloseClipboard; DragAcceptFiles; EmptyClipboard; GetClipboardData; GetDeviceCaps; GlobalAlloc; GlobalFree; GlobalLock; GlobalSize; GlobalUnlock; IsClipboardFormatAvailable; MessageBox; SelectPalette; SetClipboardData; SetDIBitsToDevice; SetStretchBltMode; StretchDIBits; memcpy

注意

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

MFC サンプル