Win32APIを使っていても AllocConsole(); freopen("CONOUT$", "w", stdout); freopen("CONIN$", "r", stdin); コンソールも開きます また、次のようにいつものコンソールプロジェクトでウィンドウを作成することも可能です コンソールを選択します 次へ ・コンソールアプリケーション コンソールアプリケーションなので // ウィンドウズバージョン指定 #define _WIN32_WINNT 0x0500 #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <windows.h> #include <windowsx.h> #include <commctrl.h> #pragma comment(lib,"comctl32.lib") #pragma comment(lib,"winmm.lib") // コンソール画面隠蔽 //#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\"") この章以降はウィンドウを作成する部分よりも 全ソースコードは下から
|