DIBLOOK-Beispiel: Veranschaulicht die Verwendung von DIBs und Farbpaletten

Das DIBLOOK-Beispiel veranschaulicht die Verwendung von geräteunabhängigen Bitmaps (DIBs) und die eng miteinander verbundene Verwendung der Farbpaletten.

DIBLOOK veranschaulicht außerdem ein Dokument mit einem extern definierte Dateiformat (in diesem Fall das DIB-Dateiformat). Dies steht im Gegensatz zu einem intern definierten Dateiformat, das andernfalls beim Aufrufen des Dokuments Serialize-Funktion den Inhalt des Dokuments auf der Festplatte speichert des Frameworks impliziert wird. Weitere DIBLOOK veranschaulicht Verwendung der Zwischenablage, CFile und Bildlaufansichten.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen Sie und führen das DIBLOOK-Beispiel

  1. Öffnen Sie die Projektmappe DibLook.sln.

  2. erstellen Sie Menü, klicken Sie auf erstellen.

  3. Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.

DIBLOOK ist eine Anwendung multiple Document Interface (MDI), mit der Sie mehrere Bitmaps gleichzeitig anzeigen kann. Verwenden Sie Datei, um eine geräteunabhängige Bitmap (DIB) Datei oder ein Device-Dependent Bitmap (.bmp)-Datei zu öffnen. Alternativ können Sie ein neues Bitmapdokument erstellen, durch Kopieren einer Bitmap aus einer anderen Anwendung, wie z. B. Farbe, mit die Zwischenablage wie folgt:

  • Kopieren Sie von der anderen Anwendung eine Bitmap in die Zwischenablage.

  • Verwenden Sie im Dateimenü -Befehl DIBLOOK-neu, um ein neues Bitmapdokument zu erstellen.

  • Verwenden Sie Befehls einfügen Menü "Bearbeiten", um die Bitmap aus der Zwischenablage in das neue Dokument kopieren.

Obwohl das Bild in DIBLOOK nicht bearbeiten können, können Sie die Bitmap in eine andere Datei unter Verwendung von Befehl Speichern unter im Dateimenü speichern. Die Bitmap wird in Device-Independent Bitmap-Format gespeichert, auch wenn das ursprüngliche Format geräteabhängig wurde.

Extern definierte Dokumentformat

DIBLOOK liest und speichert Bitmaps im standard Windows Device-Independent Bitmap-Format. Klicken Sie im Speicher, wird die Bitmap von Windows unter Verwendung eines nicht transparenten HDIB Handles verwaltet. Das interne Format der Bitmap ist für die Anwendung sichtbar. Folglich speichert DIBLOOK des Dokuments nicht selbst die Bitmapbits oder die Farbtabelle. CDibDoc Wird stattdessen einen Handle für die DIB-Datei (HDIB m_hDIB) enthält. DIBLOOK ist eine Anwendung, deren Dokumentformat ist, extern (i. d. r. einige Standarddateiformat wie DIB), im Gegensatz zu einer Anwendung definiert, deren Dokumentformat implizit entsprechend der Reihenfolge definiert ist in dem Sie das Dokument serialisiert Elemente in der CDocument::Serialize überschreiben.

CDocument::Serialize Wird von DIBLOOK nicht überschrieben. Stattdessen überschreibt DIBLOOK CDocument::OnOpenDocument und OnSaveDocument. Beide Überschreibungen verwenden das pszPathName, vom Framework übergebene um ein CFile-Objekt zu öffnen und zu lesen oder DIB-Datei speichern. Der tatsächliche Code zum Lesen und Speichern der DIB-Datei wird im MyFile.cpp; bereitgestelltDieser Code ist wiederverwendbare, von jeder Anwendung, die zum Lesen und DIB-Dateien speichern muss.

Verwendung von DIBs und Farbpaletten

DIBLOOK zeigt, wie eine DIB in einem Fenster angezeigt und wie Sie die Farbpalette für Fenster anzeigen die DIB-Datei vorbereiten.

Nachdem die DIBLOOK-Anwendung die DIB-Datei aus einer Datei liest, bereitet ein CPalette -Objekt auf Grundlage der Farbtabelle der DIB-Datei und speichert die Palette als in das Objekt m_palhDIBCDibDoc. Wenn DIBLOOK-Anwendung die DIB-Datei in seine CDibView::OnDrawangezeigt wird, ruft er eine Windows ::PaintDIB Routine in DIBLOOK des Dibapi.cpp-Datei implementiert. in aktivieren Aufrufe der Windows-Funktion PaintDIB::SetDIBitsToDevice oder ::StretchDIBits, mit die Farbtabelle der DIB-Datei als Farbpalette. Die DIB anzeigen Routinen in Dibapi.cpp sind wiederverwendbare, von jeder Anwendung, die DIBs anzeigt.

DIBLOOK wählt eine Farbpalette, die optimal für das derzeit aktive Fenster ist. DIBLOOK wählt eine Farbpalette entspricht der Farbtabelle der DIB im derzeit aktiven MDI-untergeordneten Fenster angezeigt. Wenn eine Anwendung den Eingabefokus (verschieben mit Bit von einer anderen Anwendung) zu erhalten, empfängt das Fenster der obersten Ebene die WM_QUERYNEWPALETTE-Meldung. CMainFrame Fenster des DIBLOOK behandelt diese Meldung durch Senden eine anwendungsdefinierte Meldung, WM_DOREALIZE an die untergeordneten Fenster. Die Liste der untergeordneten Fenster enthält alle Ansichten der möglichen mehrere geöffnete Dokumente. Wiederum wird jede Ansicht in seinem Anzeigekontext als eine Palette Vordergrund- oder Hintergrundfarbe je nachdem, ob die Ansicht das aktive Steuerelement ist ausgewählt.

Wenn eine andere Anwendung die Systempalette ändert, empfängt DIBLOOK die Meldung WM_PALETTECHANGED. In diesem Fall sendet das Fenster CMainFrame erneut die anwendungsdefinierte Meldung, WM_DOREALIZE an jede Ansicht. Jede Ansicht wählt seine Palette in den Anzeigekontext als Hintergrundpalette, jedoch gibt die Vordergrundfarbe Palette an die andere Anwendung zurück.

Wenn der Fokus innerhalb der Anwendung von einer Ansicht zu einem anderen wechselt, DIBLOOK wählt, und die Palette für die derzeit aktive realisiert (siehe CDibView::OnActivateView) anzeigen. Wenn die neue Palette realisiert wird, sendet Windows die Meldung WM_PALETTECHANGED an Fenster der obersten Ebene aller Anwendungen, einschließlich der von DIBLOOK. DIBLOOK behandelt die Nachricht, indem Realisierung als Hintergrundpalette andere DIBs in den anderen Ansichten die Farbtabellen zugeordnet.

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

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

Hinweis

Einige Beispiele, z. B. eine, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

MFC-Beispiele