提示コードの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; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。