0

これで始まる実験的なプロジェクトに戻ってきました: POINT型の 10000 要素の配列があります。それらは、ウィンドウ ( SetPixel() )に描画される x 座標と y 座標を持つピクセルであると想定されています。DC を作成し、配列から各 POINT を取得して画面に描画する単純な関数を作成しました。

void draw_points() {
    HDC hdc = GetDC(hWnd);
    for (int i = 0; i < 10000; i++) {
        SetPixel(hdc, points[i].x, points[i].y, RGB(0, 0, 0));
    }
    ReleaseDC(hWnd, hdc);
}

さて、この関数をWinMain()関数のメイン ループ内に配置しました。できます。画面に点が描かれているのがわかります。問題は、ポイントが表示されている間は他に何もできないことです。そのため、Java のような非同期関数が必要であることがわかりました。これは、 draw_points()関数の実行中に配列からポイントを追加、削除、変更できるようにしたいためです。

その結果は必要ありません。他の関数でやりたいことをしている間、別のスレッドで実行したいだけです。それで、私の質問: Windows API はこれに対して何を提供してくれますか? それを行う通常の方法はどれですか?外部ライブラリが必要ですか? どうやって始めたらいいのかわからない。私が何を望んでいるのか理解していただければ幸いです。ありがとう!

4

2 に答える 2

1

何もできないのは、Windows メッセージに応答していないためです。ループに PeekMessage() 呼び出しを配置し​​て、メッセージ キューを定期的にチェックする必要があります。取得したら、TranslateMessage() と DispatchMessage() を呼び出す必要があります。

于 2012-07-27T12:46:12.453 に答える
1

これをメイン ループから呼び出すべきではありません。WM_PAINT代わりに、ウィンドウ メッセージ ループでイベントを取得したときに呼び出す必要があります。

于 2012-07-27T12:32:50.173 に答える