こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ビットマップの表示ができません。

Visual Studio.net 2003
MFCを使用しています。
ビットマップの表示とフォームのサイズ変更はできたのですが、
以下のソースのように
フォームのサイズをビットマップのサイズに変更すると
ビットマップが表示されません。
一瞬表示はされているようですが、
真っ白になります。
フォームをきちんとビットマップのサイズに変更し、
ビットマップを表示するにはどうすればいいでしょうか?
int num=35;
void CProject1View::OnLButtonUp(UINT nFlags, CPoint point)
{
  // TODO : ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。
  char str[128];
  wsprintf(str,"c:\\test\\%d.bmp",num);num++;
  HBITMAP hbm = (HBITMAP)LoadImage(NULL, str, IMAGE_BITMAP,0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION );
  CBitmap *pBmp = CBitmap::FromHandle( hbm );
  BITMAP bmp;
  GetObject(hbm,sizeof(bmp),&bmp );
  CDC bmpdc;
  CDC *mydc=GetDC();
  bmpdc.CreateCompatibleDC(mydc);
  CBitmap *pOldBmp = bmpdc.SelectObject(pBmp);
  GetParentFrame()->SetWindowPos(&wndTop,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE);
  mydc->BitBlt( 0, 0,bmp.bmWidth, bmp.bmHeight, &bmpdc, 0, 0, SRCCOPY );
  bmpdc.SelectObject(pOldBmp);
  DeleteObject(hbm);
  CView::OnLButtonUp(nFlags, point);
}

投稿日時 - 2004-05-22 07:56:22

QNo.866685

困ってます

質問者が選んだベストアンサー

ビットマップのサイズ == フォームのサイズ
にしているわけですから、
他に余計なモノがあればその分ビットマップが切り詰められます。

SetWindowPos の高さの指定にステータスバー/ツールバーの Height を加味してやりましょう。

投稿日時 - 2004-05-22 19:55:08

補足

ありがとうございます。
int mnuh=GetSystemMetrics(SM_CYMENU);
int titleh=GetSystemMetrics(SM_CYCAPTION);
で、求められましたがステータスバーの高さ
の求め方がわかりません。
よろしくお願いします。

投稿日時 - 2004-05-22 20:44:39

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ステータスバー、ツールバー共に、 CStatusBar/CToolBar であれば、
CControlBar のメンバ関数 CalcFixedLayout() で得られます。

投稿日時 - 2004-05-22 23:08:29

補足

ありがとうございます。
void CProject1View::OnBnClickedButton1(){}
内で、CMainFrameクラスのm_wndStatusBarを呼び出すにはどうすればいいでしょうか?
何度もすみません。

投稿日時 - 2004-05-23 07:46:27

お礼

ありがとうございました。

Project1View.cpp内部で、外部変数
extern CStatusBar *status;

MainFrm.cpp.cpp内部で、外部変数
CStatusBar *status;
コンストラクタで、
CMainFrame::CMainFrame()
{
status=&m_wndStatusBar;
}
としましたら、
できたようです。
ありがとうございました。

投稿日時 - 2004-05-23 13:37:06

ANo.1

見たところマウスの左クリック時にしか画像の描画が行われていないようなので、
フォームの描画要求が来た際にも画像を描画するにようしましょう。

投稿日時 - 2004-05-22 11:50:45

補足

できましたが、
ツールバーとステータスバーの高さの分だけ足りません。
困っています。
GetParentFrame()->SetWindowPos(&wndTop,0,0,bmp.bmWidth,bmp.bmHeight,SWP_NOMOVE);
これは、SDIのメインフレームにも使えるのでしょうか?
それとも何かほかの関数があるのでしょうか?
お願いします。

投稿日時 - 2004-05-22 16:48:57

あなたにオススメの質問