私はネイティブのC++を使い慣れていません。今は、マウスの左ボタンを押すと、InvalidateRectを実行して矩形を描画し、反復するたびにXをボックスサイズだけインクリメントするforループがあります。しかし、C++は、C#よりもはるかに高速で効率的な描画であり、すべてを即座に描画します。私が望むのは、長方形を無効にし、長方形を表示し、50ms待ってから、ループを続けることです。私は睡眠(50)を試みたが、結果を示す前に絵画が終わるまでまだ待っている。私もPeekMessageを試しましたが、何も変わっていませんでした。 ご協力いただければ幸いです。おかげDoEventsはC++に相当しますか?
6
A
答えて
16
DoEvents関数は、基本的には翻訳:
void DoEvents()
{
MSG msg;
BOOL result;
while (::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
{
result = ::GetMessage(&msg, NULL, 0, 0);
if (result == 0) // WM_QUIT
{
::PostQuitMessage(msg.wParam);
break;
}
else if (result == -1)
{
// Handle errors/exit application, etc.
}
else
{
::TranslateMessage(&msg);
:: DispatchMessage(&msg);
}
}
}
2
私はWin32 APIの中で少し錆びていますが、これを行うための非同期の方法は次のようになります。
- は矩形
- セットAを無効にタイマ(下記参照)を使用して50ms後にメッセージを送信する
- WM_PAINTイベントが発生するようにイベントループに戻る
- タイマメッセージを受信すると、矩形を移動してから、繰り返します。
このようにして、イベント駆動型になります。私はこれがあなたが求めているものではないことを理解していますが、とにかく可能な解決策として言及したいと思いました。
EDIT:すばやいgoogleがWindows API呼び出し[SetTimer]を使用します。http://msdn.microsoft.com/en-us/library/ms644906(VS.85,loband).aspx)メッセージをWM_TIMERにする
+0
+1、これは特定の問題のためのより良い解決策です。 –
関連する問題
- 1. C#VB 6 DoEventsに相当する
- 2. 私はVB doeventsのPHP相当物を探しています
- 3. perrorのC++に相当しますか?
- 4. C#String.Format()PHPに相当しますか?
- 5. setTimeOut cに相当しますか?
- 6. C#のfunc_get_argに相当しますか?
- 7. JavaのC++バリデーションテンプレートに相当します。
- 8. C++ iostreamのStreamReader.ReadToEnd()に相当します。
- 9. C++のRegex.Replaceに相当します。
- 10. JavaのC++ map.lower_boundに相当します。
- 11. C#のスーパーキーワードに相当します。
- 12. C#とは何ですか?Delphi TDecompressionStreamに相当しますか?
- 13. (パスカルから)C/C++に相当する
- 14. C++ std :: partial_sortに相当するC#はありますか?
- 15. Objective Cはjavascripts setTimeoutに相当しますか?
- 16. QTimer :: singleShotはC#Windows Formsに相当しますか?
- 17. django環境では 'python -c'に相当しますか?
- 18. SprintfはMathematicaに相当しますか?
- 19. Passport.jsはPythonに相当しますか?
- 20. プライムフェイスはdjangoに相当しますか?
- 21. Symfony2はbefore_filterに相当しますか?
- 22. .NETはGetLastInputInfoに相当しますか?
- 23. direct_to_templateはメールに相当しますか?
- 24. BufferedImage.getRGB C#相当ですか?
- 25. VBA:GoalSeek C#に相当する
- 26. db.repairDatabase()に相当するC#
- 27. C++に相当する。cin.peek()
- 28. Rubyの `respond_to?`に相当するC#はありますか?
- 29. JavaのFile.separatorに相当するC#はありますか
- 30. STL出力イテレータに相当するC#はありますか?
GetMessageの戻り値がチェックされず、WM_QUITが正しく処理されない点を除いてほぼ正しい。 –
GetMessageが0を返した場合、WM_QUITメッセージは次のようになります。 (http://blogs.msdn.com/oldnewthing/archive/2005/02/22/378018.aspx)GetMessageは-1を返すこともできます。 –
@FilipNavara私はこれを3つの可能性のあるすべてのケースを表示するために、あなたは絶対に右に編集されています。 –