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

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

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

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

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Q&A

解決済

1回答

1900閲覧

win32でコンソールウインドウを出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

Visual Studio

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

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

0グッド

0クリップ

投稿2020/09/01 11:57

提示コードのinclude部の↓のコードですがなぜこの関数を使ってもコンソールウインドウは表示されますがprintf(),std::coutを使ってもコンソールに表示されないのでしょうか?Visual studioのSUBSYSTEM::CONSLEを使うとこんどはアプリケーションの画面が表示されないため無理です。どうすればいいのでしょうか?

#include "io.h" #include "Fcntl.h" #include "stdio.h" #include "Windows.h" #include "glew/include/GL/glew.h" #include "gl/GL.h" #include <iostream> //コンソール画面を開く int _hConsole = 0; void CreateConsoleWindow() { AllocConsole(); _hConsole = _open_osfhandle((intptr_t)GetStdHandle(STD_OUTPUT_HANDLE),_O_TEXT); *stdout = *_fdopen(_hConsole,"w"); setvbuf(stdout,NULL,_IONBF,0); } //コンソールを閉じる void closeConsoleWindow() { _close(_hConsole); } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_CREATE: { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, //Flags PFD_TYPE_RGBA, // The kind of framebuffer. RGBA or palette. 32, // Colordepth of the framebuffer. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, // Number of bits for the depthbuffer 8, // Number of bits for the stencilbuffer 0, // Number of Aux buffers in the framebuffer. PFD_MAIN_PLANE, 0, 0, 0, 0 }; HDC ourWindowHandleToDeviceContext = GetDC(hWnd); int letWindowsChooseThisPixelFormat; letWindowsChooseThisPixelFormat = ChoosePixelFormat(ourWindowHandleToDeviceContext, &pfd); SetPixelFormat(ourWindowHandleToDeviceContext,letWindowsChooseThisPixelFormat, &pfd); HGLRC ourOpenGLRenderingContext = wglCreateContext(ourWindowHandleToDeviceContext); wglMakeCurrent (ourWindowHandleToDeviceContext, ourOpenGLRenderingContext); MessageBoxA(0,(char*)glGetString(GL_VERSION), "OPENGL VERSION",0); //wglMakeCurrent(ourWindowHandleToDeviceContext, NULL); Unnecessary; wglDeleteContext will make the context not current wglDeleteContext(ourOpenGLRenderingContext); PostQuitMessage(0); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } int WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd ) { CreateConsoleWindow(); std::cout<<"開始\n" <<std::endl; MSG msg = {0}; WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND); wc.lpszClassName = L"oglversionchecksample"; wc.style = CS_OWNDC; if( !RegisterClass(&wc) ) return 1; CreateWindowW(wc.lpszClassName,L"openglversioncheck",WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,640,480,0,0,hInstance,0); while( GetMessage( &msg, NULL, 0, 0 ) == TRUE ){ DispatchMessage( &msg ); printf("ddd\n"); //return 1; } //closeConsoleWindow(); return 0; }

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

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

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

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

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

guest

回答1

0

ベストアンサー

CreateConsole();関数の中をこのようにしたら実行できました。またprintf();でコンソールに文字を表示できましたので自己解決とします。

AllocConsole(); FILE* fp; freopen_s(&fp, "CONOUT$","w", stdout); freopen_s(&fp, "CONIN$", "r", stdin);

投稿2020/09/01 12:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問