diff options
Diffstat (limited to 'source/tests/win32/01-window/03_sub_menu.cpp')
-rw-r--r-- | source/tests/win32/01-window/03_sub_menu.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/source/tests/win32/01-window/03_sub_menu.cpp b/source/tests/win32/01-window/03_sub_menu.cpp new file mode 100644 index 0000000..848c82e --- /dev/null +++ b/source/tests/win32/01-window/03_sub_menu.cpp @@ -0,0 +1,146 @@ +#include "config.h" +#if _run_app == _sub_menu + +#include <windows.h> +#include <GL/gl.h> +#include <GL/glu.h> + +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +void AddMenus(HWND); + +#define IDM_FILE_NEW 1 +#define IDM_FILE_IMPORT 2 + +#define IDM_IMPORT_MAIL 11 + +#define IDM_ASSET 20 + + +int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, + PWSTR lpCmdLine, int nCmdShow) { + + MSG msg; + WNDCLASSW wc = { 0 }; + wc.lpszClassName = L"Submenu"; + wc.hInstance = hInstance; + wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); + wc.lpfnWndProc = WndProc; + wc.hCursor = LoadCursor(0, IDC_ARROW); + + RegisterClassW(&wc); + CreateWindowW(wc.lpszClassName, L"The Incredible Asura", + WS_OVERLAPPEDWINDOW | WS_VISIBLE, + 100, 100, 350, 250, 0, 0, hInstance, 0); + + while (GetMessage(&msg, NULL, 0, 0)) { + + TranslateMessage(&msg); + DispatchMessage(&msg); + + ::Sleep(1); + } + + return (int)msg.wParam; +} +HDC hdc; +HGLRC glc; +static PAINTSTRUCT ps; +HBRUSH hBrush; +HBRUSH hOldBrush; +HPEN hPen; +HPEN hOldPen; +PIXELFORMATDESCRIPTOR pfd; +int pf; + +LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam) { + + switch (msg) { + + case WM_CREATE: + AddMenus(hwnd); + + hdc = GetDC(hwnd); + glc = wglCreateContext(hdc); + + memset(&pfd, 0, sizeof(pfd)); + pfd.nSize = sizeof(pfd); + pfd.nVersion = 1; + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + + pf = ChoosePixelFormat(hdc, &pfd); + SetPixelFormat(hdc, pf, &pfd); + DescribePixelFormat(hdc, pf, sizeof(PIXELFORMATDESCRIPTOR), &pfd); + ReleaseDC(hwnd, hdc); + glc = wglCreateContext(hdc); + wglMakeCurrent(hdc, glc); + + break; + + case WM_COMMAND: + + switch (LOWORD(wParam)) { + + case IDM_FILE_NEW: + MessageBoxW(NULL, L"New file selected", + L"Information", MB_OK); + break; + + case IDM_IMPORT_MAIL: + MessageBoxW(NULL, L"Import mail selected", + L"Information", MB_OK); + } + + break; + + case WM_DESTROY: + + PostQuitMessage(0); + break; + + case WM_PAINT: + + //hdc = BeginPaint(hwnd, &ps); + //hPen = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); + //hOldPen = (HPEN)SelectObject(hdc, hPen); + //hBrush = CreateSolidBrush(RGB(0, 0, 255)); + //hOldBrush = (HBRUSH)SelectObject(hdc, hBrush); + //Rectangle(hdc, 100, 100, 200, 170); + //EndPaint(hwnd, &ps); + hdc = GetDC(hwnd); + glc = wglCreateContext(hdc); + wglMakeCurrent(hdc, glc); + glClearColor(0.16, 0.16, 0.16, 1); + glClear(GL_COLOR_BUFFER_BIT); + glColor4f(0.219, 0.219, 0.219, 1); + glRectf(-0.5f, -0.5f, 0.5f, 0.5f); //ƾ + glFlush(); //ִOpenGLָбеָ + wglMakeCurrent(NULL, NULL); + BeginPaint(hwnd, &ps); EndPaint(hwnd, &ps); + break; + } + + return DefWindowProcW(hwnd, msg, wParam, lParam); +} + +void AddMenus(HWND hwnd) { + + HMENU hMenubar = CreateMenu(); + HMENU hMenu = CreateMenu(); + HMENU hSubMenu = CreatePopupMenu(); + HMENU asserMenu = CreateMenu(); + + AppendMenuW(hMenu, MF_STRING, IDM_FILE_NEW, L"&New"); + + AppendMenuW(asserMenu, MF_STRING, IDM_ASSET, L"Import &mail &assets"); + AppendMenuW(hSubMenu, MF_STRING | MF_POPUP, (UINT_PTR)asserMenu, L"Import &mail"); + AppendMenuW(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, L"&Import"); + + AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR)hMenu, L"&File"); + + SetMenu(hwnd, hMenubar); +} + +#endif // _run_app == _sub_menu
\ No newline at end of file |