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