MFCでタブコントロールを使用しようとしたのですが,使い方がわかりません。
ヘルプや参考書で調べてみても、いまいちわかりません。
タブを追加するにはどうすればいいのでしょうか?
また,タブを選択することでテキストを表示したいのですが,
それはどこで設定すればいいのでしょうか?

※参考となるサイトがあれば教えてください。

このQ&Aに関連する最新のQ&A

使い方 参考書」に関するQ&A: 参考書 使い方

A 回答 (1件)

こんな感じ。


------
pstrLogFile = _T("\\Temp.log");
fl.Open(pstrLogFile,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeRead );
//
m_LogList.DeleteAllItems();
//
LV_ITEMitem;
dCnt = 0;
while(1){
if( fl.ReadString(fs) == FALSE ){
break;
}
if( fs == _T("") ){
break;
}
LocalFile = _T("fs の1番目の要素");
item.mask = LVIF_TEXT | LVIF_IMAGE;
{
dmy.Format("%d",dCnt);
dmy = _T(" ") + dmy;
dmy = dmy.Right(5);
strcpy(cBox,dmy);
item.pszText= cBox;
item.iItem= dCnt;
item.iSubItem= 0;
if( _access(LocalFile,0) == -1 ){
item.iImage = 0;
} else {
item.iImage = 1;
}
ListView_InsertItem(m_LogList, &item);
}
m_LogList.SetItemText(m_LogList.GetItemCount()-1, 1, _T("2番めの要素"));
m_LogList.SetItemText(m_LogList.GetItemCount()-1, 2, _T("3番めの要素"));
//
if( _access(LocalFile,0) == -1 ){
m_LogList.SetItemText(m_LogList.GetItemCount()-1, 7, _T("-"));
m_LogList.SetItemText(m_LogList.GetItemCount()-1, 8, _T("File Not Found!"));
} else {
}
//
dCnt = dCnt + 1;
}
//
fl.Close();
------
 一部抜粋ですので、このままでは”絶対”に動きません。
 ヘルプが1番参考になるのですが...ね。
 ヘルプに慣れないとこの先辛いですよぉ(^^;
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QIE8のタブの着色の意味と解除方法

IE8で,新たに開くタブが,緑や青や黄色になる場合があります。

それぞれどんな意味や機能があるのでしょうか。
また,色つきのタブが並ぶと,どのタブのページを見ているかがわかりづらいので,着色されないようにしたいのですが,方法があればお教えください。

IEは好きなので,出来れば他のブラウザ変えたくはありません。

※OS: Win. 7

Aベストアンサー

タブグループで色分けする機能のようですね。
http://www.atmarkit.co.jp/fwin2k/productreview/ie801/ie801_04.html

次の手順の設定で、色が付かないようにできませんか?
(Internet Explorer 8 でタブに色をつけないようにする設定)
IEのメニュー[ツール] → [インターネットオプション]→ [全般] タブ の タブ の [設定] ボタンをクリック→ [タブグループを有効にする] のチェックを外す

QMFCタブコントロールのグラデーション描画

現在、VC++2010・MFC環境でMFCのタブコントロールのウィンドウ部(?)をグラデーション描画にしたいと考えています。

完成予想としては、Excelのメニュー(?)みたいな感じでグラデーションがかかるような感じにしたいのですが、現在、グラデーションの描画は何とか(たぶん無理やり)できましたが、タブを切替たり、ダイアログ自体が非アクティブ/アクティブを繰り返すとちらついてしまいます。

ソースは以下のようになっています。

-----------------------------------------------------------------
void CTabGradDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
int sel = m_xcTab.GetCurSel();

m_edit1.ShowWindow(SW_HIDE);
m_edit2.ShowWindow(SW_HIDE);

m_button1.ShowWindow(SW_HIDE);
m_button2.ShowWindow(SW_HIDE);

switch(sel)
{
case 0:
m_edit1.ShowWindow(SW_SHOW);
m_button1.ShowWindow(SW_SHOW);
break;
case 1:
m_edit2.ShowWindow(SW_SHOW);
m_button2.ShowWindow(SW_SHOW);
break;
}
Invalidate();

*pResult = 0;
}

void CTabGradDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
CDialogEx::OnActivate(nState, pWndOther, bMinimized);

// TODO: ここにメッセージ ハンドラー コードを追加します。

switch( nState )
{
case WA_INACTIVE :// 非アクティブ
break;
case WA_ACTIVE :// (マウスをクリックする以外の方法) アクティブ
case WA_CLICKACTIVE :// (マウス クリック)アクティブ
Invalidate();
break;
}
}
-----------------------------------------------------------------
Invalidate();が原因でちらついていることまでは分かっているのですが、
なぜちらつくのか?ということと、対処方法もしくは別の方法はないのか?
別の方法があればどういったことなのか?ということが知りたいです。

初心者(小学生並み)にもわかるように教えていただければ幸いです。
宜しくお願いします。

現在、VC++2010・MFC環境でMFCのタブコントロールのウィンドウ部(?)をグラデーション描画にしたいと考えています。

完成予想としては、Excelのメニュー(?)みたいな感じでグラデーションがかかるような感じにしたいのですが、現在、グラデーションの描画は何とか(たぶん無理やり)できましたが、タブを切替たり、ダイアログ自体が非アクティブ/アクティブを繰り返すとちらついてしまいます。

ソースは以下のようになっています。

-----------------------------------------------------------------
void CTab...続きを読む

Aベストアンサー

クラスビューでCTabXxxCtrlを選んでプロパティを開きます。
プロパティにアイコンでメッセージというのがあるので、そこでWM_PAINTを選べばOnPaint()が作成されます。
どういう事に成るかは作って見れば分かりますが、ここで描画すればチラつくことはなくなると思いますが以前に書いた通りすごく面倒です。

>この場合はタブ・ボタンも全て自分で書く必要があります。

書くではなく正確に言うと描くですね。失礼しました。
OnPaint()を作ってみれば分かります。
どうやって描くかというとCDCクラスのメンバ関数を駆使して下さいとしか言えません。すごく面倒ですけどね。

なお、C++の勉強はMFCをやる以上は避けられないので入門書を購入して勉強してくださいとしか言えません。

QBookSyncのIEタブの「変換前に削除する」チェックボックスの意味が分かりません。

BookSync2.43をダウンロードして設定を行っていますが、BookSyncのIEタブの「変換前に削除する」チェックボックスの意味が分かりません。

「変換ボタンを押してIEのお気に入りを変換先に指定する時に既存のお気に入りを削除したい場合にチェックを入れてください」とマニュアルには書かれていますが、意味不明です。

「変換前に削除する」チェックボックスにチェックを入れてBookSyncの「同期」または「変換」をクリックすると具体的にはどのようになるのでしょうか?もう少し噛み砕いて教えて下さい。

BookSyncの「同期」または「変換」の実行対象はGoogle ChromeとIE(IE7)の二つのブラウザーだけです。

Aベストアンサー

返還前に削除しないと、変換前には存在していて返還元には存在しないお気に入りが返還後に残ってしまうので。それを避ける機能です。

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

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

Aベストアンサー

ピクチャーボックスへの描画をどのようにしていますか?
CStatic* pWnd = (CStatic*)GetDlgItem( IDC_PICTURE )
pWnd->SetBitmap( m_bmpImage );
と言った具合にビットマップをピクチャーボックスに張るようにしてはいかがでしょう

ビットマップへの描画は メモリー上にデバイスコンテキスト(DC)を作成しておきこのdcに対して描画を行う
ビットマップをdcに選択
描画終了後に dcから選択を外して
SetBitmapでピクチャーボックスに貼り付け
と言った具合にして見ましょう

