f4fc996f5c59169fca538145e0b7c35012f67a4c
[cyclone68000.git] / PicoDrive / FrameWindow.cpp
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