VCでグループボックスを不可視にする方法

このQ&Aのポイント
  • VC++6.0で開発を行っている初心者です。プログラム上でグループボックスの可視/不可視を制御したいですが、コードはどうなるのでしょうか?
  • ラジオボタンの場合はGetDlgItem(IDC_RADIO1)->ShowWindow(SW_SHOW);というコードで制御できることが分かりましたが、グループボックスの場合の方法が見つかりません。
  • GetDlgItem(IDC_FRMTYPE1)->ShowWindow(SW_SHOW);のような方法でグループボックスを不可視にすることはできるのでしょうか?
回答を見る
  • ベストアンサー

VCでグループボックスを不可視にするには?

VC++6.0で開発を行っております。 初心者です。 非常に単純な質問なんですが、 明確な回答がなかなか見つからないため 質問させていただきます。 プログラム上でグループボックスの可視/不可視を 制御したいのですが、コードはどうなるのでしょうか? (リソースファイルのデフォルトは可視) ラジオボタンの場合は調べたところ以下の様にすれば いいことが分かりましたがグループボックスの場合が 見つかりません。よろしくお願い致します。 GetDlgItem(IDC_RADIO1)->ShowWindow(SW_SHOW); 下記の様にすればできるといいのですが・・・ GetDlgItem(IDC_FRMTYPE1)->ShowWindow(SW_SHOW);

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

  • ベストアンサー
  • Apr2nd
  • ベストアンサー率69% (36/52)
回答No.1

ラジオボタンでもグループボックスでも同じだと思うのですが… ●不可視にしたい場合  GetDlgItem(IDC_FRMTYPE1)->ShowWindow(SW_HIDE); ●可視にしたい場合  GetDlgItem(IDC_FRMTYPE1)->ShowWindow(SW_SHOW); ただグループボックスはリソースエディタで作成した際にデフォルトのIDが「IDC_STATIC」に なっておりますので、上記の例で言えば「IDC_FRMTYPE1」に変更する必要があります。

kudamono10
質問者

お礼

回答ありがとうございます。 安心しましたw GetDlgItem(IDC_STATIC)->ShowWindow(SW_HIDE) ではうまくいかないという情報があったため、 疑ってかかってしまいました 考えて見ればコントロールはすべてウインドウとして扱われるの だからコントロールに依存するなんてことはないですねw