メンバー変数として
CStatic m_ctlImage; // ピクチャーボックスに関連付けした変数
CBitmap m_bmpImage; // ピクチャーボックスに貼り付けるイメージ
CDC m_dcImage; // Bitmap描画用のDC
HBITMAP m_holdBmp; // DCへの選択時にビットマップを外すためのハンドル
などを準備します

OnInitDialogなどで
CDC * pDC = m_ctlImage.GetDC();
m_dcImage.CreatecompatibleDC( pDC );
m_bmpImage.CreateCompatibleBitmap( pDC, width, height );
// もともと貼り付けてあったハンドルを保存
// 描画時にビットマップを外すため
// HBITMAP型のメンバー変数 m_holdBmpを準備
m_holdBmp = m_ctlImage.SetBitmap( m_bmpImage );
m_ctl_image.ReleaseDC( pDC );
と言った具合にしておきます

描画イベントで
// ピクチャーボックスのビットマップを外す
m_ctlImage.SetBitmap( m_hOldBmp );
// メモリーDCへビットマップを選択
CBitmap* pOld = m_dcImage.SelelctObject( &m_bmpImage );
// 描画コードを記述
m_dcImage.SetPixel( 100,100, RGB( 255, 0, 0 ) );
// ビットマップの選択を戻す
m_dcImage.SelectObject( pOld );
// ピクチャーボックスへビットマップを設定
m_ctlImage.SetBitmap( m_bmpImage );

と言った具合です

現在どのように描画していて どんな不具合が発生しているのかを明記してみましょう

ピクチャーボックスへの描画をどのようにしていますか?
CStatic* pWnd = (CStatic*)GetDlgItem( IDC_PICTURE )
pWnd->SetBitmap( m_bmpImage );
と言った具合にビットマップをピクチャーボックスに張るようにしてはいかがでしょう

ビットマップへの描画は メモリー上にデバイスコンテキスト(DC)を作成しておきこのdcに対して描画を行う
ビットマップをdcに選択
描画終了後に dcから選択を外して
SetBitmapでピクチャーボックスに貼り付け
と言った具合にして見ましょう

メンバー変数として
CStatic...続きを読む

Qタブが増えて…意味不明なサイトが…?

最近、普通にネットを見ていたら、勝手にタブが増えて、見知らぬサイト(フランス語のサイトとか、ゲームサイトとか…。)が出ます。
興味がないので、現れたらすぐ閉じていますが…。
あれにも、何かしらの原因があると思いますね。
その原因が分かる方、おられますか?

Aベストアンサー

怪しげなツールバーとか、アドオンが原因の可能性があります

http://support.microsoft.com/kb/2539143/ja

アドオンなしで同じ現象が起きるかどうかを一度確認

QMFC,C++/CLI,C#の共存

CCDカメラからの画像を画像処理ボード(MV-10というボードです)で受け取り、そのデータを使ったWindowsプログラムを開発したいと考えています。
開発はVisual C# 2005か Visual C++ 2005(C++/CLI)で行いたい(理想としては、フォームなど外観はC#、内部処理はC++)のですが、画像処理ボードのライブラリがMFCとなっていました。
色々と調べて、MFCとC++/CLIを共存させることが出来るらしく、またC#とC++/CLIを共存させることも出来るらしいと言うことが分かったのですが、具体多的な方法が分かりません。

具体的な方法が記述されている書籍や、ウェブサイトなどがありましたら、教えていただきたいです。

Aベストアンサー

下記URLにヒントがありそうです。

参考URL:http://www.wankuma.com/seminar/200708TechEd/Default.aspx

Qタブブラウザ「DonutRAPT」のRAPTってどういう意味ですか?

RAPTと翻訳サイトにぶち込むと「心奪われる」という意味になるらしいのですが、これでいいのでしょうか?
知っている方いらっしゃいましたら教えてください。

Aベストアンサー

直接的には、製作者さんのハンドルネームですね。>RAPT氏
由来はHypocrite_kさんご推測の通りのようですよ。

