AutoLoad()関数の使い方がわかりません。

このQ&Aのポイント
  • AutoLoad()関数を使用する方法についての質問です。
  • VC++6.0 WindowsXPでのダイアログベースのアプリケーション作成時に、ビットマップでボタンを表示しようとしています。
  • 現在のやり方としては、ダイアログのスタイルを「オーナー描画」「ビットマップ」に設定し、ビットマップ画像をリソースに挿入し、CBitmapButtonオブジェクトを作成し、OnInitDialog()関数でAutoLoad()関数を使用していますが、実行時にエラーが発生しています。
回答を見る
  • ベストアンサー

AutoLoad()関数の使い方がわかりません。

VC++6.0 WindowsXPです。 ダイアログベースで作っていますが、ダイアログのボタンをビットマップで表示しようとしてます。 現在のやり方としては 1.ダイアログのスタイルは「オーナー描画」「ビットマップ」にチェックする。 2.リソースに貼り付けたいビットマップ画像を4枚挿入し、ビットマップのIDは対象のボタンのキャプションを「IMAGE」だとすると末尾に「U」「D」「F]「X」をつけたID、つまり「IMAGEU」「IMAGED」、、とする。 3.ダイアログのクラス(xxxDlg)の中で CBitmapButton bitmap1; のようにCBitmapButton型のオブジェクトを作る。 3.xxx::OnInitDialog()の中で bitmap1.AutoLoad(IDIMAGE,this); を追加する。 以上です。コンパイル自体はエラー、警告なしでできました。しかし実行するとエラーがおきます。 エラーの内容は 「例外 unknown software exception (0x8000003)がアプリケーションの0x77f767cdで発生しました。」 となります。 どこが間違いなのかわかりません。 よろしくお願いします。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_cbitmapbutton.asp >ビットマップの ID は二重引用符で囲む必要があります。 >二重引用符で囲まないと、リソース エディタは >リソースに整数を代入します。 >また、イメージを読み込むと MFC でエラーが発生します。 二重引用符で囲みました?

_comcom
質問者

お礼

大変ありがとうございます!! 仰るように二重引用符で囲むと解決できました。 以外な所を見落としてました。

