質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

6039閲覧

ウィンドウを複数作ろうとしたが実行すると一瞬でウィンドウが消えてしまう

TRON1216.

総合スコア37

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/05/26 11:40

プログラミング始めたての初心者です。ウィンドウを二つ画面に表示させることができたので、次は3つのウィンドウを表示させようとしました。ビルドは成功しましたが、実行するとウィンドウが一瞬しか表示されません。どうしてか分かる方いますでしょうか?WindowsでVisual Studio C++で書いています。
kobayashi.hが以下になります。

#include <stdio.h> #include <windows.h> #include <windowsx.h> // Button_SetCheck(hCHECK_SATURATION, BST_UNCHECKED)などを使うために必要 #include "resource.h" BOOL CALLBACK MyDlgProc( HWND, UINT, WPARAM, LPARAM ); // ダイアログウィンドウのコールバック関数 LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ); // プロット用ウィンドウのコールバック関数 LRESULT CALLBACK WndProc2( HWND, UINT, WPARAM, LPARAM ); LRESULT CALLBACK WndProc3( HWND, UINT, WPARAM, LPARAM ); ATOM InitApp( HINSTANCE ); // プロット用ウィンドウクラスを登録する関数 ATOM InitApp2( HINSTANCE ); ATOM InitApp3( HINSTANCE ); BOOL InitInstance( HINSTANCE, int ); // プロット用ウィンドウを作成する関数 BOOL InitInstance2( HINSTANCE, int ); BOOL InitInstance3( HINSTANCE, int );

kobayashi.cppが以下になります。

#include "kobayashi.h" #define _USE_MATH_DEFINES #include <math.h> char szClassName[] = "image"; // 全体表示用ウィンドウクラスの名 char szClassName2[] = "image2"; char szClassName3[] = "image3"; HWND hWnd; // 全体表示用ウィンドウのハンドル HWND hWnd2; HWND hWnd3; HWND hDlg; // モードレスダイアログボックスのハンドル int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow ) { MSG msg; BOOL bRet; RECT rect; // ダイアログボックスの作成 hDlg = CreateDialog(hCurInst, "MYDLG", HWND_DESKTOP, (DLGPROC)MyDlgProc); ShowWindow(hDlg, nCmdShow); UpdateWindow(hDlg); // プロット用ウィンドウクラスを登録し作成する if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; if (!InitApp2(hCurInst)) return FALSE; if (!InitInstance2(hCurInst, nCmdShow)) return FALSE; if (!InitApp3(hCurInst)) return FALSE; if (!InitInstance3(hCurInst, nCmdShow)) return FALSE; // xs, xeの初期値としてウィンドウの両端を入力する GetClientRect( hWnd, &rect ); // ウィンドウの描画領域を得る xs = (int)rect.left; // マウス設定は画面の左端と xe = (int)rect.right; // 右端を初期値とする。 while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { MessageBox(NULL, "GetMeseeageエラー", "Error", MB_OK); break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } // プロット用ウィンドウクラスの登録 ATOM InitApp( HINSTANCE hInst ) { WNDCLASSEX wc; //新しく作る画像用ウインドウクラス wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; //このクラスの持つウインドプロシージャ wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName= (LPCSTR)szClassName; //このクラスの名前 wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } ATOM InitApp2( HINSTANCE hInst2 ) { WNDCLASSEX wc; //新しく作る画像用ウインドウクラス wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc2; //このクラスの持つウインドプロシージャ wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst2; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground= (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName= (LPCSTR)szClassName2; //このクラスの名前 wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } ATOM InitApp3( HINSTANCE hInst3 ) { WNDCLASSEX wc; //新しく作る画像用ウインドウクラス wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc3; //このクラスの持つウインドプロシージャ wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst3; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground= (HBRUSH)GetStockObject(BLACK_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName= (LPCSTR)szClassName3; //このクラスの名前 wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } // プロットウィンドウの作成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { // プロット用ウィンドウの作成 hWnd = CreateWindow(szClassName, // クラスの名前 "kobayashi ryo", // タイトルバーに表示される WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, //x座標 CW_USEDEFAULT, //y座標 600, //幅 400, //高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを作るときはNULL hInst, // インスタンスハンドル NULL ); if(!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // プロットウィンドウの作成 BOOL InitInstance2(HINSTANCE hInst2, int nCmdShow) { // プロット用ウィンドウの作成 hWnd2 = CreateWindow(szClassName2, // クラスの名前 "MOON", // タイトルバーに表示される WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, //x座標 CW_USEDEFAULT, //y座標 488, //幅 366, //高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを作るときはNULL hInst2, // インスタンスハンドル NULL ); if(!hWnd2) return FALSE; ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd2); return TRUE; } BOOL InitInstance3(HINSTANCE hInst3, int nCmdShow) { // プロット用ウィンドウの作成 hWnd2 = CreateWindow(szClassName3, // クラスの名前 "xyz", // タイトルバーに表示される WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, //x座標 CW_USEDEFAULT, //y座標 488, //幅 366, //高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを作るときはNULL hInst3, // インスタンスハンドル NULL ); if(!hWnd3) return FALSE; ShowWindow(hWnd3, nCmdShow); UpdateWindow(hWnd3); return TRUE; }

3つ目のウィンドウを表示するためのウィンドウプロシージャ(kobayashi_WndProc3)が以下になります。

#include "kobayashi.h" LRESULT CALLBACK WndProc3( HWND hWnd3, UINT msg, WPARAM wp, LPARAM lp ) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd3, msg, wp, lp)); } return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ウィンドウのハンドルを3ではなく2と書き間違えていました。

BOOL InitInstance3(HINSTANCE hInst3, int nCmdShow) { // プロット用ウィンドウの作成 hWnd3 = CreateWindow(szClassName3, // クラスの名前 "xyz", // タイトルバーに表示される WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT, //x座標 CW_USEDEFAULT, //y座標 488, //幅 366, //高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを作るときはNULL hInst3, // インスタンスハンドル NULL ); if(!hWnd3) return FALSE; ShowWindow(hWnd3, nCmdShow); UpdateWindow(hWnd3); return TRUE; }

投稿2017/05/26 11:50

TRON1216.

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問