Win32APIを使っていても デバック用に printfなどが使いたいということがあると思います そんなときは、プログラムの(WinMain関数の)冒頭に 次のような記述をします AllocConsole(); freopen("CONOUT$", "w", stdout); freopen("CONIN$", "r", stdin); コンソールも開きます scanf関数による入力なども受けつけます &ref(winconsole.GIF); ----------------------------------------------------------- また、次のようにいつものコンソールプロジェクトでウィンドウを作成することも可能です この場合問題となるのはインスタンスハンドルを どうやって取得するかという話ですが、対策はあります コンソールを選択します &ref(console.GIF); 次へ &ref(console2.GIF); ・コンソールアプリケーション ・空のプロジェクト を選びます &ref(console3.GIF); コンソールアプリケーションなので main関数からアプリケーションは開始します #include <tchar.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <windowsx.h> // コンソール画面隠蔽 //#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); int main(int argc,char* argv[]) { HINSTANCE hInstance = GetModuleHandle(NULL); // インスタンスハンドル取得 const TCHAR* WC_BASIC = _T("Basic"); // ウィンドウクラス名 /********************************************************/ /* ウィンドウクラスの定義と作成 */ /********************************************************/ // シンプルウィンドウクラス設定 WNDCLASSEX wcex ={sizeof(WNDCLASSEX), CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, WndProc, 0,0,hInstance, (HICON)LoadImage(NULL,MAKEINTRESOURCE(IDI_APPLICATION),IMAGE_ICON,0,0,LR_DEFAULTSIZE | LR_SHARED), (HCURSOR)LoadImage(NULL,MAKEINTRESOURCE(IDC_ARROW),IMAGE_CURSOR,0,0,LR_DEFAULTSIZE | LR_SHARED), (HBRUSH)GetStockObject(WHITE_BRUSH), NULL, WC_BASIC , NULL}; // シンプルウィンドウクラス作成 if(!RegisterClassEx(&wcex)) return -1; /********************************************************/ /* ウィンドウの作成 */ /********************************************************/ HWND hWnd = CreateWindowEx( 0, //拡張ウィンドウスタイル WC_BASIC, //ウィンドウクラス名 _T("タイトル"), //タイトルバーにこの名前が表示されます WS_OVERLAPPEDWINDOW, //ウィンドウスタイル CW_USEDEFAULT, //X座標 CW_USEDEFAULT, //Y座標 CW_USEDEFAULT, //幅 CW_USEDEFAULT, //高さ NULL, //親ウィンドウのハンドル、親を作るときはNULL NULL, //メニューハンドルorリソースID hInstance, //インスタンスハンドル NULL); // ウィンドウ作成失敗 if (hWnd == NULL) return -1; // ウィンドウを可視状態にする ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); /********************************************************/ /* メッセージループ */ /********************************************************/ MSG msg = {}; while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ TranslateMessage(&msg); DispatchMessage(&msg); } else{ // メッセージ処理をしてないとき } } return 0; } // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; } return (DefWindowProc(hWnd, msg, wParam, lParam)); } 肝心のインスタンスハンドルの取得は一行だけです HINSTANCE hInstance = GetModuleHandle(NULL); // インスタンスハンドル取得 あとウィンドウクラスの定義を短くまとめました 書き方が違うだけで代入しているものはまったく同じです プログラム冒頭の一行のコメントアウトをはずせば コンソールは隠蔽できます // コンソール画面隠蔽 #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") この章以降はウィンドウを作成する部分よりも ウィンドウプロシージャの部分がメインの処理となります ウィンドウ作成の部分はこの章のコードをコピペしてください #vote((^ω^)やったお[0],何これwww意味不すぎwww[0],。(`ω´#)。あぁん?最近、だらしねぇな[0])