以下2行転載
>夢中だ〔形容詞〕、((格式語)) 心を奪われた,(...)でうっとりした、
>((格式語)) (...に)熱中した,夢中の,没頭している

RAPT氏のHP「RAPT's room」のURLを紹介します。(リンクフリー確認)
タイトルの「RAPT」の部分をクリックしてください。

参考URL:http://www.atmark.gr.jp/~s2000/rapt/

QC#,C++/CLI,MFCにおけるデータ型の対応と、メソッドへの渡し方

現在、Visual Studio 2005の、Visual C#、C++/CLI、MFCを使ったシステムを構築しています。
具体的には、MFCで書かれたライブラリ(DLL)をC++/CLIでラップし、C#から呼び出して使うというものです。
現在は、http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_04.html
http://msdn2.microsoft.com/ja-jp/library/ac7ay120(VS.80).aspx
これらのサイトを参考にしながら、一部のMFCで書かれたメソッドを、C#から呼び出すことに成功しました。しかし、int型やHANDLE型などの、上記サイトに記述されているデータ型を用いたメソッドのラッピングや呼び出しはできたのですが、HDCやLPRECTなどの特殊な型の場合のやり方がよく分かりません。

具体的に現在分からないのは、次の通りです。
HDC(デバイスコンテキスト)、HWND(ウィンドウのハンドル)、CIRCLE,RECT等の構造体、LPRECTなどの構造体のアドレス、POINT*などの構造体のポインタ
これらが、C#やCLIでどのような型になるのか、メソッドに渡す時にどのように記述するのかが分かりません。

以上、どなたか分かる方いらっしゃいましたら、ご回答をお願いします。

現在、Visual Studio 2005の、Visual C#、C++/CLI、MFCを使ったシステムを構築しています。
具体的には、MFCで書かれたライブラリ(DLL)をC++/CLIでラップし、C#から呼び出して使うというものです。
現在は、http://www.atmarkit.co.jp/fdotnet/special/vcppinvista02/vcppinvista02_04.html
http://msdn2.microsoft.com/ja-jp/library/ac7ay120(VS.80).aspx
これらのサイトを参考にしながら、一部のMFCで書かれたメソッドを、C#から呼び出すことに成功しました。しかし、int型やHANDLE型などの、上記サイトに...続きを読む

Aベストアンサー

> DLLのリンクはIJW機構というものを使用して

そのようですね、勉強不足で申し訳ありません。

>>    RECT lprcDC, lprcDib;
>
>>    return dllfunction(hDC, lprcDC, hDib, lprcDib);
> --------------------------------------------------------------
> この記述ですと、lprcDCとlprcDibがポインタに変換されていないと思う
> のですが、これは記述ミスでしょうか?

DllImport でマネージドとアンマネージドに変換されるので構造体を含め
C++/CLI のマネージドコードで記述してます。

# 他のと同じように lp- というプリフィクスにしたのが誤解を招いたかも
# 知れないです。

念のために拙いコードなのですが、 C# の GUI でコードを書いて動作
確認をしてみました。

