• ベストアンサー

CString型で混乱しています

今CString型で設定した変数を使ってこのように書きました CStrig tt; tt=1; pDC->TextOut(20,20,tt); このように書いたのですが、画面には・のようなものしか表示されません。 これは自分がおかしいのでしょうか?

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

  • ベストアンサー
  • wr250zb
  • ベストアンサー率41% (7/17)
回答No.1

これは"1"という文字をウィンドウ上に描画すると理解して。。。 tt=1; の代入している1は数値(intとかlongの値)ですよね。 (文字の'1'を表すASCIIコードは16進数で31です) CStringは文字列を管理するクラスですから代入は文字列 となります。 (ビルド時に何かerrorなりwarningなりのメッセージが出ませんでしたか?) なので tt = "1"; とするか CString tt( "1" ); pDC->TextOut(20,20,tt); となります。

channel6
質問者

お礼

ありがとうございました。そうですよね…文字列の型なのに数字でできるわけがないっすよね…アホすぎる質問ですいませんでした笑 ですけど、なぜかエラーはでなかったんですよね…笑

関連するQ&A

  • CStringから1文字を取り出すには?

    CStringから1文字を取り出すために以下のようにして確認しましたが、文字化けした字が表示されてしまいます。 なにかおかしなことをやっているのでしょうか? よろしくご指導下さい。 CString qq="あいう"; dc.TextOut(0,0,qq.GetAt(2);

  • LoadBitmapでCStringを使いたい

    VC++.NETでMFCアプリケーションを作っています。 CBitmap::LoadBitmapの定義では  BOOL LoadBitmap(LPCTSTR lpszResourceName); とあるのですが、リソースネームはCString型の変数では指定できないのでしょうか? ビットマップリソースがIDB_BMP1~IDB_BMP5まであり、状況により表示する画像を切り替える、ということをしたいのですが。   (略)  int n=1;  CString fname;  CBitmap bmp;  fname.Fromat("IDB_BMP%d",n);  bmp.LoadBitmap(fname);  pOldbmp = myDC.SelectObject(&bmp);  pDC->BitBlt(0, 300, 50, 77, &myDC, 0, 0, SRCCOPY);   (略) とすると画像が読み込まれません。 なお、LoadBitmapのfnameの部分を IDB_BMP1 と置き換えれば、画像は正常に表示できます。 MFC自体が初めてなので、分かりやすいご説明をいただけると嬉しいです。

  • MFC VC++ 6.0 使用 

    CModel::OnDraw(CDC *pDC) { pDC->TextOut(0,0,"OK"); } というふうに OnDrawの中で pDC->TextOut()と 使って 実行画面に 文字を表示させることは できるのですが、例えば 自分が 追加した 関数 void CModel::On_Distance(){ } などで、実行画面に 文字をだしたいときは どうすればいいのでしょうか?pDC を 手に入れることが できるのであれば そのほうほう 教えてください。

  • VS2008のMFCのTextOutについて

    毎度、お世話になります。 Windows7でVS2008のMFCのFormView形式でプログラムしています。 OnButton5でTextOut文を実行していますが、最後の『pDC->TextOut(20,80,str)』 だけ表示されます。 但し、前の2個のpDC->TextOutの後にSleep(1)を追加しますと、全て表示できます。 Q1)Sleep(1)を追加しなくて、全てのTextOutが表示できる方法はありますか? ================================ void CMFCTHREADView::OnButton5(){ // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください CDC* pDC=this->GetDC(); int t_endB=999; str.Format("time=%d ms ",t_endB); pDC->TextOut(20,40,str); //これだけ表示されず。 //=============== str.Format("countX=%d ",countX); pDC->TextOut(20,60,str); //これだけ表示されず。 //=============== str.Format("countA=%d countB=%d ",countA,countB); pDC->TextOut(20,80,str); //これだけ表示されます。 //==================== } =================================== 以上、宜しくお願いします。

  • CStringをLPCTSTRへ変換

    お世話になっております。 VC2005を使用しております。 現在、CFileDialogのGetPathName(CString型)で設定された ファイル名に、CImage.save(LPCTSTR型)を使用して画像を保存したい と思っております。 しかし、CString型をLPCTSTR型に変換する方法がわかりません。 方法を教えていただけないでしょうか? 今は、GDI+を使用してませんが、やはり今後の事を考えると使用して ソフトを組んだほうがよいのでしょうか? よろしくお願いします。

  • for文の処理に時間がかかっているか。MFC VC++ 6.0 使用

    今 私は MFC VC++ 6.0 を使用しています。 CModel::OnDraw(CDC *pDC) { (略) (ここから) for(int i=0;i<500000;i++){ なんらかの アルゴリズム } (ここまで) (略) } 上記に示した (ここから) (ここまで)に ドレくらい時間がかかっているか 時間を 計りたいのです。 かかったじかんを pDC->TextOut(・・・・・) と 画面に 表示させたいのですが、どうすればいいでしょうか? 参考書には 今の 時間(4時12分) などの現在の時刻を 表示させるものは 結構のってるのですが、私は 時刻ではなく for文を処理している 時間を しりたいのです。よければ 教えてください。

  • VC++のTextOutの再描画の仕方

    VC++6.0のMFCでプログラムを組んでいます。 OnDrawクラス内であるテキストデータを読み込んで、配列に格納しておいてその中の値がある値を超えたら、文字表示。超えていなければ文字非表示としようと思っているのですが if(w[16][m]<-700.0){ pDC->SetTextColor(RGB(0,0,0)); pDC->TextOut(20,200,"表示文字"); }else{pDC->SetTextColor(RGB(255,255,255)); pDC->TextOut(20,200,"表示文字"); } としてfor文でmを増加させていくのですが、初めの評価だけでずっと変わりません。(初め-700以下なら文字がずっと表示され、以上ならずっと白で表示されます。赤(255,0,0)にして試してみましたところずっと赤が出ました。) ネットを方々探しましたが、いまいちわからなく困っています。 わかりづらい質問かもしれませんが、よろしくお願いいたします。

  • CEditクラスの透過について

    CEditクラスを派生させれば できるのでしょうか? 文字を入力した部分が白い帯になり 派生クラスで CDC *pDC=GetDC(); pDC->SetBkColor(RGB(0,0,255)); pDC->SetBkMode(TRANSPARENT); ReleaseDC(pDC); などとしても TextOut関数に対してなので 違うような気がします。 別に透過でなくても 親ウインドウ画面をコピーしてCEditの派生クラスに貼り付けても(BitBlt)いいんですが、 文字の部分にどう処理させればいいのかわかりません。 CEditクラスの派生クラスの透過は出来るのでしょうか? よろしくお願いします。

  • VC++について

    MFC初心者なのですが、MFCで簡単なタイピングゲームを作成しているのですが、肝心の文字列を処理方法を教えていただけたらと思います。 流れとしては、ファイルから文字列を読込み、 読込んだ文字のローマ字部分と同じ文字を制限時間以内に入力するというゲームです。 制限時間を越えてしまった場合は強制的にゲームを終了します。 void CProgramDoc::OnFileRead(CDC *pDC) というファイルから文字を読込むクラスを作成しました。 ファイルから2行(一行目、漢字、二行目、ローマ字)を1セットとし25セット(全50行)読み込み、全てbufferに一度、格納します。 bufferの型はCStringです。 格納する際は、 strList.AddTail(buffer); で格納しました。 初めのセットのみを表示する際は、 pos = strList.GetHeadPosition();//先頭部分の要素の位置を返す m_sStr0 = strList.GetNext(pos); //posの位置を次へ移動させる m_sStr1 = strList.GetNext(pos); で、m_sStr0、m_sStr1に格納し、 void CProgramView::Moji(CDC *pDC) { CProgramDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->TextOut(180,530,pDoc->m_sStr0); pDC->TextOut(180,560,pDoc->m_sStr1); } で表示することができるのですが、連続的に表示する方法が思いつきません。 この文字セットを何らかのイベント(時間切れ、入力完了)後、次のセットに移行させ表示するための方法を教えてください。

  • MFC VC++ 6.0 使用 

    //自分が作ったクラス class Point{ double a; double b; private; Point(double A,double B){a=A,b=B} double GetA(){return a} double GetB(){return b} } //グローバル宣言 Point point(12.0,4.5); //MFCから 与えられたもの CModel::OnDraw(CDC* pDC){ pDC->TextOut(0,0,"HELLO"); } //自分で追加した関数 クラスウィザード を 作ったときにできた。 CModel::MyMeasure() { double answer = point.GetA-point.GetB; Invalidiate(); } 今やっていること やりたいことを簡略化して かきました。 MyMeasure は 自分が クラスウィザードを作成したときに追加した関数です。この 中で 再描画をしたいのですが "HELLO"が 表示されない ばかりか 自動的に クライアント領域(? 実行画面 最初に "HELLO"が でてくる 画面)が消えてしまいます。 どうしてなのでしょうか? これは あくまで 簡略化したものです。 もしかしたら 初歩的な問題なのかもしれませんが、できるだけ 詳しく説明おねがいします。。初心者のため(--) お願いします。

専門家に質問してみよう