ウィンドウにボタンを配置する方法とは?

このQ&Aのポイント
  • VC++6.0、WinXPの環境でウィンドウにボタンを配置する方法について教えてください。
  • CMainFrameクラスのコンストラクタ内でCButtonを作成し、ウィンドウに配置していますが、実行中にエラーが発生しています。何が原因でしょうか?
  • VC++6.0とWinXPの環境でボタンを配置する方法について詳しく教えてください。
回答を見る
  • ベストアンサー

ウィンドウにボタンを配置するには?

VC++6.0、WinXPです CMainFrame::CMainFrame() { CButton myButton1; myButton1.Create( _T("Button"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,100),this, 100); myButton1.ShowWindow(SW_SHOW); myButton1.UpdateData(); } としてますがビルドはできますが実行中にエラーがでます。何がおかしいのでしょうか? よろしくお願いします。

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

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

>としてますがビルドはできますが実行中にエラーがでます。 どこで?デバッグしてみましたか? >myButton1.UpdateData(); これってなんだか知ってますか?

_comcom
質問者

お礼

どうもありがとうございます。 ゴチャゴチャいじってると解決しました。オブジェクトを関数内でstaticも付けずに宣言していることが原因でした。 お騒がせしました。

関連するQ&A

  • MFCでのボタン配置

    ダイアログではなく、直接Windowにボタンを貼り付けるために、AppWizaerdを使用して、MyAppというプロジェクトをつくり、MyAppクラスのヘッダに CButton mybutton を定義し、cppファイルのInitInstance関数内の m_pMainWnd->UpdateWindow();の下に、以下のように記述したところ、 mybutton.Create(_T("OK"), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, CRect(10,10,100,100), m_pMainWnd, 1); ボタンは表示されるのですが、押しても凹んでくれません。どうしてなのでしょうか?? 環境はWinXP VisualStudio.Net2003です。

  • タブコントロールが表示できない

    どうしてタブコントロールがこれでは表示されないのでしょうか m_TabはCTabCtrlです。 <CMainFrame::OnCreate内> ------------------------------------------------------ CRect rcClient; GetClientRect(rcClient); if(!m_Tab.Create(TCS_TABS | TCS_FIXEDWIDTH | WS_CHILD | WS_VISIBLE,rcClient,this,0x1006)) { return -1; } m_Tab.InsertItem( 0, _T("test"));

  • ボタンの文字の大きさを変更したい

    CreateWindow によるボタンを作成してみたのですが、 ボタンラベルとして貼る以下の "明朝" という文字の大きさを 変えるにはどうすればいいのでしょうか。 hButtonWnd1 = CreateWindow("BUTTON", "明朝",               S_CHILD | WS_VISIBLE | BS_PUSHBUTTON,               20, 20, 100, 30,               hWnd,               (HMENU)ID_MI,               hInst,               NULL);

  • Windowハンドルを再利用できない

    hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); hPushBox=CreateWindow("BUTTON","a",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,0,0,0,hW,HMENU(0), ((LPCREATESTRUCT)lP)->hInstance,NULL);DestroyWindow(hPushBox); Window処理関数で上記のようにするとコンパイルは通るのに実行がエラーになります 1度使ったハンドルをウィンドを破棄した後使えるようにするにはどうしたらいいのでしょうか?

  • CColorDialogの拡張について

    始めまして。質問させて下さい。 VC++ 2005 MFCで開発しております。 CColorDialogのサブクラスを作成しています。 ダイアログ上にあるコントロールのVisibleを変更させようと思い、 サブクラスのOnInitDialogで CButton *pBtnOK = ( CButton* )GetDlgItem( IDOK ); CButton *pBtnCancel = ( CButton* )GetDlgItem( IDCANCEL ); if( pBtnOK != NULL ){ pBtnOK->ShowWindow( SW_HIDE ); } if( pBtnCancel != NULL ){ pBtnCancel->ShowWindow( SW_HIDE ); } としています。 「色の作成」ボタンのも同様の処理をしたいのですが、 コントロールIDがわからないため実装できません。 IDをご存じの方はいますでしょうか? また、別の方法等ございましたらご教授お願い致します。

  • ボタンの配置を変更したい

    VC++でプログラミングしています。 MFC AppWizard(exe) でダイアログベースで造っています。 やりたいことは以下です。 ・設定ファイルに表示位置(座標)が書いてあり、ダイアログの初期化時に 設定ファイルを読んで、指定された位置にボタンを表示する。 私の案としては以下のものがあります。 <案1> 予めボタンを貼り付けて造り、EXE起動時に移動させる。 ただし、移動させる関数があるかは不明。 調べましたが、今のところ見つかっていません。 <案2> CButtonクラスのメンバを使用して、ボタンを表示する。 試しに以下のようなコードでやってみましたが、上手くいきませんでした。 使い方がわからず、試行錯誤しながらやってます。 CButton testButton; void CTestGamenDlg::OnButton1() { RECT Rect; Rect.left = 100; Rect.top = 100; Rect.right = 200; Rect.bottom = 200; testButton.Create("test", BS_PUSHBUTTON, Rect, this, 100); } 案1、2についての指摘、アドバイス、その他の案などありましたら 宜しくお願いします。 また、簡単なサンプルコードがあると助かります。

  • OnDestroy() について

    環境 WIN98 VC++6.0 MFC SDIにて アプリ起動と同時にダイアログを表示しています。 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 略 dlg = new CInput(this); dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW); return 0; } <質問1> このような場合に、CInputクラスに以下のようにOnDestroy()を追加しましたが、 ダイアログを閉じた時もアプリ終了時にもメッセージが飛んできません。 どうしてなのですか? void CInput::OnDestroy() { CDialog::OnDestroy(); AfxMessageBox("789"); } <質問2> 更に、以下のように新規にダイアログバーを追加したところ、メッセージが飛ぶようになりました。 どうしてなのでしょうか? int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 略 if (!m_wndMyDialogBar.Create(this, CG_IDD_MYDIALOGBAR, WS_VISIBLE , CG_ID_VIEW_MYDIALOGBAR)) { TRACE0("Failed to create dialog bar m_wndMyDialogBar\n"); return -1; // 作成に失敗 } dlg = new CInput(this); dlg->Create(IDD_DIALOG1); dlg->ShowWindow(SW_SHOW); return 0; }

  • CreateWindow で作ったウィンドウが白いんですが

    VC++ 6.0 で CreateWindow で作ったウィンドウが 白いんですが、これを、メッセージボックスと同じ色(鉛色?)にするにはどうしたらいんでしょうか。 あるいは、その逆、チェックボックス等に付属するテキスト文字の背景を白くできればそれでもかまいません。 (デフォルトで灰色なので)                  ↓ CreateWindow("BUTTON", "このテキスト背景が灰色",        WS_CHILD | WS_VISIBLE |        BS_AUTOCHECKBOX,        Window_Width,        Window_Height,        NULL,        NULL,        hWnd,        NULL);

  • CFrameWnd とCFormView2

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=880746の続きです。 試行錯誤でCFrameWnd とCFormViewを使ったコーディングをしてみました CFrameWnd::LoadFrameを使った方はうまくいったのですがCFrameWnd::Createの方はうまくいきませんでした。 //LoadFrame CCreateContext con; memset(&con,0,sizeof(CCreateContext)); con.m_pNewViewClass = RUNTIME_CLASS(CXXXView); m_pMainFrame = new CMainFrame; m_pMainFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,NULL, &con ); m_pMainFrame->ShowWindow(SW_SHOW); //Create・・・うまくいかない(何故?) m_pContext = new CCreateContext; memset(m_pContext,0,sizeof(CCreateContext)); m_pContext->m_pNewViewClass = RUNTIME_CLASS(CXXXView); m_pMainFrame->Create("MyClass","MyWindow",WS_OVERLAPPEDWINDOW,CRect(0,0,10,10),NULL,NULL,0,m_pContext); m_pMainFrame->ShowWindow(SW_SHOW); ところでLoadFrameでうまくいったのは良いのですが 一つ疑問が、、、CFrameWndをタスクバーでは非表示で 表示することって無理でしょうか? ShowWindow(SW_SHOW);の時点でタスクバーにでてしまいます。 タスクバーに表示させないにはダイアログベースにする必要があるのでしょうか? 宜しくお願いいたします。

  • Formにエディットボックスを貼りたい

    環境はWIN98 VC++6.0 MFC SDIです。 クラスウィザードのデフォルトでSDIを作ります。 但し、6/6ページの基本クラスはCFormViewにします。 このForm上にプログラム上からエディットボックスを貼りつけるために、以下のようにしましたが、エディットボックスらしき白い四角は出来ましたが文字の入力が出来ません。 どうすればよいのでしょうか? static contID = 4000; ///////////////////////////////////////////////// int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { 略   CRect rect;   // CTestWndの上にCEditを貼り付ける   rect.top = 30;   rect.left = 30;   rect.bottom = 100;   rect.right = 100;   CEdit* edit = new CEdit();      if( edit->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP,   rect,   this,   contID++ ) != TRUE ){     throw new CException();   }   return 0; }

専門家に質問してみよう