• ベストアンサー

SetDlgItemInt( ) c++

今MFCでダイアログを作成いたしました。 IDC_EDIT1というエディットボックスが1つあります。 そのほかにもいろいろありますが、今回はこのエディットボックス内で SetDlgItemInt( )を使って処理したいのです。 //処理内容 double a; a = 10.5; SetDlgItemInt(IDC_EDIT1, (int)a); 以上のようになっています。 SetDlgItemIntの第2引数がUINTなので そのまま SetDlgItemInt(IDC_EDIT1, a); とすると当然怒られてしまう訳ですが、 SetDlgItemInt(IDC_EDIT1, (int)a); とすると逆にエディットボックス内には [10]としか表示されません。 正しく表示させるにはどうしたらよいのでしょうか。 ご教授の程よろしくお願いいたします。

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

  • ベストアンサー
回答No.2

 こんにちは。  SetDlgItemInt()は少数を表示しませんので、かわりにSetDlgItemText()を使用します。  以下の様な感じです。 double a = 10.5f; CHAR buf[80]; ::sprintf(buf, "%.1f", a); //::sprintf(buf, "%.3f", a);←こちらも試して見ましょう SetDlgItemText(IDC_EDIT1, buf);

doborn
質問者

お礼

解決しました。 double a = 10.5f; は double a = 10.5; でも正常に作動するみたいですね。 すぐ解決することができました! ありがとうございました☆

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

SetDlgItem"Int"ですから、当然整数値しか扱えません。 CString辺りに変換してSetDlgItemText()で表示するしかないのでは?

doborn
質問者

お礼

