VC++の超初心者です.
UpdateData( FALSE );
を用いてエディットボックスの文字列の表示の更新を
試みているのですが,たとえば,以下のコードのようにボタンをクリックした際に文字列表示の更新を複数回行おうとするとうまくいきません.
具体的には一回目のUpdateData( FALSE );が反映されず二回目のUpdateData( FALSE );のみ反映されるという症状です.
なおm_mojiretsuはCstring型でエディットボックスのDDX用の変数です.
void CMyDlg::OnButton1()
{
DWORD p;
m_mojiretsu=_T("mojirstu1");
UpdateData( FALSE );
/*5秒の待ち*/
p=timeGetTime();
while(1){if((timeGetTime()-p)>5000) break;}
m_mojiretsu=_T("mojirstu1\r\nmojirstu2");
UpdateData( FALSE );
}
何か別の処理を行わなければいけないのでしょうか.
どこかに根本的なミスがあるのでしょうか.
VC歴3日程度で,右も左も分からず大変困っております.よろしくお願いします.
No.2ベストアンサー
- 回答日時:
m_mojiretsu=_T("mojiretsu1");
UpdateData(FALSE);
UpdateWindow(); // <- これを追加
/*5秒の待ち*/
...
とすれば、ひとまず期待どおりの動作になると思います。
# こうするよりは、OnButton1() では変数を書き換えるべしと言う
# 自前のコマンドメッセージを投げるだけで、すぐに戻った方が
# お行儀は良いのですが...
# そこいらへんは追々調べたり試したりしてみて下さい。
ありがとうございます!
文字の表示更新がきちんと行われました.
>そこいらへんは追々調べたり試したりしてみて下さい。
これから少しずつ勉強していこうと思います.
No.1
- 回答日時:
何故反映されないように見えるか。
描画ルーチンを通らなくなるからです。
恐らくUpdateData( FALSE );をした時にビデオメモリ(表示上)にも
反映されると思っているのでしょうが
そうではありません。
例えばこの5秒待ってる間に他のウインドウを重ねてみてください。
再描画されていないことがわかります。
Windowsプログラムというのはウインドウメッセージと呼ばれるものを処理をして
いるメッセージループという箇所があり、そこにWM_PAINT(描画する)メッセージ
を処理しているから画像として表示されるのです。
単にMFCはそれをラップ(見せないように)しているクラスですので、当然
WM_PAINT(描画する)メッセージを処理しなければ、
そこが表示されません。
CMyDlgはCDialog(MFCのクラス)を継承したクラスだと思いますが、
マウスカーソルをそのウインドウの上を動かすだけで
一見何の処理もしてないように見えても内部では処理が動いているのです。
つまりやろうとしていることは
void CMyDlg::OnButton1()内部だけでは解決できない。
(※無理矢理やれなくはないが、普通はしない)
方法は色々ありますが
1つはOnTimer()を使う方法です。SetTimer()で0.1秒毎ぐらいに
OnTimer()を通るようにして、そこで毎回5秒たっているかチェックする
方法、
他にはスレッドを作る方法、
OnButton1() の中で
m_mojiretsu=_T("mojirstu1");
5秒待つスレッドを作成しスレッド終了時にCMyDlgに通知する仕組みです。
一度MFCを使わないプログラムをする事をお勧めします。(MFCが理解しやすくなります)
http://www.kumei.ne.jp/c_lang/index_sdk.html
>恐らくUpdateData( FALSE );をした時にビデオメモリ(表示上)にも
反映されると思っているのでしょうが
おっしゃるとおり,UpdateData( FALSE );をすることで内部的な処理をすべてMFCがやってくれるものと期待しておりました.
タイマー割り込みやマルチスレッド処理など自在に操れるように勉強していこうと思います.
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel 文字列を結合するときに重複をなくしたい 関数・VBA 2 2022/12/12 10:40
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- その他(Microsoft Office) エクセルについて教えてください。 2 2022/10/20 14:55
- Excel(エクセル) ある数値に対して、値を返す数式についてです 2 2022/09/13 22:06
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) Excel 数式がわかりません、答えが導かれる数式を教えていただけませんか? 2 2023/07/24 22:41
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
メッセージハンドラ
C言語・C++・C#
-
-
4
MFCでコンボボックスを選択不可状態にしたい
C言語・C++・C#
-
5
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
6
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
7
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
8
WaitForSingleObjectの使い方について
C言語・C++・C#
-
9
CString から LPCTSTRの型に変換
C言語・C++・C#
-
10
ラジオボタンのグループ化
C言語・C++・C#
-
11
SetWindowText関数について
C言語・C++・C#
-
12
CEdit の内容が変わった時にメッセージを表示させたい
C言語・C++・C#
-
13
_T(abcdef") の_Tってなんですか?"
C言語・C++・C#
-
14
リソースエディタでスタティックテキストの文字サイズの変更
C言語・C++・C#
-
15
MFC ダイアログ上のID取得について
C言語・C++・C#
-
16
ダイアログ内コントロールの位置取得について
C言語・C++・C#
-
17
ダイアログの上のテキストボックスの、初期値を設定する方法が分かりません・・・・
C言語・C++・C#
-
18
エディットコントロールでEnter押した時の動作
C言語・C++・C#
-
19
ダイアログ表示時にチェックボックスにチェックされている状態にするには?
C言語・C++・C#
-
20
CStringの文字列検索&抜き出しについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++プログラムをつかったBMP画...
-
ワードの図形で重なり部分の色...
-
C# ラバーバンドの描画を快適に...
-
ピクチャとHBITMAP
-
重いグラフィックス処理
-
ウインドウサイズを変更しても...
-
VB.NETでPictureBoxへの描画に...
-
vb.netでテキストボックス内の...
-
C#のタブコントロールについて...
-
MFC ビットマップ描画で残像が残る
-
StretchBlt関数について
-
UpdateData( FALSE); による文...
-
MFCでOnPaintのタイミング
-
VB6,リストボックスの特定行の...
-
当たり判定
-
【VC2008】色反転破線の書き方
-
LineToやMoveToにて描画した線...
-
InvalidateRgn()について
-
SHGetFileInfoでアイコンが取得...
-
C# ゲーム作成 FPSと描画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
[VB.net] DataGridViewの列ヘッ...
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
word
-
UpdateData( FALSE); による文...
-
VC++プログラムをつかったBMP画...
-
InvalidateRectの使い方について
-
StretchBlt関数について
-
OneNote 2010 文字と描画がずれる
-
C# ラバーバンドの描画を快適に...
-
エクセルでガンチャートを作成...
-
C++にて、塗りつぶされた円を描...
-
VBAにGDI+を参照させる方法
-
MFC DrawText 背景色とフォント
-
GDI+で高速な描画
-
MFCのタイマーのつかい方を教え...
-
Labelの文字をスクロールする際...
-
FlexGridの一部のみ表示を更新...
おすすめ情報