← Boilerplate Win32 Download

/*---------------------------------------------------------------------------------------------------------------------\ | An example of how to draw a naive Windows GUI window using C. | \---------------------------------------------------------------------------------------------------------------------*/ #include <windows.h> /*-----------------------------------------------------------------------------\ | Handle window event messages. | \-----------------------------------------------------------------------------*/ LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam){ switch(Message){ /* Create the window; start of the program. */ case WM_CREATE: { /* Menu bar. */ HMENU bar = CreateMenu(); /* "File" menu option. */ HMENU menu_file = CreateMenu(); AppendMenu(bar, MF_POPUP, (UINT_PTR)menu_file, "File"); AppendMenu(menu_file, MF_STRING, 0, "Exit"); /* "Edit" menu option. */ HMENU menu_edit = CreateMenu(); AppendMenu(bar, MF_POPUP, (UINT_PTR)menu_edit, "Edit"); AppendMenu(menu_edit, MF_STRING, 9000, "Undo"); AppendMenu(menu_edit, MF_STRING, 9001, "Redo"); /* "Tools" menu option. */ HMENU menu_tools = CreateMenu(); AppendMenu(bar, MF_POPUP, (UINT_PTR)menu_tools, "Tools"); AppendMenu(menu_tools, MF_STRING, 1000, "Connect"); AppendMenu(menu_tools, MF_STRING, 1001, "Host"); /* "About" menu option. */ HMENU menu_about = CreateMenu(); AppendMenu(bar, MF_STRING, (UINT_PTR)menu_about, "About"); /* Paint menu in window. */ SetMenu(hWnd, bar); break; } /* Destroy the window; end of the program. */ case WM_DESTROY: { PostQuitMessage(0); /* Unless the linker is configured (-mwindows in mingw) for GUI mode this is the best we can do to hide the console. */ ShowWindow(GetConsoleWindow(), SW_SHOWDEFAULT); break; } /* Handle commands sent to the window. */ case WM_COMMAND: { switch((unsigned int)LOWORD(wParam)){ case 0: { PostMessage(hWnd, WM_CLOSE, 0, 0); break; } case 1: { WSADATA wsa; if(WSAStartup(MAKEWORD(2,2),&wsa) != 0){ printf("Failed. Error Code : %d", ); MessageBox(NULL, WSAGetLastError(), "Error!", MB_ICONERROR|MB_OK); return 1; } } } } /* Other events. */ default: return DefWindowProc(hWnd, Message, wParam, lParam); } return 0; } /*-----------------------------------------------------------------------------\ | The 'main' function of Windows GUI programs. | \-----------------------------------------------------------------------------*/ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ /* Unless the linker is configured (-mwindows in mingw) for GUI mode this is the best we can do to hide the console. */ CloseWindow(GetConsoleWindow()); ShowWindow(GetConsoleWindow(), SW_HIDE); /* Set window properties. */ WNDCLASSEX wc = {}; wc.cbSize = sizeof(WNDCLASSEX); wc.lpfnWndProc = WndProc; /* This is where we will send messages to. */ wc.hInstance = hInstance; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = "WindowClass"; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon. */ wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon. */ /* Register window. */ if(!RegisterClassEx(&wc)){ MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONERROR|MB_OK); return 1; } /* Create window. */ HWND hWnd = CreateWindowEx( WS_EX_STATICEDGE, "WindowClass", "Boilerplate Win32 GUI Program", WS_VISIBLE|WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, /* x */ CW_USEDEFAULT, /* y */ 640, /* width */ 480, /* height */ NULL, NULL, hInstance, NULL ); if(hWnd == NULL){ MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONERROR|MB_OK); return 1; } /* Handle window messages. */ MSG msg; while(GetMessage(&msg, NULL, 0, 0) > 0){ TranslateMessage(&msg); DispatchMessage(&msg); } /* Done! */ return (int)msg.wParam; }