• 締切済み

SDIでTabCtrlを使用

VC++でSDIにTabCtrlを用いたアプリケーションを作成しようとしているのですが、どうも上手くいきません。 SDIWindowにタブを表示する方法はわかったのですが、タブの上にどのように表示させるものを登録すればよいのか、わかりません。CStaticを継承したクラスを作成し、OnPaint()に描画処理を入れればよいのでしょうか? ※今回はOpenGLを表示し、タブ切り替えで画面を変えたいと考えています。 もし、方法をご存知の方おられましたら教えていただけないでしょうか?

みんなの回答

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

まず、ヘルプ。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_using_ctabctrl.asp >※今回はOpenGLを表示し、タブ切り替えで画面を変えたいと考えています。 そもそもタブを使うメリットが感じられないのですが。 SDIなんですよね。メニューで切り替えればいいのでは?

参考URL:
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_core_using_ctabctrl.asp
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MDIでプロジェクトを作成しSDIとして使用する方法

    次の開発環境でWindowsアプリを作成するにあたり、 アプリケーションの種類をSDIとすべきかMDIと すべきか迷っています。  WindowsXP Professional  Visual Studio.NET 2002  VC++ MFC そこで、質問なのですがアプリケーションの種類を MDIとしてプロジェクトを作成した後にSDIと同じ動き となるようにコードを書く(変更する)ことがで きますか。 例えば、プロジェクトを起動させると、常に1つの ドキュメントがメインウィンドウ全体に表示される。 ご存じの方すいませんがよろしくお願いします。

  • SDIウィンドウを動的に複数生成する方法

    ダイアログベースのアプリケーションに配置したボタンを押すたびに、 SDIのウィンドウを動的に生成・表示したいと思っています。 しかし、なにをどうすればいいのかわかりません。 とっかかりでもよいので、なにかヒントが欲しいと思って質問します。 生成するSDIウィンドウには以下のような必要条件があります。 1.CMfcToolBarがある 2.CMfcRibbonStatusBarとスライダーバーがある。 3.独自に作成したCScrollViewクラスの派生クラスを使用する 4.1アプリケーション内で複数のSDIを生成する 開発環境 VC2010, WindowsXP よろしくお願いします。 <背景> 以前、CSingleDocTemplateを使用してウィンドウを作成しが、なぜかツールバーのボタンにUPDATE_COMMAND_UIがこない事が判明。 四苦八苦したが解決できないため、別アプローチを検討したいと思った。

  • CScrollViewの使用方法について

    VC++でCStatic型のピクチャーコントロール(例:m_StaticFlame)に線画の描画を行っています。(描画領域=表示領域) ピクチャーコントロールの表示領域には限度があるため、ワープロやCADと同じように描画領域を大きく取って一部分だけを表示し、スクロールバーで表示領域を移動させたいと考えております。 良い方法をご存じの方いらっしゃいましたら教えて頂けないでしょうか。 今の所、Class WizardでCScrollViewのクラス(CScrollViewTest)を作成し、m_StaticFlameに関連づけてスクロールバー付きの表示にしようと考えていますが、描画領域の定義からCScrollViewTestやm_StaticFlameとの関連付け、表示方法、さらにこの方法が正しいかどうかも分かりません。

  • SDIアプリ内からもう一つSDIを作成する方法

    開発環境:WindowsXPSp3 + VC++2010 SDIの単純なアプリケーションと、スタティックリンクしているDLL(拡張DLL)があります。 exeのツールバーにあるボタンをクリックすると、DLL内にあるCreateNewWindowという関数を呼ぶようになっています。 このCreateNewWindowでは以下のようなコードが書かれています。 ------------------------------------------------------------------ CSingleDocTemplate* g_pNewWnd ; // グローバル void WINAPI CreateNewWindow() {   if( NULL == g_pNewWnd ) {     g_pNewWnd = new CSingleDocTemplate(       IDR_NEWWINDOW,       RUNTIME_CLASS( CSDIWndDoc ),       RUNTIME_CLASS( CSDIWndFrame ),       RUNTIME_CLASS( CSDIWndView )     );     CDocument* pDocumanet = g_pNewWnd->OpenDocumentFile( NULL ) ;   } } ※初期化や破棄処理は適宜行っているものとします。 ------------------------------------------------------------------ このように、Exeのほうに1つのSDIが存在している状態で、さらにDLL内で別のSDIのウィンドウを作成することは許されるのでしょうか? 実行すると、一応、ウィンドウは作成されるのですが、これらのフレーム内でCMFCToolBarを作成すると、DLLのこの関数でSDIを作成した時点でexe側のツールバーがおかしくなります。 具体的にはDLLのリソースにあるツールバーがexeのツールバーとして不完全な状態で反映され、DLLで作ったSDIウィンドウでは、ツールバーの領域だけ確保されてなにも無い状態です。 この関数を実行するまではexeのツールバーは正常に表示・動作しています。もちろん、リソースIDがユニークになているのは確認済みです。 やりたいことは、SDIやダイアログなどからボタンを押したら動的にSDIのウィンドウを生成して提供するDLLを作成したいのです。 参考になるサイトや書籍、アドバイスを頂けませんでしょうか。 よろしくお願いします。

  • vc++,sdi上でGraphicsクラスを有効に

    microsoft vc++ 2022上でsdi開発しているのですがGraphicsクラスを有効にする方法がわかりません。どなたか教えていただけないでしょう(OnDrawでコード書き込み)

  • タブコントロール上のピクチャーコントロールへの描画

    お世話になっております。 VC2005を使用しております。 SDIベースです。 ダイアログを作成し、その上にタブコントロール(2ページ)を作成しました。 タブコントロールの1ページ目にピクチャーコントロールを配置し、ピクチャーコントロール上に描画を行おうと思うのですが、正常に動作しません。 OnPaintの中で描画を行っているのですがだめのようです。 タブコントロール外に、ピクチャーコントロールを配置すると描画する事ができます。 どのような、タイミングで描画を行えばよいのでしょうか? 教えてください。 よろしくお願いします。

  • DrawTextでの描画

    お世話になります。 現在開発中のアプリケーションにて行き詰ってしまった箇所が あったためご質問させていただきました。 Visual Studio2005にてダイアログベースのアプリケーションを作成しており、オリジナルのCStatic派生のクラスCSampleStaticクラスを作成します。 このCSampleStaticクラスはメインダイアログでのサブクラスにした際に PreSubclassWindow() ないでタイマーイベントを発生させます。タイマーイベントの内容は1秒ごとにタイマーを呼び、ランダムの値をそのCStaticの値に代入し、ダイアログ上に表示させる動作をします。 その際の処理のプログラムは以下のように作成しています CString str;//メンバー変数 //メインダイアログにてサブクラス化した際に呼ばれる CSampleStatic::PreSubclassWindow() { SetTimer(1,1000,NULL);//1秒毎に } CSampleStatic::OnTimer(UINT_PTR nIDEvent) { str.Format(_T("%d"),rand()%200); //1~199の乱数をstrに代入  Invalidate();           //OnPaint()を呼ぶ  CStatic::OnTimer(nIDEvent); } CSampleStatic::OnPaint() { CPaintDC dc(this); CFont MyFont; MyFont.CreateFont(-----); //フォント設定 CDC* myDC = GetDC(); CRect Myrect; GetClientRect(&Myrect); myDC->SelectObject(&Myrect); myDC->DrawText(str,-1,&Myrect,DT_CENTER); //strを表示 ReleaseDC(myDC); MyFont.DeleteObject(); } というプログラムを作成しているのですが、この方法でのダイアログへの文字の表示では、たとえば90が表示され、次に100が表示されるのであればいいのですが、100のあとに90が表示された時に100の上にそのまま90が表示されてしまい、うまく表示できません。 再描画のときに、上書きではなく、前回の数値を消去してから新たな数値を表示できればいいとは思うのですが、やり方がわからず、ご意見をいただければと思い質問させていただきました。 どうか宜しくお願いいたします。 開発環境は Windows CE 6.0 Visual Studio 2005 です。

  • 3つのスタティックに共通の動作をさせる手法

    お世話になります、fujitomoです。 現在、Visual Studio 2005にてVisual C++のMFCを使ったダイアログベースの プログラムを作成しております。 そこで行き詰ってしまった箇所があった為、今回質問させて頂きました。 アプリケーションの内容としては オリジナルのCStatic継承のクラスを作成し、そのインスタンスを3つ、メインダイアログ内のメンバ変数として定義します。 これらのインスタンスの動作としては、1秒毎に乱数を計算し、それをダイアログ上に表示させる、といったことをします。 ここで質問したいことなのですが、 これら3つのCStaticにはある範囲をもたせており、乱数がその範囲外になるとCStaticの数値、背景の色を変更させたいと思っています。 そこで、これら3つのうち、1つでもその乱数が範囲外になった場合に、3つとも全てのCStaticの数値、背景の色を変化させるにはどのようにすればいいでしょうか? イメージとしては、3つのCStaticがある1つの親からの継承で、その親側で色の変化のコードを作成すれば、それが子のクラスのCStaticクラスにも影響を与えるのかな?と思っています。 なにかご意見がありましたら、宜しくお願い致します。 尚、開発環境は Windows CE 6.0 Visual Studio 2005 です。 ご回答をお待ちしております。

  • vc++のpictureboxにopenGLの画像を描画する方法につい

    vc++のpictureboxにopenGLの画像を描画する方法について。 現在、Visual C++ 2010のフォームアプリケーションで、任意のパラメータを入力したらその値に応じて物体の動きが変わるといったアプリケーションを開発しています。その動き方をopenGLでアニメーションとして可視化したいと思っています。そして、そのアニメーションをvc++のフォームアプリケーションのpictureboxに表示したいと思っているのですが、vc++とopenGLのどちらもかなりの初心者なので、pictureboxへの表示の仕方がわかりません。 以下に参考URLを貼らせていただきます。このようなものにパラメータを入力する部分を設けたものを作りたいのですが、まったく意味がわかりません。どなたかご教授お願いいたします。 http://www.t-pot.com/program/127_OpenGLNET/index.html

  • iアプリ作成 画像を描画できない

    最初に4つのメニューを表示し、メニュー1を選ぶとある画像を表示し、メニュー2を選ぶとまた別の画像を表示する様なiアプリを作成しています。 その作り方が、メニュー1を選ぶと Manu1Canvas c = new Menu1Canvas(); Display.setCurrent(c); c.exe(); という感じでMenu1Canvasクラスのexe()の内容を実行し画像を描画しています。この時Menu1CanvasはCanvasを継承しておりpaint()メソッドを使い描画をしています。 メニュー2を選んだ場合も同じように、Canvasを継承したクラスで画像を描画しています。 このようにそれぞれのメニュー4つにクラスを作り、その4つのクラスにCanvasを継承させpaint()メソッドを使い画像を描画するという処理内容はおかしいのでしょうか?このようにやるとなぜか画面を切り替える時にDojaエミュレータが終了してしまいます。

    • ベストアンサー
    • Java