TestDll.dll 側の関数実装には TextDraw と Bitblt を記述して任意の
文字列を bmp1(C#) の HDC に描画して bmp2(C#) の HDC には Bitblt で
bmp1(C#) の HDC を反転したものを転送するようにしました。
TextDraw と BitBlt のどちらかで失敗した場合はその時点で FALSE を
返すようになっています。

HANDLE は void* の typdef なので HDC にキャストしました。
TestDll.dll にポインタが確実に渡っているか調べるのだけならそれで
問題ないのではないかと思いましたので。

------------- 呼出用プログラム(C#) --------------
// PictureBox サイズの Bitmap を作成
Bitmap bmp1 = new Bitmap(pictureBox1.ClientSize.Width,
             pictureBox1.ClientSize.Height);
Bitmap bmp2 = new Bitmap(pictureBox2.ClientSize.Width,
             pictureBox2.ClientSize.Height);

// Bitmap から Graphics を得る
Graphics g1 = Graphics.FromImage(bmp1);
Graphics g2 = Graphics.FromImage(bmp2);

// Graphics から HDC を得る
IntPtr hDC = g1.GetHdc();
IntPtr hDBI = g2.GetHdc();

// DLL 呼び出し
if (!wrapper.function(hDC, pictureBox1.ClientRectangle,
            hDBI, pictureBox2.ClientRectangle)
  )
    MessageBox.Show("失敗");

// PictureBox へ描画
pictureBox1.Image = bmp1;
pictureBox2.Image = bmp2;
g1.ReleaseHdc();
g2.ReleaseHdc();

その他の部分は ANo.2 に記述したものと同じです。
----------------------------------------------------

それと、一点お尋ねしたいのですが

>  BOOL result = Mvc10_PaintDIB( (HDC)hDC.ToPointer(), LPrcDC , (HANDLE)hDib.ToInt32(), LPrcDib );

HANDLE は typedef void* かと思うのですが hDib.ToInt32() として
hDib.ToPointer() としてないのは何か理由があってのことでしょうか?

# こちらで試したところ ToPointer() でも ToInt32() でも動作する
# ようですし、立ち入ったことであれば申し訳ないですので、流して
# ください。

> 実際に使用してみての結果は後日報告させていただきたいと思います。

無事に動作されることをお祈りいたします。
自己解決されておられるようで、お役に立てなくて申し訳ありませんでした。

> DLLのリンクはIJW機構というものを使用して

そのようですね、勉強不足で申し訳ありません。

>>    RECT lprcDC, lprcDib;
>
>>    return dllfunction(hDC, lprcDC, hDib, lprcDib);
> --------------------------------------------------------------
> この記述ですと、lprcDCとlprcDibがポインタに変換されていないと思う
> のですが、これは記述ミスでしょうか?

DllImport でマネージドとアンマネージドに変換されるので構造体を含め
C++/CLI のマネージドコードで記述してます。...続きを読む

QMS_Accessでタブコントロールにコマンドボタン等を関連付ける方法

タブコントロールに最初からコマンドボタン等のオブジェクトを貼り付けるとそのタブに関連付けられますが、(そのタブに設定される?)
別のタブやタブ以外のフォーム上にいったん設定してしまったオブジェクトを、後から特定のタブに関連付けられますか?
単にタブ上に移動しても、そのタブには関連付けられていないようで、タブを切り替えても何も変化しません。
わかる方、よろしくお願いいたします。
(私の言いたい意味がわかるでしょうか?)

Aベストアンサー

そのオブジェクトを選択して、Ctrl-Xでカット、
タブストリップのコンテント部にフォーカスさせた状態で、Ctrl-Vで貼付ける、
って手順でどうでしょう。

Q非MFCにおいて,_PRTマクロを利用し,vectorにしたstringの値を表示すること

vc.net2003にて,非MFC環境にてプログラミングしています.非MFCなのでTRACEが使えず,代わりに_PRTを使用してデバックウィンドウに変数の値を表示させているのですが,vectorにしたstringの値が表示されず困っています.
#include <vector>


vector<string> string1;
string1.push_back("Hellow");
_RPT1(_CRT_WARN, "string1: %s \n", string1);

というようなコードを書き,プログラムを実行するとアクセス違反が出て,うまくいきません.何が間違っているのでしょうか.教えていただけませんか.

Aベストアンサー

_PRT1マクロが、
「CDのディスクを入れると、CDを再生してくれる装置」
だったとします。

_PRT1の装置に、「ケースに入ったCDを30枚入れたラック」を入れようとすると、当然入らない(コンパイルエラー)か、動作不良を起こす(アクセス違反)か、壊れ(ブルーバック、OSが落ちる)ます。

ラックから再生したいケースを取り出し、ケースからCDを取り出して装置に入れる必要があります。

--
string1の型→vector<string>
_PRT1の要求する型→const char* (?)

と、扱う型が違うのが原因です。


人気Q&Aランキング

おすすめ情報