| 1 | \r |
| 2 | // This file is part of the PicoDrive Megadrive Emulator\r |
| 3 | \r |
| 4 | // This code is licensed under the GNU General Public License version 2.0 and the MAME License.\r |
| 5 | // You can choose the license that has the most advantages for you.\r |
| 6 | \r |
| 7 | // SVN repository can be found at http://code.google.com/p/cyclone68000/\r |
| 8 | \r |
| 9 | #include "stdafx.h"\r |
| 10 | \r |
| 11 | HWND FrameWnd=NULL;\r |
| 12 | struct GXDisplayProperties GXDisp;\r |
| 13 | struct GXKeyList GXKey;\r |
| 14 | \r |
| 15 | // Window procedure for frame window\r |
| 16 | static LRESULT CALLBACK FrameProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)\r |
| 17 | {\r |
| 18 | switch (Msg)\r |
| 19 | {\r |
| 20 | case WM_COMMAND:\r |
| 21 | switch (LOWORD(wParam))\r |
| 22 | {\r |
| 23 | case IDOK: case IDCANCEL: SendMessage(hWnd,WM_CLOSE,0,0); break;\r |
| 24 | \r |
| 25 | case ID_LOADROM: FileLoadRom(); break;\r |
| 26 | case ID_OPTIONS_GRAB: DebugScreenGrab(); break;\r |
| 27 | case ID_OPTIONS_SAVE: FileState(0); break;\r |
| 28 | case ID_OPTIONS_LOAD: FileState(1); break;\r |
| 29 | }\r |
| 30 | return 0;\r |
| 31 | \r |
| 32 | case WM_KILLFOCUS: GXSuspend(); return 0;\r |
| 33 | case WM_SETFOCUS: GXResume(); return 0;\r |
| 34 | \r |
| 35 | case WM_CLOSE: PostQuitMessage(0); return 0;\r |
| 36 | \r |
| 37 | case WM_DESTROY:\r |
| 38 | GXCloseInput();\r |
| 39 | GXCloseDisplay();\r |
| 40 | FrameWnd=NULL; // Blank window handle\r |
| 41 | return 0;\r |
| 42 | }\r |
| 43 | \r |
| 44 | return DefWindowProc(hWnd,Msg,wParam,lParam);\r |
| 45 | }\r |
| 46 | \r |
| 47 | static int GxInit()\r |
| 48 | {\r |
| 49 | GXOpenDisplay(FrameWnd,GX_FULLSCREEN);\r |
| 50 | GXOpenInput();\r |
| 51 | GXDisp=GXGetDisplayProperties();\r |
| 52 | GXKey=GXGetDefaultKeys(GX_NORMALKEYS);\r |
| 53 | \r |
| 54 | // The real layout of the 3800:\r |
| 55 | if (Main3800) { GXDisp.cbxPitch=-640; GXDisp.cbyPitch=2; }\r |
| 56 | \r |
| 57 | return 0;\r |
| 58 | }\r |
| 59 | \r |
| 60 | int FrameInit()\r |
| 61 | {\r |
| 62 | WNDCLASS wc;\r |
| 63 | SHMENUBARINFO mbi;\r |
| 64 | TCHAR title[128]={0};\r |
| 65 | RECT rect={0,0,0,0};\r |
| 66 | \r |
| 67 | memset(&wc,0,sizeof(wc));\r |
| 68 | memset(&mbi,0,sizeof(mbi));\r |
| 69 | \r |
| 70 | // Register the Frame window class\r |
| 71 | wc.lpfnWndProc=FrameProc;\r |
| 72 | wc.hInstance=GetModuleHandle(NULL);\r |
| 73 | wc.lpszClassName=APP_TITLE;\r |
| 74 | wc.hbrBackground=(HBRUSH)CreateSolidBrush(0x404040);\r |
| 75 | RegisterClass(&wc);\r |
| 76 | \r |
| 77 | FrameWnd=CreateWindowEx(WS_EX_CAPTIONOKBTN,APP_TITLE,APP_TITLE,WS_VISIBLE,\r |
| 78 | CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,\r |
| 79 | NULL,NULL,wc.hInstance,NULL);\r |
| 80 | \r |
| 81 | wsprintf(title,APP_TITLE L" v%x.%.3x",PicoVer>>12,PicoVer&0xfff);\r |
| 82 | SetWindowText(FrameWnd,title);\r |
| 83 | \r |
| 84 | // Show SIP\r |
| 85 | mbi.cbSize=sizeof(mbi);\r |
| 86 | mbi.hwndParent=FrameWnd;\r |
| 87 | mbi.nToolBarId=IDR_MENUBAR1;\r |
| 88 | mbi.hInstRes=wc.hInstance;\r |
| 89 | SHCreateMenuBar(&mbi);\r |
| 90 | \r |
| 91 | // Resize Frame to avoid the SIP\r |
| 92 | GetWindowRect(FrameWnd,&rect);\r |
| 93 | MoveWindow(FrameWnd, rect.left,rect.top, rect.right-rect.left,rect.bottom-rect.top-26, 1);\r |
| 94 | \r |
| 95 | GxInit();\r |
| 96 | \r |
| 97 | FileLoadRom();\r |
| 98 | return 0;\r |
| 99 | }\r |