関連するQ&A

  • ラジオボタンのグループ化

    VC6.0の ラジオボタンのグループ化についてですが 例えばIDC_RADIO1~IDC_RADIO6まで作ったとして IDC_RADIO1と IDC_RADIO4のグループにチェックをいれると IDC_RADIO1~3と4~6が それぞれグループになったのですが 1、2、6と3、4、5をグループにしたいときは どうすればよいのでしょうか? あるサイトによるとグループボックスでラジオボタンで囲むと 囲んだ部分がグループになると記述されてたのですが それについてもうまくいかなかったのですが、教えて頂けないでしょうか?

  • ウィンドウハンドルの取得方法について

    よろしくお願いします。 WIN98 VC++6.0 MFC にて 色々勉強しておりますが、今だにウィンドウハンドルの取得方法が良く分かりません。 SDKのサンプルを見ると、なるほどそうするのか。と思いますが、MFCになると分からなくなります。 たとえば、 ウィザードのデフォルトに従いダイアログベースでのプロジェクトを作成し、ボタン1と2を配置します。 以下のコードでボタン1を非表示にできます。 void CPppDlg::OnButton2() { CWnd* pButton1 = GetDlgItem (IDC_BUTTON1); pButton1->ShowWindow(SW_HIDE); } このコードにおいて、 1.SDKの BOOL ShowWindow( HWND hWnd, // handle to window int nCmdShow // show state of window ); を用いて引数が2個の形式に書きかえることは可能でしょうか? 2.可能であれば、具体的にはどう記述すれば良いのでしょうか?

  • VC++2010 GDIオブジェクトの解放方法

    現在、VC++2010 MFCでアプリケーションを作成しています。 処理している内容は、ADボードから電圧値をもらい、それをエディットボックスに表示する処理ですが、タスクマネージャなどでみるとGDIオブジェクトが増加していき、9999になるとアプリケーションがフリーズしてしまいます。調べたところ、解放するプログラムが必要みたいですが、解放方法が分かりませんでしたので質問させていただきました。最初にエディットボックスのレイアウトを変更する処理をしています。 以下が今回のプログラムとなっております。 CFont* m_pFont;  CFont* m_pFont;m_pFont = new CFont; m_pFont->CreatePointFont(200,""); ((CEdit *)GetDlgItem(IDC_EDIT1))->SetFont(m_pFont); ((CEdit *)GetDlgItem(IDC_EDIT2))->SetFont(m_pFont); ((CEdit *)GetDlgItem(IDC_EDIT3))->SetFont(m_pFont); ((CEdit *)GetDlgItem(IDC_EDIT4))->SetFont(m_pFont); ((CEdit *)GetDlgItem(IDC_EDIT5))->SetFont(m_pFont); ((CEdit *)GetDlgItem(IDC_EDIT6))->SetFont(m_pFont); DeleteObject(m_pFont); SetTimer(1,1000,NULL); 以下が毎秒処理となっております。 void Power_Noise::OnTimer(UINT_PTR nIDEvent) { m_nRet = m_pADControl->AD_In_Out(m_AD1,m_AD2,m_AD3,m_AD4,m_AD5,m_AD6); if(m_nRet == FALSE){ MessageBox("失敗"); KillTimer(1); } UpdateData(TRUE); m_xvEditVolt[0] = m_AD1; m_xvEditVolt[1] = m_AD2; m_xvEditVolt[2] = m_AD3; m_xvEditVolt[3] = m_AD4; m_xvEditVolt[4] = m_AD5; m_xvEditVolt[5] = m_AD6; UpdateData(FALSE); }

  • VC++でダイアログ(Editボックス)を不可視にしたい

     この質問を見てくださって有難う御座います。 私がお聞きしたいのは、Editボックスの値が空の時、そのEditボックスを非表示にする方法です。  VBの場合ならば、 If テキストボックス = "" Then    テキストボックス.Visible = False End If と書くだけの簡単な事なのですが、VC++だと何を使ったら良いのか、なかなか分かりません。 多分探し方が悪いだけだと思いますが、何冊も本で調べてみたのですが、結局分かりませんでした。 MSDNで調べていたらなんとなく『Show』を使えば出来そうなのですが、この関数の使い方自体が分かりませんでした。  どうかご教授頂けないでしょうか? よろしくお願いします。

  • グループボックス内のコンボボックスについて

    お世話になります。 WindowsXP / VC2005 / VC++ MFC / ダイヤログベースにて開発を行っています。 グループボックス内にコンボボックスを2つ配置しています。 コンボボックスにカーソルを合わせて、マウスホイールをスクロールした際、 ボックスの中身がスクロールしないのですが、スクロールする方法をご存知でしたら教えていただけないでしょうか? グループボックス外にコンボボックスを配置した場合では、ボックスの中身がスクロールされており、 再度グループボックス内にてプロパティを変更したりと試してみたのですが、思うように行きません。 よろしくお願いいたします。

  • コンボボックスへの追加

    C++全くの初心者です。 VC++ 6.0でコンボボックスに文字列を追加したいだけなんですが、出来ないで困っています。 いろんな本やこの過去の回答などで、GetDlgItemのパラメタにコントロールIDを渡しているのを見ますが、その通りにするとコンパイルエラーになります。 コード入力サポート(キー入力中に表示されるパラメタの説明)を見ると、 void GetDlgItem(int nID, HWND *phWnd) と表示されます。 参考にしている入門書では CComboBox* pCB=(CComboBox*)GetDlgItem(IDC_xxx); とかかれていて、入門書の付属のCDのソースもそうなっており、コンパイルはちゃんと通ります。 VCのヘルプを見ると確かに CWnd* GetDlgItem( int nID ) const; void CWnd::GetDlgItem( int nID, HWND* phWnd ) const; の2通りがあります。 GetDlgItemと入力するとなぜvoid型のGetDlgItemが選択されるんでしょうか。 phWndには何を渡せばいいんでしょうか。 また、CWnd*を返すGetDlgItemを呼びたいんですが、どうすればいいんでしょうか。 よろしくお願いします。

  • VC++のちらつき防止方法

    いつもお世話になっております。 ただいまVC++をもちいてアプリを作っておりますが画面がちらつきを押さえたく、質問させていただきます。 現在、STATICな領域がありまして、その中に文字を書いているのですが、 時間経過とともに文字が変わるものがあります。 その際、背景黒に白文字で以下のようにしています。 ::ShowWindow(hoge,hogehoge,SW_HIDE); ::SetDlgItemText(hoge,hogehoge,text); ::ShowWindow(hoge,hogehoge,SW_SHOW); とやっておりますが、スタティック領域全体が一瞬白くなってから 更新されます。 結構頻繁に更新するので、ちらつきが結構目立ってしまいます。 invalidateなどもやってみたのですが同様にちらついてしまいました。 なんとか改善したいのですが何か方法はありますでしょうか? アドバイスよろしくお願いします。

  • コンボボックスにリストを表示させるには?

    VC++6.0でコンボボックスにリストを表示させようと思っているのですが プロパティのところのデータに追加しても表示されません ほかに設定するところはあるのでしょうか? もちろんコンボボックスは生きています。 他のhpをみて CComboBox* p = (CComboBox*)GetDlgItem(IDC_COMBO1); p->ResetContent(); p->AddString("項目2"); p->AddString("項目1"); p->AddString("項目4"); p->AddString("項目3"); も試してみたのですがうまくいきません。 よろしくお願いいたします。

  • チャイルドダイアログボックスでマウスクリックが効かない

    チャイルドウィンドウタイプのモードレスダイアログを表示すると  マウスでエディットボックス(など)をクリックしてもフォーカスが移動しない という現象がおきています。(tabキーではOK) 数年前に一度作ったときの記憶を頼りに作っているのですが、下記以外に設定などが必要になるのでしょうか? …というか、このやり方で問題ないのでしょうか?… ◎環境 WindowsXP Visual C++ 6.0 & MFC アプリケーションの種類…SDI ◎やったこと 1.ダイアログリソースを追加 リソースのプロパティ  「一般」タブ   ID…「IDD_DIALOGA」  「スタイル」タブ   スタイル…チャイルド   境界線…ダイアログ枠   その他…すべてoff  「その他のスタイル」タブ   可視のみon  「拡張スタイル」、「その他の拡張スタイル」タブ   すべてoff  このダイアログにいくつかのボタンやエディットボックスを配置 2.親windowのヘッダファイルに追加したもの private: dialogA *pDlg; 3.親windowのソースファイルに追加したもの BOOL CModlessDialogApp::InitInstance() にコードを追加 …… // フレームをリソースからロードして作成します pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); //↓↓ここから追加↓↓ pDlg = NULL; pDlg = new dialogA(); if(pDlg) { pDlg->Create(IDD_DIALOGA); pDlg->ShowWindow(SW_SHOWNA /*SW_SHOW|SW_RESTORE*/); } //↑↑ここまで追加↑↑ // メイン ウィンドウが初期化されたので、表示と更新を行います。 pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); …… スタイルを「オーバーラップ」「ポップアップ」にするとマウスクリックでフォーカスが移動します。

  • スクロールバーコントロールについて質問があります

    作成手順 1) IDC_SCROLLBAR1として、リソースエディタで適当な位置に配置 2) 右クリック 「変数の追加」で、コントロール変数の追加 CForm1View に、 CScrollBar m_sbHorz; として、追加される 3) CForm1View::InitialUpdate() で、 // スクロールバーの設定 this->m_sbHorz.SetParent(this); HWND hWndSb; GetDlgItem(IDC_SCROLLBAR1, &hWndSb); ::ShowWindow( hWndSb, SW_SHOW ); CRect rectSb; ::GetClientRect( hWndSb, &rectSb ); 4) CForm1View::OnDraw() で、 HWND hWndSb; GetDlgItem(IDC_SCROLLBAR1, &hWndSb); ::SetScrollRange( hWndSb, SB_CTL, this->m_ScMinVal, this->m_ScMaxVal, FALSE ); ::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE ); ::ShowWindow( hWndSb, SW_SHOW ); ※ m_ScMinVal: 最小値、m_ScMaxVal = 最大値、m_ScPos=現在値 の変数 5) CFomr1View::OnSize()で、 // FormViewのScrollBarを表示させない SetScrollSizes( MM_TEXT, CSize(cx,cy) ); CWnd::OnSize(nType, cx, cy ); // スクロールバーの位置調整 HWND hWndSb; GetDlgItem(IDC_SCROLLBAR1, &hWndSb); ::GetClientRect( hWndSb, &rect ); ::MoveWindow( hWndSb, 0, cy, cx, rect.Height(), FALSE ); ::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE ); 6) CFomr1View::OnHScroll() で、 HWND hWndSb; GetDlgItem(IDC_SCROLLBAR1, &hWndSb); ::SetScrollPos( hWndSb, SB_CTL, this->m_ScPos, TRUE ); とやると、スクロールバーが表示されません。 何かアドバイスいただけませんか? また、今、スクロールバーの表示位置調整や、ScrollPosのセットなんかを Win32API関数使ってますが、MFCで(というか、CScrollBar m_sbHorz; を使って) できないものなのでしょうか? よろしくお願いします。

専門家に質問してみよう