【C/C++/WINAPI】 (GUI画面)ウィンドウ表示するための最小コード
僕がいつもVC++2010で使ってる、C++/WINAPIでの真っ白なウィンドウを表示する
GUIの最小コードです。
マウス入力、キーボード入力、WM_PAINT処理も付いてます
dprintf関数を使ってデバッグウィンドウに文字列出力も可能。
#include <windows.h> #include <stdio.h> //デバッグ出力用関数。printf()のフォーマットで使える。 #define dprintf( str, ... ) \ { \ TCHAR c[2560]; \ _stprintf( c, str, __VA_ARGS__ ); \ OutputDebugString( c ); \ } HWND hwnd; HINSTANCE hInstance; LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp){ static HDC hdc; static PAINTSTRUCT ps; switch(msg){ case WM_KEYDOWN:{ switch(wp){ case 'A':{ break; } } return 0; } case WM_LBUTTONDOWN:{ int x = (lp & 0xFFFF); int y = ((lp >> 16) & 0xFFFF); return 0; } case WM_MOUSEMOVE:{ int x = (lp & 0xFFFF); int y = ((lp >> 16) & 0xFFFF); return 0; } case WM_LBUTTONUP:{ int x = (lp & 0xFFFF); int y = ((lp >> 16) & 0xFFFF); return 0; } case WM_PAINT: { hdc = BeginPaint(hwnd , &ps); // /* SetDIBitsToDevice( hdc , 0 , 0 , srcBit_Info.bmiHeader.biWidth , srcBit_Info.bmiHeader.biHeight , 0 , 0 , 0 , srcBit_Info.bmiHeader.biHeight , drawPixelBits , &srcBit_Info , DIB_PAL_COLORS); */ EndPaint(hwnd , &ps); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } case WM_CREATE: { return 0; } } return DefWindowProc(hwnd, msg, wp, lp); } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX wc; // 定義用の構造体 LPTSTR pClassName = TEXT("MWIN"); // クラス名 hInstance = hInst; wc.cbSize = sizeof(WNDCLASSEX); // 構造体サイズ wc.style = CS_HREDRAW | CS_VREDRAW; // クラススタイル wc.lpfnWndProc = (WNDPROC)WndProc; // プロシージャ wc.cbClsExtra = 0; // 補足メモリブロック wc.cbWndExtra = 0; // のサイズ wc.hInstance = hInst; // インスタンス wc.hIcon = NULL; // アイコン wc.hCursor = LoadCursor(NULL,IDC_ARROW); // カーソル wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); // 背景色 wc.lpszMenuName = NULL; // メニュー wc.lpszClassName = pClassName; // クラス名 wc.hIconSm = NULL; // 小さいアイコン if (!RegisterClassEx(&wc)){ MessageBox(NULL,TEXT("RegisterClass Error."),TEXT(""),MB_OK|MB_ICONWARNING); return -1; } hwnd = CreateWindow(pClassName, TEXT("タイトル"), WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL , NULL ,hInst , NULL); if(!hwnd){ MessageBox(NULL,TEXT("CreateWindow Error."),TEXT(""),MB_OK|MB_ICONWARNING); return -1; } ShowWindow(hwnd, SW_SHOW); MSG msg; while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; }