WIL説明書(C++)  3.0.0
ディスプレイクラス

画像オブジェクトが持つ画像データを画面に表示します。 画面への描画はデバイスコンテキストを介して行われます。 設定された画像がパタン(FVCL::Data::CFvPattern)の場合は、 画像の前面にパタンマスクをオーバレイ処理して表示します。

CFvDisplay_component1.png

このオブジェクトを生成後、 Create を1度実行して表示準備を行ってください。
描画の際は、下記の手順で実行してください。


サンプルコード

下記は、ダイアログ上の任意の位置に画像を描画する例です。
ダイアログに配置したピクチャボックス(下図左の赤枠で示す部分)のデバイスコンテキストに画像を描画しています。

スクリーンショット:

デザイナ 実行結果
CFvDisplay_SampleCodeDlg0.png
CFvDisplay_SampleCodeDlg1.png

ヘッダー:

#pragma once
#include "FVCLbasic.h"
#include "afxwin.h"
class CSampleCodeDlg : public CDialogEx
{
public:
CSampleCodeDlg(CWnd* pParent = NULL);
enum { IDD = IDD_SAMPLECODE_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
protected:
HICON m_hIcon;
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
protected:
FVCL::Data::CFvImage m_Image;
FVCL::GDI::CFvDisplay m_Display;
public:
CStatic m_View;
};

実装: (初期化処理)

BOOL CSampleCodeDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// (1) 背景に表示する画像を読み込みます.
m_Image.Load(_T("TestFiles/floppy_RGB.jpg"));
// (2) ディスプレイを初期化します.
m_Display.Create();
return TRUE;
}


関連:


実装: (描画処理)

void CSampleCodeDlg::OnPaint()
{
if (IsIconic())
{
// (省略)
}
else
{
CPaintDC dcPaint(this);
{
// (3) 描画先のデバイスコンテキストを取得します.
CPaintDC dc(&m_View);
// (4) 画像の表示範囲を指定します.
CRect client;
m_View.GetClientRect( &client );
m_Display.SetDisplayRect( RECT(client) );
// (5) 描画対象画像を設定します.
m_Display.SetImage(&m_Image);
// (6) デバイスコンテキストへ画像データを書き出します.
m_Display.Draw(dc.GetSafeHdc());
}
CDialogEx::OnPaint();
}
}


関連:


実装: (その他、MFC ダイアログの初期化部分)

#include "stdafx.h"
#include "SampleCode.h"
#include "SampleCodeDlg.h"
#include "CAboutDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CSampleCodeDlg::CSampleCodeDlg(CWnd* pParent)
: CDialogEx(CSampleCodeDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSampleCodeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_VIEW, m_View);
}
BEGIN_MESSAGE_MAP(CSampleCodeDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
void CSampleCodeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
HCURSOR CSampleCodeDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時12分56秒 for WIL説明書(C++) by doxygen 1.8.11