
MFCのダイアログベースで 変化を表すグラフを作成したのですが
線を描くときに原点復帰してしまいます。
左上のエディットに数値をいれ 実行を押すと座標(200,200)から横にエディットで入力した数値分線を引いていくというものです。
Timerを使い1秒ごとに書かせています。
void CsinDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。
static int count=0;
static double i,x=0;
char buf[100];
CString str;
/*------描写設定----*/
CWnd* h = GetDlgItem(IDC_BB);
CDC* pDC=h->GetDC();
//-----------------------------------//
CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT1);
edit->GetWindowText(str);
i = atof((const char*)str);
x=x+i;
sprintf(buf,"%lf",x);
siki_edit.SetWindowText(buf);
/*---------------------------------------*/
if(count==0)
pDC->MoveTo(200,200); // 座標(200,200) に移動
pDC->LineTo(200+x,200); // 座標(200+x,200) まで線を引く
count++;
h->ReleaseDC(pDC);
CDialogEx::OnTimer(nIDEvent);
}
実行結果は添付した画像のようになります。
イメージではcountが0の時だけMoveToで動かし、それ以降は座標(200,200)から横に線を引いていきたいのですが。
どのように直せばよいのでしょうか?
LineToからLineToの指令ができないということでしょうか?

A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> イメージではcountが0の時だけMoveToで動かし、それ以降は座標(200,200)から横に線を引いていきたいのですが。
ReleaseDC後もカレント座標が保持されていると考えるから、そのような処理にしたのでしょうが、そんなことは保障されていません。
また、OnTimerで描画すると、ダイアログの上に別のウィンドウが重なったりすると、表示が消えてしまいますよ。表示はOnPaintで行うべきです。表示に必要なデータの作成と再描画の指示だけをOnTimerで行いましょう。
そのほかにも、
> CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT1);
> edit->GetWindowText(str);
これはGetDlgItemText関数1つでできます。
> sprintf(buf,"%lf",x);
doubleの場合の書式は%fです。scanf系関数の場合は、floatとdoubleの違いを示すためにlが必要ですが、printf系関数では、引数にfloatを渡してもdoubleに変換されるので、どちらも%fです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAで他アプリケーション...
-
Visual Studio .NET 2003:右揃...
-
画像の座標取得
-
bitbltからの画像保存ができま...
-
VBA HTML要素または文字の座標...
-
デスクトップに直接画像を表示...
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
-
エクセルの画面にユーザーフォ...
-
エクセルVBAで、MsgBox やInput...
-
switch の範囲指定
-
UWSCの画像認識と条件分岐につ...
-
インタラクティブの反対語は?
-
ExcelVBAでユーザーフォーム内...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA リストボックスをダブルク...
-
CloseとDisposeの違い
-
Accessのフォーム上にエクセル...
-
uwcs のマクロで画像認識をして...
-
uwscの画像認識の不具合だと思...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#で、画像の、指定した座標の...
-
UWSC画像認識で座標の位置がず...
-
C言語でグラフ作成??
-
Excel VBAで他アプリケーション...
-
VBA HTML要素または文字の座標...
-
uwscについて、同一の画像(仮...
-
VBでクリックイベントを発生さ...
-
エクセルVBAで画像を貼り付ける...
-
マウスイベントが動かない
-
UWSCのプログラミングついて教...
-
PostScriptについて
-
VBでデスクトップ上のアイコン...
-
UWSCのCHKIMG関数について
-
LineTo,MoveToについて
-
マウスカーソルの移動
-
UWSファイルの編集?
-
DirectX テクスチャの拡大
-
VBAで ScreenToClient を使いたい
-
高さのあるクォータービューの...
-
UWSCでPEEKCOLORを使い指定ウィ...
おすすめ情報