関連するQ&A

  • VC++ダイアログボックスの表示更新がわかりません

    現在ダイアログボックスにスタティックコントロールを配置し、表示更新する際不明な点があります。VC6.0 MFCです。 1、ダイアログボックス上のコントロールに、作成したビットマップを表示させる際、OnInitDialog関数内で、Bitbiltしていますが、表示されません。 ボタンクリックイベント等で、同様の手順でBitbiltすると表示されます。 これはなぜなのでしょうか? また、ダイアログボックスが表示された際にBitmapを表示するにはどうすればよいでしょうか? 2、また、表示されたBitmapはダイアログボックスを動かしたり、隠れたりすると消えてしまいます。 再表示を自動的にさせるにはどうすればよいでしょうか?(OnDraw関数のようなものがあるのでしょうか?) 初歩的な質問で申し訳ありませんが、よろしくお願いいたします。

  • ビットマップボタンを押したときの処理についてなんですが

    環境はVC++6.0 MFC ダイアログベースです。 MFC初心者なんですが、 HBITMAP hBitmap; hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), (LPCTSTR)csBMPFile,      IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); を使いビットマップハンドルをし取得しました。 ビットマップの貼り付けは出来たのですが、ボタンを押したときにビットマップの画像を変える処理の仕方がわかりません>< loadbitmapsなら容易に出来るのですが、どうしてもloadimageを使って表示したいのですが、どのようにすれば良いでしょうか? 御教授よろしくお願いします><

  • ダイアログの表示と同時に、ピクチャーボックスを塗る方法

    あるサイトの過去ログで以下を見つけました。 エラーは出ませんが、何も起こりません。 このコードは何をしようとしているのでしょうか? ************************* ダイアログ上にピクチャーボックスを配置して、ダイアログの表示と同時に、ピクチャーボックスを塗る方法。 まず、ピクチャコントロールをClassWizardのメンバ変数タブによりm_pictureとして実態を作成します。 その後、 class CPictureDlg { private: CBitmap m_bitmap; // ... }; BOOL CPictureDlg::OnInitDialog() { CDialog::OnInitDialog(); // ... CDC desktopDC; desktopDC.Attach ( ::GetDC ( NULL ) ); CDC memDC; memDC.CreateCompatibleDC ( &desktopDC ); m_bitmap.CreateCompatibleBitmap ( &desktopDC, 100, 100 ); CBitmap *pOldBitmap = memDC.SelectObject ( &m_bitmap ); CRect rcPicture ( 0, 0, 100, 100 ); CBrush brush; brush.CreateStockObject ( WHITE_BRUSH ); memDC.FillRect ( &rcPicture, &brush ); memDC.SelectObject ( pOldBitmap ); m_picture.SetBitmap ( ( HBITMAP ) m_bitmap.GetSafeHandle () ); ReleaseDC ( &desktopDC ); memDC.DeleteDC (); }

  • ビットマップハンドルからビットマップボタンを作りたいです

    MFC初心者です。どうかよろしくお願いいたします。 環境はVC++6.0 MFC ダイアログベースです。 HBITMAP hBitmap; hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), (LPCTSTR)sSaveFile,IMAGE_BITMAP, 0,0,LR_LOADFROMFILE); を使ってビットマップハンドルを取得しました。 ここからボタンに貼り付ける方法がわかりません。 リソースにボタンを作った後、どのようにすれば良いでしょうか? あと、ボタンの好きな位置にビットマップを貼り付ける方法も教えていただけると幸いです。

  • ゲームエラーについて

     HP compaq d330 utという機種で、carmageddon TDR2000を起動したところ、エラーが発生し、ゲームの起動ができません。別のXPパソコンでは問題なく起動します。  ビデオカードはquadro FX500/FX600  メモリは1024M OS XP pro  今まで色々な方法を試し、ゲームメニューが表示されるところまでいったことはありますが、その先はエラーでフリーズ状態になります。  下記に基本的に発生するエラーを記載します。 exception at 0x00570cf1 Int divide by zero stack trace PC = 0x00570cf1 <unknown module> - <unknown source file> params:0x0012feb0 0x0057091d 0x2507b1ca 0x01f9af9d PC = 0x00570b64 <unknown module> - <unknown source file> params:0x2507b1ca 0x01f9af9d 0x62b54990 0x433ae26c PC = 0x0057091d <unknown module> - <unknown source file> params:0x0012fec8 0x0058ceab 0x004aba8a 0x005dc174 PC = 0x00570ad4 <unknown module> - <unknown source file> params:0x00000000 0x004acdeb 0x00000000 0x00000000 PC = 0x004aba92 <unknown module> - <unknown source file> params:0x00400000 0x00000000 0x001423c7 0x00000001 PC = 0x0058cbfb <unknown module> - <unknown source file> params:0x00000000 0x00000000 0x77e4149f 0x3718c136 PC = 0x77e414c7 <unknown module> - <unknown source file> params:0x0058cb1b 0x00000000 0x78746341 0x00000020 どなたかわかる方がいましたら、解決方法をお願いします。

  • 地図の上にL字スケールを描画

    MDIフレーム上に、複数のチャイルドスタイルのダイアログが存在するプログラムを改造しました。(元は別の人間が作成) その中にMapDKIVの地図を描画しているダイアログがあり、その地図上に別のダイアログをおき、そこに縮尺L字スケールのビットマップを描画しました。(MapDKIVには、その機能がまだ無い為) 色々と試行錯誤した結果、この方法を取ったのですが、納品した矢先、お客様から、地図をマウスでドラッグして動かそうとすると、スムーズに動いたり、カクカクとしか動かなかったり、時には全く動かない事があるとのクレームがありました。(その操作以外は正常に動作している模様) 以前はこの症状はなかったとの事から、今回のL字スケール描画に原因があるのではと調べていますが、原因が見付かりません。 以下に、ソースの一部分を記載しますので、どなたか助言をお願いします。 ******** ビットマップデータ管理クラス ******** ビットマップは、スケール毎に準備 <BitmapData.h> private: CBitmap m_bmpLScale0; CBitmap m_bmpLScale2; <BitmapData.cpp> //-------- 機能 ビットマップ情報の読込 -------- void CBitmapData::Load(void) { m_bmpLScale0.LoadBitmap(IDB_BITMAP_SCALE0); // 全国図 m_bmpLScale2.LoadBitmap(IDB_BITMAP_SCALE2); // 1/160万 //-------- 機能 ビットマップ情報の取得 -------- CBitmap& CBitmapData::GetScaleBitmap(void) { UINT unIndex = GetScaleNumber();// 現在選択されているスケールレベル switch(unIndex) { case 0:  return m_bmpLScale0; break; // 全国図 case 2:  return m_bmpLScale2; break; // 1/160万 ******** 地図描画ダイアログ ******** L字スケール描画用ダイアログの生成 <MainMap.cpp> // 地図描画フレームサイズを取得 m_ctrlMapFrame.GetWindowRect(LPRECT(rect)); // スケールレベルをセット g_BitmapData.SetScaleNumber(m_ctrlMapZoom.GetPos()); // スケール描画用ダイアログの生成(地図フレームの左下位置を渡す) m_pMapScaleDlg = new CMapScaleDlg(); m_pMapScaleDlg->Create(m_hWnd, IDD_MAP_SCALE_DIALOG, ・・・ ******** L字スケール描画ダイアログ ******** //-------- 機能 OnInitDialog() -------- // ウインドウ拡張スタイルをレイヤード設定 lStyle = GetWindowLong( this->m_hWnd, GWL_EXSTYLE ); lStyle |= 0x00080000; SetWindowLong( this->m_hWnd, GWL_EXSTYLE, lStyle ); // レイヤードウィンドウの不透明度と透明のカラーキーを設定(青色部分を透明化する) SetLayeredWindowAttributes( this->m_hWnd, RGB(0,0,255), 100, 0x00001/*LWA_COLORKEY*/ ); //-------- 機能 OnPaint() -------- BITMAP bitmap; CBitmap& mBitmap = g_BitmapData.GetScaleBitmap(); mBitmap.GetBitmap(&bitmap); CSize sz(bitmap.bmWidth, bitmap.bmHeight); CDC dc; dc.CreateCompatibleDC(&PaintDC); CBitmap *pOld = dc.SelectObject(&mBitmap); // もともとのディバイスコンテキストにビットマップを透過で転送(青色部分を透明化する) if( ::TransparentBlt(PaintDC, 0, 0, sz.cx, sz.cy, dc, 0, 0, sz.cx, sz.cy, (UINT)RGB(0,0,255)) == FALSE ){ } // ビットマップ選択解除 dc.SelectObject( pOld); } //-------- 機能 スケール(ビットマップ)変更メッセージを受信 -------- // 現在選択されているスケール用のビットマップを取得(ポインタ) CBitmap& mBitmap = g_BitmapData.GetScaleBitmap(); mBitmap.GetBitmap(&bitmap); CSize sz(bitmap.bmWidth, bitmap.bmHeight); // メインマップダイアログの地図フレームの左下になるよう変更 this->MoveWindow(m_nMapFrameLeft, (m_nMapFrameBottom - sz.cy), sz.cx, sz.cy); // ウインドウの再描画 this->Invalidate(); 1.L字スケール描画用のダイアログを、背景青色で準備 2.L字スケール描画用のダイアログの青色部分を透明化に設定 3.L字スケール描画用のダイアログのウインドウサイズを、選択されているスケール用のビットマップと同じサイズに、且つ、地図フレームの左下に位置を設定 4.地図ダイアログからスケール変更メッセージを受信  (1) その時に選択されているスケール用のビットマップと同じサイズに、且つ、地図フレームの左下に位置を設定  (2) ウインドウの再描画 this->Invalidate() 5.OnPaint()  (1) 現在選択されているスケールのビットマップ情報を取得  (2) ビットマップを透過で転送(青色部分を透明化)    ビットマップのL字以外の部分は青色 以上、文字数制限の為、かなり省略していますが、大変困っています。 とにかく助言を頂きたく、よろしくお願いします。

  • CButtonのBMP・アイコンの表示を切替えたい

    今 WinXP VC++6.0 MFC のダイアログベースのソフトで ダイアログリソース上のボタンのプロパティで ビットマップが設定されている状態で ボタンにビットマップ表示→アイコン表示を切替えようと思って HICON CMyButton::SetIconID(UINT iconID) { //スタイル変更 UINT style=GetButtonStyle(); style&=~BS_BITMAP; style|=BS_ICON; SetButtonStyle(style); //ボタンに画像を貼付る HICON hIcon=AfxGetApp()->LoadIcon(iconID); hIcon=SetIcon(hIcon); } としたのですがアイコン表示されませんでした。 アイコンかビットマップかどっちかに すればいいのはわかってるのですが、 SetButtonStyleはCreate後にボタンスタイルを 替えられないんでしょうか?

  • インターネットに接続するとエラーが表示されます

    あるホームページに接続すると操作ができなくなり固まってしまいます。そしてページを閉じるとデスクトップに「iexplore.exe -アプリケーションエラー」 例外 unknown software exception (0xc 00000fd)がアプリケーションの(0x037f37e5)で発生しました。このプログラムを終了するには「OK」をクリックしてください。と表示されます。このようなエラーの解決法はあるのでしょうか

  • 丸いボタンの表示でCPU100%

    VC6.0でMFCアプリケーションを作成しています。 ・ダイアログベース ・背景はビットマップ(スタイルにWS_CLIPCHILDRENを追加) ・ボタンはビットマップ&非矩形(丸) これを作成し、実行するとCPU使用率が100%になってしまいます。 OnPaint()での描画をしなければ、ボタンが丸く表示されません。 ご存知の方は教えてください。 以下、ソース抜粋です。 メンバ CButton m_cbImage; CBitmap m_cBmpBack; CBitmap m_cBmpButton; HBITMAP m_hBmpBack; BITMAP m_bmp; HDC m_hDc; OnInitDialog(){ //背景ビットマップ m_cBmpBack.LoadBitmap(IDB_BITMAP_BACK); //ボタンビットマップ m_cBmpButton.LoadBitmap(IDB_BITMAP_BUTTON); HBITMAP hBmpButton = HBITMAP(m_cBmpButton); m_cbImage.SetBitmap(hBmpButton); // ウィンドウに関する情報を取得 // BMPサイズ取得 m_hBmpBack = HBITMAP(m_cBmpBack); GetObject(m_hBmpBack, sizeof(BITMAP), &m_bmp); // BMPデバイスコンテキスト作成 m_hDc = CreateCompatibleDC(NULL); // オブジェクトを選択する SelectObject(m_hDc, m_hBmpBack); // ボタン変形 CRect cRectButton; m_cbImage.GetClientRect(cRectButton); CRgn rgnButton; rgnButton.CreateEllipticRgn(cRectButton.Width() * 1 / 8, cRectButton.Height() * 1 / 8, cRectButton.Width() * 7 / 8, cRectButton.Height() * 7 / 8); m_cbImage.SetWindowRgn((HRGN)rgnButton, TRUE); } OnPaint(){ HDC hdc = ::GetDC(m_hWnd); BitBlt(hdc, 0, 0, (int)m_bmp.bmWidth, (int)m_bmp.bmHeight, m_hDc, 0, 0, SRCCOPY); ::ReleaseDC(m_hWnd, hdc); } 以上、よろしくお願いします。

  • 最近のよく見るエラーメッセージ

    ”0x055601cb"の命令が”0x055601cb"のメモリを参照にしました。メモリが”read”になることはできませんでした。プログラムを終了するには[ok]をクリックしてください。 例外unknown software exception(0xc015000f)がアプリケーションの0x77f6f9a9で発生しました。プログラムを終了するには[ok]をクリックしてください。 以上の2つのエラーメッセージを最近よく見かけます。このメッセージが出た後は一度電源を落とさないとインターネットに接続できません。 私のパソコンに一体何が起きているのですか?

専門家に質問してみよう