Win32 - remembers window position

This commit is contained in:
adelikat 2008-11-09 16:44:41 +00:00
parent 91fa23fc5d
commit a5ea18c0c6
1 changed files with 16 additions and 8 deletions

View File

@ -110,6 +110,8 @@ WINCLASS *MainWindow=NULL;
HACCEL hAccel; HACCEL hAccel;
HINSTANCE hAppInst; HINSTANCE hAppInst;
RECT MainWindowRect; RECT MainWindowRect;
int WndX = 0;
int WndY = 0;
//=========================== view tools //=========================== view tools
TOOLSCLASS *ViewDisasm_ARM7 = NULL; TOOLSCLASS *ViewDisasm_ARM7 = NULL;
@ -288,7 +290,7 @@ void SetWindowClientSize(HWND hwnd, int cx, int cy) //found at: http://blogs.msd
*/ */
rcWindow.bottom += rcTemp.top; rcWindow.bottom += rcTemp.top;
} }
SetWindowPos(hwnd, NULL, 0, 0, rcWindow.right - rcWindow.left, SetWindowPos(hwnd, NULL, WndX, WndY, rcWindow.right - rcWindow.left,
rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER); rcWindow.bottom - rcWindow.top, SWP_NOMOVE | SWP_NOZORDER);
if (lpBackSurface!=NULL) if (lpBackSurface!=NULL)
@ -444,13 +446,13 @@ void ScaleScreen(HWND hwnd, float factor)
if ((GPU_rotation==0)||(GPU_rotation==180)) if ((GPU_rotation==0)||(GPU_rotation==180))
{ {
SetWindowPos(hwnd, NULL, 0, 0, widthTradeOff + DefaultWidth * factor, SetWindowPos(hwnd, NULL, WndX, WndY, widthTradeOff + DefaultWidth * factor,
heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER); heightTradeOff + DefaultHeight * factor, SWP_NOMOVE | SWP_NOZORDER);
} }
else else
if ((GPU_rotation==90)||(GPU_rotation==270)) if ((GPU_rotation==90)||(GPU_rotation==270))
{ {
SetWindowPos(hwnd, NULL, 0, 0, heightTradeOff + DefaultHeight * factor, SetWindowPos(hwnd, NULL, WndX, WndY, heightTradeOff + DefaultHeight * factor,
widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER); widthTradeOff + DefaultWidth * factor, SWP_NOMOVE | SWP_NOZORDER);
} }
} }
@ -1003,13 +1005,14 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
GPU_rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName); GPU_rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName); ForceRatio = GetPrivateProfileInt("Video","Window Force Ratio", 1, IniName);
FpsDisplay = GetPrivateProfileInt("Video","Display Fps", 0, IniName); FpsDisplay = GetPrivateProfileInt("Video","Display Fps", 0, IniName);
WndX = GetPrivateProfileInt("Video","WindowPosX", 0, IniName);
WndY = GetPrivateProfileInt("Video","WindowPosY", 0, IniName);
//sprintf(text, "%s", DESMUME_NAME_AND_VERSION); //sprintf(text, "%s", DESMUME_NAME_AND_VERSION);
MainWindow = new WINCLASS(CLASSNAME, hThisInstance); MainWindow = new WINCLASS(CLASSNAME, hThisInstance);
RECT clientRect = {0,0,256,384}; RECT clientRect = {0,0,256,384};
DWORD dwStyle = WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; DWORD dwStyle = WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
AdjustWindowRect(&clientRect,dwStyle,TRUE); AdjustWindowRect(&clientRect,dwStyle,TRUE);
if (!MainWindow->create(DESMUME_NAME_AND_VERSION, CW_USEDEFAULT, CW_USEDEFAULT, clientRect.right-clientRect.left,clientRect.bottom-clientRect.top, if (!MainWindow->create(DESMUME_NAME_AND_VERSION, WndX/*CW_USEDEFAULT*/, WndY/*CW_USEDEFAULT*/, clientRect.right-clientRect.left,clientRect.bottom-clientRect.top,
WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, WS_CAPTION| WS_SYSMENU | WS_SIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,
NULL)) NULL))
{ {
@ -1417,7 +1420,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
if (ForceRatio) if (ForceRatio)
ScallingScreen(hwnd, WMSZ_RIGHT, &fullSize); ScallingScreen(hwnd, WMSZ_RIGHT, &fullSize);
SetWindowPos(hwnd, NULL, 0, 0, fullSize.right - fullSize.left, SetWindowPos(hwnd, NULL, WndX, WndY, fullSize.right - fullSize.left,
fullSize.bottom - fullSize.top, SWP_NOMOVE | SWP_NOZORDER); fullSize.bottom - fullSize.top, SWP_NOMOVE | SWP_NOZORDER);
} }
else else
@ -1432,7 +1435,8 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
case WM_CLOSE: case WM_CLOSE:
{ {
NDS_Pause(); NDS_Pause();
//Save window size
WritePrivateProfileInt("Video","Window Size",windowSize,IniName); WritePrivateProfileInt("Video","Window Size",windowSize,IniName);
if (windowSize==0) if (windowSize==0)
{ {
@ -1440,6 +1444,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
WritePrivateProfileInt("Video","Window height",MainWindowRect.bottom-MainWindowRect.top+heightTradeOff,IniName); WritePrivateProfileInt("Video","Window height",MainWindowRect.bottom-MainWindowRect.top+heightTradeOff,IniName);
} }
//Save window position
WritePrivateProfileInt("Video", "WindowPosX", MainWindowRect.left, IniName);
WritePrivateProfileInt("Video", "WindowPosY", MainWindowRect.top, IniName);
if (runthread != INVALID_HANDLE_VALUE) if (runthread != INVALID_HANDLE_VALUE)
{ {
if (WaitForSingleObject(runthread,INFINITE) == WAIT_TIMEOUT) if (WaitForSingleObject(runthread,INFINITE) == WAIT_TIMEOUT)
@ -2195,7 +2203,7 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
RECT fullSize; RECT fullSize;
GetWindowRect(hwnd, &fullSize); GetWindowRect(hwnd, &fullSize);
ScallingScreen(hwnd, WMSZ_RIGHT, &fullSize); ScallingScreen(hwnd, WMSZ_RIGHT, &fullSize);
SetWindowPos(hwnd, NULL, 0, 0, fullSize.right - fullSize.left, SetWindowPos(hwnd, NULL, WndX, WndY, fullSize.right - fullSize.left,
fullSize.bottom - fullSize.top, SWP_NOMOVE | SWP_NOZORDER); fullSize.bottom - fullSize.top, SWP_NOMOVE | SWP_NOZORDER);
//ScaleScreen(hwnd, (fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight); //ScaleScreen(hwnd, (fullSize.bottom - fullSize.top - heightTradeOff) / DefaultHeight);
MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | MF_CHECKED); MainWindow->checkMenu(IDC_FORCERATIO, MF_BYCOMMAND | MF_CHECKED);