MFCを使ったビットマップの描画と印刷 – プログラミング – Home

MFCを使ったビットマップの描画と印刷
 
通知
すべてクリア

[解決済] MFCを使ったビットマップの描画と印刷


ゼン
 ゼン
(@ゼン)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

はじめまして、ゼンと言います。

VC++でMFCを使って、リソースから読み込んだBMPをビュー上に表示させ、BMP上
に円や新たなBMP画像を描画し、それを印刷するシステムを作成しているのですが、MF
Cの経験がなくて悩んでいます。

環境はWinXP,VC6,MFC,SDI(CView)で作成しています。

BMP上に円を描画することは出来るのですが、それを印刷しても、
もとのBMP画像しか印刷されません。

プログラムは以下のようになっています。
void CMap112View::OnDraw(CDC* pDC)
{
CMap112Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: この場所にネイティブ データ用の描画コードを追加します。

// 画像の表示
CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);
myDC.CreateCompatibleDC(pDC);
CBitmap* oldBMP=myDC.SelectObject(&myBMP);
pDC->BitBlt(5,25, 700, 755, &myDC, 0, 0, SRCCOPY);
myDC.SelectObject(oldBMP);
}
    ・
    ・
    ・
void CMap112View::OnButton1()
{
// 選択画面の出力
MyDialog1 myDL;
myDL.DoModal();

    // 円の表示
CClientDC dc(this);
CPen myPen,*oldPEN;

myPen.CreatePen(PS_SOLID, 4, RGB(255, 0, 0));
oldPEN = dc.SelectObject(&myPen);
dc.SelectObject(&myPen);
dc.SelectStockObject(NULL_BRUSH);
dc.Ellipse(700, 600, 500, 500);
dc.SelectStockObject(BLACK_PEN);
}

すいませんが、よろしくお願いします。


引用未解決
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

この作りでは、ボタンを押した後にウィンドウを別のウィンドウで隠すと、
円が表示されませんよね。以下の例のようにしてください。

void CMap112View::OnButton1()
{
m_Flag = TRUE; // メンバ変数。初期化しておく。
Invalidate();
}

void CMap112View::OnDraw(CDC* pDC)
{
...

// 画像の表示
CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);

//
if (m_Flag) {
// 円の表示

}


返信引用
ゼン
 ゼン
(@ゼン)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

さっそくの御返事ありがとうございました。

実行してみたのですが、やはりもとのBMP画像しか印刷されません。

void CMap112View::OnDraw(CDC* pDC)
{
CMap112Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: この場所にネイティブ データ用の描画コードを追加します。

// 大阪地図の表示
CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);
myDC.CreateCompatibleDC(pDC);
CBitmap* oldBMP=myDC.SelectObject(&myBMP);
pDC->BitBlt(5,25, 700, 755, &myDC, 0, 0, SRCCOPY);
myDC.SelectObject(oldBMP);

CClientDC dc(this);
CPen myPen,*oldPEN;

myPen.CreatePen(PS_SOLID, 4, RGB(255, 0, 0));
oldPEN = dc.SelectObject(&myPen);
dc.SelectObject(&myPen);
dc.SelectStockObject(NULL_BRUSH);
dc.Ellipse(700, 600, 500, 500);
dc.SelectStockObject(BLACK_PEN);
}
と書いてももとのBMP画像しか印刷されません。
ビュー上にはきちっと表示されているのですが・・・。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

OnDrawの引数のpDCに描かないと。


返信引用
ゼン
 ゼン
(@ゼン)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

あと、説明不足で申し訳なかったのですが、
ボタンを押した後に新しいウィンドウを呼びだし、円を描く位置を選択した後、
その情報がCViewに戻ってきてBMP上に円を描くようにしたいのですが。
ちなみに、新しいウィンドウは、円を描く位置を選択した後、
EndDialog(IDC_BUTTON1);
を用いて消すようにしています。

void CMap112View::OnButton1()
{
//円の位置を選択する画面を表示

MyDialog1 myDL;
myDL.DoModal();

CClientDC dc(this);
CPen myPen,*oldPEN;

myPen.CreatePen(PS_SOLID, 4, RGB(255, 0, 0));
oldPEN = dc.SelectObject(&myPen);
dc.SelectObject(&myPen);
dc.SelectStockObject(NULL_BRUSH);

switch (myDL.ss) {
case 1:
dc.Ellipse(700, 600, 500, 500);
break;
case 2:
dc.Ellipse(275, 275, 400, 400);
break;
case 3:
dc.Ellipse(275, 275, 350, 350);
CWnd* GetDlgItem;
break;
case 4:
dc.Ellipse(200, 200, 400, 400);
break;
case 5:
dc.Ellipse(700, 600, 500, 500);
break;
case 6:
dc.Ellipse(400, 100, 500, 500);
break;
}
dc.SelectStockObject(BLACK_PEN);
}


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

これじゃ、駄目なの?

void CMap112View::OnButton1()
{
m_Flag = TRUE; // メンバ変数。初期化しておく。

MyDialog1 myDL;
myDL.DoModal();

m_ss = myDL.ss;
Invalidate();
}

void CMap112View::OnDraw(CDC* pDC)
{
...

// 画像の表示
CDC myDC;
CBitmap myBMP;
myBMP.LoadBitmap(IDB_BITMAP1);

//
if (m_Flag) {
// 円の表示
switch (m_ss) {

}
}

# pDCに変更して印刷できたかどうかをまず書いてほしかった。


返信引用
ゼン
 ゼン
(@ゼン)
ゲスト
結合: 19年前
投稿: 4
Topic starter  

>pDCに変更して印刷できたかどうかをまず書いてほしかった。
pDCに変更して印刷できました。

すいません。大丈夫でした。
こちらのミスです。。
すっかかり勘違いをしていました。

振り返ってみるとすっごく、つまらない箇所でつまずいていたみたいですね。

そんなことにも丁寧に受け答えして頂き、どうも有難うございましたm(_ _)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました