C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: ShowWindowで非表示にならない


(過去ログ 59 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■33817 / inTopicNo.1)  ShowWindowで非表示にならない
  
□投稿者/ 貴子 (1回)-(2009/03/10(Tue) 17:17:32)

分類:[C/C++] 

貴子と申します。
よろしくお願いします。

開発している環境はVisual Studio 2003で、OSはXP Proです。

タイトルにあるように画面が非表示にならず困っています。
作ったアプリはCD−ROMから起動するアプリで、起動時に指定時間タイトル画面を表示し、その後にメイン画面が自動で開くようになっています。
基本的には上手く動いてくれるのですが、ある特定のユーザだけはタイトル画面が消えないという現象が発生してしまいました。
更に、2回目以降の起動では上手く動いてくれるようです。
(端末を再起動すると、やはり一度目は消えないようですが)

ソースをいくら見直しても原因がわかりません。
また、私の方でも何回も確認したのですが、現象を再現できずどうにもならずにいます。


ソースから該当箇所を抜粋したものがコチラ↓です。

hWndTitle = CreateWindowEx(WS_EX_TOPMOST,
             _T("TTL"),
             wstrTitle.c_str(),
             WS_SYSMENU | WS_MINIMIZEBOX,
             x, y,
             FORM_SIZE_W,
             FORM_SIZE_H,
             NULL,
             NULL,
             hInst,
             NULL);

ShowWindow(hWndTtl, nCmdShow);
UpdateWindow(hWndTtl);
::Sleep( 2000 );

hWndMain = CreateWindowEx(WS_EX_APPWINDOW,
             szWindowClass,
             wsTitle.c_str(),
             WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX,
             x, y,
             FORM_SIZE_W,
             FORM_SIZE_H,
             NULL,
             NULL,
             hInst,
             NULL);

ShowWindow(hWndMain, nCmdShow);
ShowWindow(hWndTitle, SW_HIDE);   ←これが動いていない?
UpdateWindow(hWndMain);

どなたかこれだけで原因がわかる方いらっしゃいますでしょうか?
ちなみに、そのユーザの端末にはデーモン系の仮想アプリ等が多数入っているようで、それが原因ではないかとも思っています。

以上、よろしくお願いします。
引用返信 編集キー/
■33819 / inTopicNo.2)  Re[1]: ShowWindowで非表示にならない
□投稿者/ とっちゃん (383回)-(2009/03/10(Tue) 17:42:23)
とっちゃん さんの Web サイト
No33817 (貴子 さん) に返信

> どなたかこれだけで原因がわかる方いらっしゃいますでしょうか?
> ちなみに、そのユーザの端末にはデーモン系の仮想アプリ等が多数入っているようで、それが原因ではないかとも思っています。

これが全ソースではありませんよね?
メッセージループは回ってますか?
わからなかったら GetMessage とか PeekMessage とかその辺ちゃんと調べて学んでください。

あとは、前半部分(最初のCreateWindowの後)に不明はウィンドウハンドルがいたりと、ビルドとおらなすぎ〜な
ソースなので正直不明...というのはありますが、
ありがちなのは、ウィンドウハンドルが間違ってるとかその類?

なにかで検索してたりすると違うのがヒットしたりというのはあります。
あとは、ウィンドウクラス名かな。。。TTLなんて如何にもな名前はお勧めできません。

命名規約はありませんが、確実にアプリケーションローカルとなるように、
"会社名::アプリ名::ウィンドウ名"
とするくらいにしたほうが安全ですよ。

引用返信 編集キー/
■33822 / inTopicNo.3)  Re[1]: ShowWindowで非表示にならない
□投稿者/ .SHO (736回)-(2009/03/10(Tue) 18:19:04)
No33817 (貴子 さん) に返信

タイトル画面って、メイン画面が表示されたもういらない画面なんですよね?
ShowWindow なんかで制御しないで DestroyWindow しちゃったらどうですか?
引用返信 編集キー/
■33827 / inTopicNo.4)  Re[2]: ShowWindowで非表示にならない
□投稿者/ 貴子 (2回)-(2009/03/10(Tue) 19:16:54)
No33822 (.SHO さん) に返信

お返事ありがとうございました。

> ShowWindow なんかで制御しないで DestroyWindow しちゃったらどうですか?

おかげさまで動くようになりました!
本当に助かりました。有難うございます。

ただ、何故非表示が効かなかったのかは気になるので、とっちゃんさんに頂いたアドバイスを元にメッセージループを調べてみようと思います。
ついでに命名規則の見直しも^^;

有難うございました!

解決済み
引用返信 編集キー/
■33828 / inTopicNo.5)  Re[3]: ShowWindowで非表示にならない
□投稿者/ .SHO (738回)-(2009/03/10(Tue) 19:26:52)
No33827 (貴子 さん) に返信

> ただ、何故非表示が効かなかったのかは気になるので・・・

hWndTitle より先に hWndMain を CreateWindowEx して
hWndTitle の CreateWindowEx の

> hWndTitle = CreateWindowEx(WS_EX_TOPMOST, 
>             _T("TTL"), 
>             wstrTitle.c_str(), 
>             WS_SYSMENU | WS_MINIMIZEBOX,
>             x, y,
>             FORM_SIZE_W,
>             FORM_SIZE_H,
>             NULL,

              ↑
        ココを、hWndMain にすると幸せになれるかも?

>             NULL,
>             hInst,
>             NULL);

まぁ、リソースの無駄なので、DestroyWindow しちゃった方が賢いですが。。。

解決済み
引用返信 編集キー/
■33855 / inTopicNo.6)  Re[4]: ShowWindowで非表示にならない
□投稿者/ 貴子 (3回)-(2009/03/11(Wed) 16:07:36)
No33828 (.SHO さん) に返信

お返事有難うございます^^

>>hWndTitle = CreateWindowEx(WS_EX_TOPMOST,
> >             _T("TTL"),
> >             wstrTitle.c_str(),
> >             WS_SYSMENU | WS_MINIMIZEBOX,
> >             x, y,
> >             FORM_SIZE_W,
> >             FORM_SIZE_H,
> >             NULL,
>
>               ↑
>         ココを、hWndMain にすると幸せになれるかも?
>
> >             NULL,
> >             hInst,
> >             NULL);

どうもそれで幸せになれそうです。
ユーザに状況を詳しく訊いた所こちらで確認できたのは、タイトル画面が開いている間に他のアプリ(メモ帳とか。)を開くと閉じなくなるようです。
これは制御がそっちに渡った事で、親ハンドルがいないタイトル画面は制御を失ってしまったと考えられますか?
もしそうであるなら.SHOさんが仰る通りだと思います。
ソースが手元に戻ってきたら試してみようと思います。

以上、ご報告までに。
解決済み
引用返信 編集キー/
■33856 / inTopicNo.7)  Re[5]: ShowWindowで非表示にならない
□投稿者/ .SHO (741回)-(2009/03/11(Wed) 16:41:46)
No33855 (貴子 さん) に返信

> これは制御がそっちに渡った事で、親ハンドルがいないタイトル画面は制御を失ってしまったと考えられますか?

う〜ん…
メッセージループとか RegisterClass とか、全ソースを見てないので
想像でしか答えられないけど、まぁそんな感じです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -