none
AllocConsole実行後のカーソルが砂時計に RRS feed

  • 質問

  • int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){
        AllocConsole();
        system("pause");
        FreeConsole();
        return 0;
    }

    上記のようなコードを実行した時に pause で停止してから5秒間程、
    マウスカーソルが砂時計になって処理中みたいになってしまいます。
    コンソール用の main() 関数でプログラムを作った時には、
    そもそも AllocConsole を使っていませんがこういう事にはなりません。
    故あって GUI 用の WinMain() 関数からコンソールを使いたいのですが、
    コンソールでカーソルが砂時計になってしまうとプログラムを使ってる人から、
    これはまだ何か処理をしているのではないかと思われて困っております。
    何かカーソルが砂時計になってしまうのを回避する方法はありませんでしょうか。
    2012年9月14日 4:07

回答

  • 返信がないようなので答えてみます。

    そもそも砂時計表示されるのは GUI アプリなのに初期ウィンドウを作成していないからでしょう。
    トップレベルウィンドウ表示でアプリケーションのマウスカーソルが初期化されますから・・・。
    ウィンドウ表示後のボタン処理等で上記コードを実行するなら砂時計表示されないはずです。

    というわけで、「普通にウィンドウをつくって利用する」なら支障ないのでは?と思います。

    もしウィンドウ不要ならば、「コンソールアプリケーションとして作成すれば良い」となります。


    どうしても例示コードで砂時計をだしたくないなら、十分な待ち時間後に Console を表示すればできますが・・・。

    アプリのマウスカーソル初期化ができればよいのでしょうが、ウィンドウを作らずに行う方法に心当たりはありません。

    • 回答の候補に設定 佐伯玲 2012年9月21日 7:29
    • 回答としてマーク 佐伯玲 2012年9月24日 6:59
    2012年9月17日 10:02

すべての返信

  • 返信がないようなので答えてみます。

    そもそも砂時計表示されるのは GUI アプリなのに初期ウィンドウを作成していないからでしょう。
    トップレベルウィンドウ表示でアプリケーションのマウスカーソルが初期化されますから・・・。
    ウィンドウ表示後のボタン処理等で上記コードを実行するなら砂時計表示されないはずです。

    というわけで、「普通にウィンドウをつくって利用する」なら支障ないのでは?と思います。

    もしウィンドウ不要ならば、「コンソールアプリケーションとして作成すれば良い」となります。


    どうしても例示コードで砂時計をだしたくないなら、十分な待ち時間後に Console を表示すればできますが・・・。

    アプリのマウスカーソル初期化ができればよいのでしょうが、ウィンドウを作らずに行う方法に心当たりはありません。

    • 回答の候補に設定 佐伯玲 2012年9月21日 7:29
    • 回答としてマーク 佐伯玲 2012年9月24日 6:59
    2012年9月17日 10:02
  • こんにちは、あか さん
    フォーラムオペレータの佐伯 玲 です。

    kyano30 さんの返信はご確認いただけたでしょうか?

    投稿された質問に対し参考になる返信だと思われたので
    勝手ながら私のほうで「回答としてマーク」をさせて頂きました。

    宜しくお願い致します。
    __________________________
    日本マイクロソフト株式会社 フォーラム オペレーター 佐伯 玲

    2012年9月24日 6:59