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