Sample10

[Document - View]


//--------------------------------------------------------------------------------
//
//【アプリケーション起動時に新規ドキュメントを開かないようにする】
//

// アプリケーションクラスのInitInstance()のProcessShellCommand()を呼ぶ直前に以下の一行を追加する。
{
	cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing ;
}
//--------------------------------------------------------------------------------
//
//【アプリケーション起動時に特定のファイルを開く】
//

// アプリケーションクラスのInitInstance()のProcessShellCommand()を呼ぶ直前に以下の処理を追加する。
{
	cmdInfo.m_nShellCommand = CCommandLineInfo::FileOpen ;
	cmdInfo.m_strFileName   = "開きたいファイル名";
}
//--------------------------------------------------------------------------------
//
//【ファイルオープン時にMDI子ウィンドウを最大表示する】
//

// ChildFrame::ActivateFrame()をオーバーライドする
void ChildFrame::ActivateFrame(int nCmdShow) 
{
	nCmdShow = SW_SHOWMAXIMIZED ;
	CMDIChildWnd::ActivateFrame(nCmdShow) ;
}
//--------------------------------------------------------------------------------
//
//【デフォルトのファイルオープン時に表示されるダイアログのファイルの種類を指定するには?】
//
// SDIであればアプリケーションクラスのInitInstance()内に以下のような処理がある。 
{
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CxxxDoc),
		RUNTIME_CLASS(CMainFrame),       // メイン SDI フレーム ウィンドウ
		RUNTIME_CLASS(CxxxView));
		AddDocTemplate(pDocTemplate);

// このCSingleDocTemplateの第一引数(IDR_MAINFRAME)がドキュメントの型を定義してあるリソースのIDである。
// リソースエディタでこのリソースIDの中を見ると デリミタ(\n)で区切られた7つ の文字列が定義されている。
// 4番目と5番目の文字列を変更することにより ファイルを開くダイアログでのファ イル種類と拡張子を変更できる。
// 詳しくは CDocTemplate::GetDocString のヘルプを参照のこと。

// MDIの場合 CSingleDocTemplate を CMultiDocTemplate に読み替える。 

// リソースIDの名前は必ずしも IDR_MAINFRAME というわけではない。 
//--------------------------------------------------------------------------------
//
//【「xxxへの変更を保存しますか?」のダイアログについて】
//

// 一般的なWindowsアプリケーションでは、編集中のデータを保存せずにウィンドウを閉じようとすると
// 「xxxへの変更を保存しますか?」というダイアログがでてくる。 MFCのフレームワークでは、ドキュ
// メントクラスにダーティフラグ(データが変更されたが保存されていないことを意味するフラグ)を持
// っており ダーティフラグがたっている 状態でウィンドウを閉じようとするとこのダイアログが出て
// くる。
// 逆に言うとウィンドウを閉じるときにこのダイアログを出したければその前にダーティフラグを立てれ
// ばよく、ダイアログを出したくなければダーティフラグを落とせばよいわけである。
// ダーティフラグの操作は CDocument::SetModifiedFlag()で行えます。フラグが立っているかの照会は
// CDocument::IsModified()で可能。 
//--------------------------------------------------------------------------------
//
//【ビューの背景色を変更する】
//
//1. クラスウィザードを使って WM_ERASEBKGNDのメッセージハンドラを追加。
//
//2. メッセージハンドラ内で以下の処理を行う 

BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
	// ブラシを作成
	CBrush backBrush(RGB(255, 128, 128)) ;

	// 新しいブラシを選択して 現在のブラシを保存
	CBrush* pOldBrush = pDC->SelectObject(&backBrush) ;

	// 現在のクリッピング領域の矩形を取得
	CRect rect ;
	pDC->GetClipBox(&rect) ;

	// 矩形を塗りつぶす
	pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY) ;

	// ブラシを元に戻す
	pDC->SelectObject(pOldBrush) ;

	return TRUE ;
}
//--------------------------------------------------------------------------------
//
//【ビットマップを読み込んでビューに表示する】
//
//ビューのOnDraw()で以下の処理を行う 

{
	BITMAP bm ; 
	
	// 表示したいビットマップ(この例ではwinnt256.bmp)のハンドルを取得
	HBITMAP hBitMap = (HBITMAP)LoadImage(AfxGetApp()->m_hInstance, _T("winnt256.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE) ;
	
	CDC MemoryDC ;
	
	// メモリデバイスコンテキストを作成
	// (メモリデバイスコンテキストは画面に表示するイメージをメモリ上に準備するために使う
	MemoryDC.CreateCompatibleDC(pDC) ;
	
	// ビットマップオブジェクトを選択
	// (後で元に戻すために現在のオブジェクトをとっておく)
	HBITMAP hBmOld = (HBITMAP)::SelectObject(MemoryDC.m_hDC, hBitMap) ; 
	
	// ビットマップの情報を取得
	::GetObject(hBitMap, sizeof(BITMAP), &bm) ;
	
	// ビットマップをメモリデバイスコンテキストからコピー
	// ビットマップのサイズをそのまま表示する場合
	pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemoryDC, 0, 0, SRCCOPY) ;
/***********************************************
	// 出力画面の大きさにリサイズする場合
	// 現在のクリッピング領域の矩形を取得
	CRect rc ;
	pDC->GetClipBox(&rc) ;

	// 出力画面の大きさにリサイズ
	pDC->StretchBlt(0, 0, rc.Width(), rc.Height(), 
			&MemoryDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY) ;	
***********************************************/
	
	// オブジェクトを元に戻す
	::SelectObject(MemoryDC.m_hDC, hBmOld) ;
	
	MemoryDC.DeleteDC() ;
}