![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
Adobe Illustratorは起動時にポップアップウィンドウを表示してプラグインを読み込む処理をリアルタイムに見せていますが、それに似た処理をしたいと思っています。
WinMain関数でポップアップウィンドウを生成した後メインウィンドウを生成し、メインウィンドウのWM_CREATEの最後でポップアップウィンドウを消すため
ShowWindow(hhwnd, SW_HIDE); や
DestroyWindow(hhwnd); を入れました。
ですが、ポップアップウィンドウが消えてくれません。
ポップアップウィンドウは
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = sWndProc;
winc.cbClsExtra= winc.cbWndExtra = 0;
winc.hInstance = hInst;
winc.hIcon = NULL;
winc.hCursor = LoadCursor(NULL, IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("START");
HWND hhwnd = CreateWindowEx(
WS_EX_TOOLWINDOW,
"START", "",
WS_POPUP | WS_VISIBLE | WS_BORDER ,
0 , 0 , 1 , 1 , NULL , NULL ,
hInst , NULL
);
で生成し、ウィンドウプロシージャ内は
HDC hdc;
PAINTSTRUCT ps;
static RECT re;
int w = 600;
int h = 30;
switch (msg) {
case WM_CREATE:
MoveWindow(hWnd,
(GetSystemMetrics(SM_CXSCREEN)-w)/2,
(GetSystemMetrics(SM_CYSCREEN)-h)/2,
w, h, 1);
InvalidateRect(hWnd, NULL, 1);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
SetTextColor(hdc, RGB(0, 0, 0));
if (DrawText(hdc, str, -1, &re, DT_SINGLELINE | DT_CENTER | DT_VCENTER) == 0)
MessageBox(NULL, "err", "", NULL);
EndPaint(hWnd, &ps);
return 0;
case WM_SIZE:
GetClientRect(hWnd, &re);
break;
}
return DefWindowProc(hWnd, msg, wp, lp);
のようになっています。ポップアップウィンドウが消えないのはなぜでしょうか。。。
No.1ベストアンサー
- 回答日時:
★スプラッシュ画面を出したいの?
・スプラッシュ画面を CreateWindow() で試したことはありませんが WinMain() の
書き方とかがおかしいような気がします。
私なら次のようにします。
サンプル:
int WINAPI WinMain( … )
{
/* モードレスダイアログを作成 */
/* 時間の掛かる処理 */
/* モードレスダイアログを閉じる */
/* メインのウインドウを作成 */
/* メッセージループを構成 */
return 0;
}
その他:
・上記のようにモードレスダイアログをスプラッシュ画面として利用します。
サンプルではタスクトレイに常駐するタイプの非表示ウインドウや起動時に時間が
かかる場合のスプラッシュ・ウインドウの一般的な方法です。
WM_CREATE でモードレスダイアログを出す方法もあるでしょうね。
試していないけど。
・以上。ちなみにメインのプロシージャはありますよね?
回答ありがとうございます。
普通はダイアログでするんですね。独学なため変な方法でしてしまっていたようで^^;
メインのプロシージャはあります。その中のWM_CREATEで画像を並べるのに時間がかかるためこの処理を入れようと考えました。
No.4
- 回答日時:
消えないのはポップアップウィンドウでしたね。
。。;したのWM_CLOSEの処理を追加すればSendMessageやPostMessage
などでWM_CLOSEを送ることでそのWindowを破壊できます。
すみませんやっと原因が分かりました。
グローバルにしていたつもりのhhwndが、CreateWindowの戻り値を受け取るときにローカルになっていました。。
本当にご迷惑おかけして申し訳ありません。みなさまご回答どうもありがとうございましたm(__)m
No.3
- 回答日時:
>PostMessage( hhwnd, WM_CLOSE, 0, 0 );
>って感じで消えると思いますが ・・・
質問者のプロシージャはWM_CLOSEを処理していないので、
送っても無視されるでしょうね。。。
プロシージャのメッセージ処理をクローズと
デストロイに対して処理することで終了させます。
#WinMainでどのようなコードが書かれているか知りませんが。。。
case WM_DESTROY:
//DestroyWindowがコールされた場合Windowsに対し
//アプリケーションが終了することを通知する
PostQuitMessage( 0 );
break;
case WM_CLOSE:
//Windowの×ボタンなどが押された場合の処理
DestroyWindow( hWnd );
break;
No.2
- 回答日時:
hhwndに有効なハンドルが返ってきているんですよね
メインの WndProcの中でそのハンドルが見えているのであれば
PostMessage( hhwnd, WM_CLOSE, 0, 0 );
って感じで消えると思いますが ・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
他のアプリケーションの終了処理
-
VBA .Value=.Value ?
-
ラジオボタンの初期指定
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
EnumChildWindowsの使い方(VBA)
-
Alt+P,Alt+NをPostmessageで送...
-
名前を付けて保存のウィンドウ...
-
ゲームでは結局どっちが良いの?
-
ExcelVBAでAPIを使って外部ウイ...
-
Tera Termに他のアプリから文字...
-
[VBA] UserForm を Excel の W...
-
VBAでのタイトルバーの取得
-
他アプリの操作(メニューバー)
-
ウィンドウが閉じない
-
UWSCで特定のChromeのタブをア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
ゲームでは結局どっちが良いの?
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
VBA .Value=.Value ?
-
ラジオボタンの初期指定
-
作成したウインドウのサイズを...
-
Vba LongPtrについて教えてくだ...
-
Excelの上下を固定したい
-
他のアプリケーションの終了処理
-
【VB2008】 マウス操作の一時的...
-
「&HFFFF」「&H1A」とは?
-
VBで外部プログラムを位置のみ...
-
ExcelのBOOKが消えた!
-
Alt+P,Alt+NをPostmessageで送...
-
UWSCで特定のChromeのタブをア...
-
Console.WriteLine で表示されない
-
MFC ダイアログ上のID取得につ...
-
最大化と最小化ボタン
おすすめ情報