なるほど。 SetDlgItemDoubleとかいう関数もあっていいと思うのは自分だけでしょうか(^^; ご回答の程ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • GetDlgItemInt( ) c++

    現在MFCでウィンドウプログラムを作成しています。 現在、エディットボックス(IDC_EDIT1)が1つあり その変数に CEdit m_ed1; と、もう1つ double d_ed1; があります。 どちらもIDC_EDIT1に対する変数です。 IDC_EDIT1で入力された値(2.56)をd_ed1に代入したいのです。 d_ed1 = GetDlgItemInt(IDC_EDIT1); としたらもちろん d_ed1には [2]しか入らないわけなのですが、 これを解消するにはどうしたらよいのでしょうか。 ご教授の程お願いいたします。

  • MFC Timerについて

    MFCのTimerの利用方法をいろいろ調べたのですが。 理解できずに困っています。 MFCのダイアログベースで作成し、ボタンを押したら Timer(1秒ごと)でエディットボックスに表示させるというものです。 ・ベースのウィンドウにボタンとエディットボックスを作成しました。 ・次に ボタンをダブルクリックし以下のように書きました。 void CtestDlg::OnBnClickedButton() {     int x=0; char buf[10000]; x++; sprintf(buf,"%d",x); (labelの変数名)_edit.SetWindowText(buf); } ・SetTimer(1, 1000, NULL);を用いて ボタンがクリックされたら1秒ごとにxの値をエディットボックスに表示させるようにしたいのですが。 OnTimer(UINT nIDEvent) Close()やKillTimer(1);をもちいらなければならないことはわかったのですが。 作業手順がわかりません。 詳しい 作業手順をおしえてください。 プログラム完成まで 教えていただけるととてもうれしいです。 プログラマーの方よろしくお願いします。

  • 別スレッドからメインダイアログのコントロールにアクセスする方法

    VC++2005 MFC WindowsXPを使用しています。 メインダイアログに作成したエディットボックスに フォーカスをセットしたいのですが、 別スレッドから行うにはどのようにすればよいのでしょうか? メインダイアログにあるボタンを押すと別スレッドの処理に入り、 その中でメインダイアログのコントロールを操作しようとしています。 //フォーカスをセット CWnd* MyEdit = ( CWnd* )this->GetDlgItem( IDC_EDIT1 ); MyEdit->SetFocus(); 宜しくお願い致します。

  • コンパイルエラー'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。

    現在ダイアログA,B,Cがあります。 Aにはボタン2つ([C]呼び込みボタンと[格納]ボタン)、タブがあり、 Bにはエディットボックス(IDC_EDIT1)とスピンボタン(IDC_SPIN1)が Cにもエディットボックス(IDC_EDIT2)とスピンボタン(IDC_SPIN2)があります。 BもCもスピンボタンを押すたびに数値が増減します。 それで、 Aは呼び出し元 BはAにあるタブ内に表示されるダイアログ CはAのボタン押下で呼び出されるダイアログ です。 Aのヘッダに CBDlg m_bdlg; CCDlg m_cdlg; struct aaa { int b; // Bダイアログのスピンの数値を格納する   int c; // Cダイアログの〃 }; と定義しました。 Aの[格納]ボタンを押すと構造体に格納されるようにしたいので void CADlg::OnBnClickedKakuno() { struct aaa astruct; astruct.b = m_bdlg.GetDlgItemInt(IDC_EDIT1); astruct.c = m_cdlg.GetDlgItemInt(IDC_EDIT2); } このようにしてコンパイルをしたところ ------------------------------------------------- 1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(1820) : error C2248: 'CObject::operator =' : private メンバ (クラス 'CObject' で宣言されている) にアクセスできません。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(559) : 'CObject::operator =' の宣言を確認してください。 1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : 'CObject' の宣言を確認してください。 1> コンパイラでのこの診断により関数 'CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)' が生成されました。 ------------------------------------------------- のようなエラーが発生しました。 どうすればよいのでしょうか? 解決法の程、ご教授いただければと思います。

  • c++ 変数を1度使ったら削除する等

    変数を1度使ったらなくなるようにしたいです。 今、MFCでダイアログを作成しているのですが AとBのダイアログがあります。 AのOnBnButtonClicked()内で CBDlg dlg; dlg.DoModal(); と作成し、ボタンが押されるとBのダイアログが呼び出されるようにしました。 Bにはエディットボックスがあり、 呼び出されたB内でエディットボックス内を変更します。 最初(1回目)に呼び出した場合にはエディットボックス内に0と表示させておきたいです。 Bを閉じて、もう一度ボタン押下でBを呼び出しても先ほど変更した内容が表示されている、というようにしたいです。 そのためにif文で if(Bが初めて呼び出されたとき){ エディットボックスに0を表示; } else if(2回目以降){     先ほど編集したデータ; } というようにしようと自分の中では考えています。 Bのダイアログが初めて呼び出されたときを0として int i = 0; if(i == 0)...... として それ以降1回呼び出されるごとにiを +1していきたいです。 そうするために int i = 0; を初期化で設定する必要があるのですが そう設定するとBのダイアログが呼び出されるたびに i = 0; されてしまい困っています。 わかりにくい説明かと思いますが、説明不足であれば補足要求をお願いいたします。 ご教授いただきたく思います。

  • SetWindowText関数について

    プログラミング初心者です。 WINAPI32を用いて、プログラミングに励んでいます。 リソース機能を用いて、親ウインドウのメニューバーからダイアログという形で子ウインドウを開けるようなプログラムを作りました。さらにその子ウインドウ上に、エディットボックスのコントロールを作りました。 例えばそのエディットボックスのIDがIDC_EDIT1なのですが、 子ウインドウを開いた時にすでにそのエディットボックスに数値が入力されているようにしたいのです。 そこで、ダイアログが開かれた時に流れる WM_INITDIALOGのメッセージがきたときに、SetWindowText関数を使えばよいのかな?と思ったのですが、このようなとき第一パラメータにはどのような数値をいれたらエディットボックスに文字列を代入できますか?? IDC-EDIT1といれたら、Struct HWNDに変換してくださいというエラーがでました。 どなたかご教授よろしくお願いいたします。

  • visualC++での文法

    VisualC++を勉強しているのですがどうしても分からないので教えてください。例えばダイアログベースでのMFCプロジェクト test を作り、コントロールにプッシュボタンとエディットボックスを配置し、プッシュボタンのイベントハンドラに void CtestDlg::OnBnClickedButton1() { CEdit* Settext =(CEdit*)GetDlgItem(IDC_EDIT1); Settext -> SetWindowText("OKWEB"); } とすれば、プッシュボタンを押したときにエディットボックスにOKWEBと表示されますよね。 この場合のCEdit* Settext =(CEdit*)GetDlgItem(IDC_EDIT1); の(CEdit*)は何なのでしょうか?最初のCEdit* はSettextがCEdit*クラスを示すポインタになるのは理解できるのですが、(CEdit*)はオブジェクトでそれがGetDlgItemを使っているのでしょうか。それならば、(CEdit*).GetDlgItem(IDC_EDIT1) じゃないのでしょうか?それとも(CEdit*)はキャストか何かなのでしょうか? C++の勉強が足りないのは分かってるのですが、VisualC++の勉強と同時進行なのでどうも混乱しています。詳しい方どうかお願いします。

  • エディットボックス

    VC++、APIでwindowsプログラムを書いています。ダイアログボックスで質問があります。 case WM_INITDIALOG: SetDlgItemText(hDlg, IDC_EDIT1, "0"); return TRUE; で読み取り専用エディットボックス内に初期値を書き case WM_CTLCOLORSTATIC: { HDC hdc = (HDC)wParam ; SetTextColor( hdc, RGB( 255, 255, 255)) ;// 白色 SetBkMode(hdc, TRANSPARENT); // 背景を透過 return (BOOL)(HBRUSH)GetStockObject(NULL_BRUSH) ; } でダイアログボックス内のスタティックテキストと読み取り専用エディットボックスの背景を同時に透過させているのですが、エディットボックス内の文字を void ddd( HWND hDlg, int xxx) { char ttt[100]; sprintf(ttt,"%d",xxx); SetDlgItemText(hDlg, IDC_EDIT1, ttt); return ; } で書き換えると古いテキストが残ったように表示されます(背景に色を指定すれば古いテキストは残らない)。 うまく表示させるにはどういった方法があるでしょうか? ご存知の方、よろしくお願いします。 ちなみにダイアログボックスにはビットマップが貼ってあります。

  • エディットボックスの数値を他の変数に代入するには??

    プログラム初心者です。 質問させてください! リソース機能を用いて、親ウインドウのメニューバーからダイアログという形で子ウインドウを開けるようなプログラムを作りました。さらにその子ウインドウ上に、エディットボックスのコントロールを作りました。  そのエディットボックスのIDがIDC_EDIT1なのですが、 SetDlgItemInt関数を使って SetDlgItemInt(hWnd,IDC_EDIT1,A,FALSE);とし、 子ウインドウが開かれた時に流れる WM_INITDIALOGメッセージが流れた時に、その子ウインドウのエディットボックスにAという数値をすでに入力されているようにしました。 実際にこのプログラムを実行した時に、エディットボックスAの値をキーボード操作で任意に変えられると思うのですが、 このとき任意に変えた数値をさらにAに代入するにはどのような関数を用いればいいのでしょうか?? つまり、親ウインドウから子ウインドウへ送信させたAという数値を、子ウインドウ上のエディットボックスでキーボード操作より値を変化させ、その値をさらにもとのAに更新させて親ウインドウで使いたいのです。 MFCの機能は使っておりません。 どなたかご教授よろしくお願いいたします。

  • 変数について

    .net2003でMFCダイアログを作成中です。 今AダイアログとBダイアログがあります。 Bにはエディットボックスが1つあり、 Aにはボタンが1つあります。 Aにあるボタンを初めて押下した場合にはBのエディットボックス内に [1]を。 Bを閉じて再びAにあるボタンを(2回目)押下した場合にはBのエディットボックス内には[2]と表示させたいです。 これの繰り返しを行いたいのですが、どのようなプログラムにすればよいのでしょうか? Aヘッダで int aaa; // ボタンを押した回数を保存する変数 A.cpp AのOnBnButtonClicked関数内に aaa += 1; //もちろんOnInit内で初期化済み として B.cpp内で if(aaa == 1){ ....... } とやろうとしたのですが当然怒られてしまいます。 ご教授の程よろしくお願いいたします。

このQ&Aのポイント
  • 富士通デスクトップパソコンの画面が一瞬真っ暗になる問題について解決方法を教えてください。
  • 富士通FMVを購入した直後から、画面が一瞬真っ暗になるという問題が発生しています。
  • 一日に一度ほど、富士通デスクトップパソコンの画面が一瞬真っ暗になります。ソフトウェア更新は最新状態にしていますが、問題は解決していません。
回答を見る

専門家に質問してみよう