several fixes for WIN32

better handle minimize/maximize
http://pulkomandy.tk/projects/GrafX2/ticket/102
This commit is contained in:
Thomas Bernard 2019-02-19 17:10:16 +01:00
parent 7d5f287737
commit 05175292a6
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
5 changed files with 45 additions and 13 deletions

View File

@ -25,6 +25,7 @@
#ifdef _MSC_VER
#include <stdio.h>
#define strdup _strdup
#if _MSC_VER < 1900
#define snprintf _snprintf
#endif

View File

@ -2488,9 +2488,9 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
{
char * current_dir;
Display_cursor();
GFX2_Log(GFX2_WARNING, "cannot chdir to \"%s\" !", directory_to_change_to);
GFX2_Log(GFX2_WARNING, "cannot chdir to \"%s\" !\n", directory_to_change_to);
current_dir = Get_current_directory(NULL, NULL, 0);
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"", current_dir);
GFX2_Log(GFX2_WARNING, "Current directory is \"%s\"\n", current_dir);
free(current_dir);
// restore Selector_filename
free(Selector->filename);

View File

@ -26,6 +26,9 @@
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#ifdef _MSC_VER
#define strdup _strdup
#endif
#include "global.h"
#include "pages.h"

View File

@ -212,9 +212,9 @@ char * Get_config_directory(const char * program_dir)
// On all the remaining targets except OSX, the executable is in ./bin
config_dir = strdup(program_dir);
#else
len = strlen(program_dir) + 4;
len = strlen(program_dir) + 2 + strlen(PATH_SEPARATOR) + 1;
config_dir = malloc(len);
snprintf(config_dir, len, "%s%s", program_dir, "../");
snprintf(config_dir, len, "%s%s", program_dir, ".." PATH_SEPARATOR);
#endif
filename = Filepath_append_to_dir(config_dir, CONFIG_FILENAME);

View File

@ -85,8 +85,8 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
switch(uMsg)
{
case WM_MOVE: // Gives the client area coordinates
GFX2_Log(GFX2_DEBUG, "WM_MOVE : (%d,%d)\n", LOWORD(lParam), HIWORD(lParam));
break;
GFX2_Log(GFX2_DEBUG, "WM_MOVE : (%hd,%hd)\n", (short)LOWORD(lParam), (short)HIWORD(lParam));
return 0;
case WM_GETMINMAXINFO: // size or position is about to change
{
RECT rect;
@ -115,10 +115,14 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
{
LPWINDOWPOS pos = (LPWINDOWPOS)lParam;
GFX2_Log(GFX2_DEBUG, "WM_WINDOWPOSCHANGED : (%d,%d) %dx%d flags=%04x after=%x\n", pos->x, pos->y, pos->cx, pos->cy, pos->flags, pos->hwndInsertAfter);
if (!Win32_Is_Fullscreen)
if (!Win32_Is_Fullscreen && !(pos->flags & SWP_NOMOVE) && !(pos->flags & SWP_NOACTIVATE))
{
Config.Window_pos_x = pos->x;
Config.Window_pos_y = pos->y;
// Windows NT "Minimizes" windows by sending them to (-32000,-32000)
if (!(pos->x == -32000 && pos->y == -32000))
{
Config.Window_pos_x = pos->x;
Config.Window_pos_y = pos->y;
}
}
}
break; // call DefWindowProc() in order to receive the WM_SIZE msg
@ -150,16 +154,26 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
case WM_CREATE:
break;
case WM_ACTIVATE:
GFX2_Log(GFX2_DEBUG, "WM_ACTIVATE : activated=%d minimized=%d Handle %08x\n", (int)LOWORD(wParam), (int)HIWORD(wParam), lParam);
break;
case WM_ACTIVATEAPP:
GFX2_Log(GFX2_DEBUG, "WM_ACTIVATEAPP : activate=%d thread %08x\n", (int)wParam, lParam);
break;
case WM_SHOWWINDOW: // window is about to be hidden or shown
GFX2_Log(GFX2_DEBUG, "WM_SHOWWINDOW : show=%d status=%d\n", (int)wParam, (int)lParam);
break;
case WM_SETFOCUS: // We gained keyboard focus
break;
case WM_KILLFOCUS: // We lost keyboard focus
break;
case WM_SIZE:
GFX2_Log(GFX2_DEBUG, "WM_SIZE : %dx%d\n", LOWORD(lParam), HIWORD(lParam));
Resize_width = LOWORD(lParam);
Resize_height = HIWORD(lParam);
break;
GFX2_Log(GFX2_DEBUG, "WM_SIZE : %dx%d type=%d\n", LOWORD(lParam), HIWORD(lParam), wParam);
if (wParam != SIZE_MINIMIZED)
{
Resize_width = LOWORD(lParam);
Resize_height = HIWORD(lParam);
}
return 0;
case WM_CLOSE:
Quit_is_required = 1;
user_feedback_required = 1;
@ -277,9 +291,18 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
case WM_KEYUP:
Release_control(wParam, Get_Key_modifiers());
return 0;
case WM_SYSCHAR: // Character key when ALT key is down
GFX2_Log(GFX2_DEBUG, "WM_SYSCHAR : '%c' (0x%02x) lParam=%08lx\n", wParam, wParam, lParam);
return 0;
case WM_CHAR:
Key_ANSI = Key_UNICODE = wParam;
return 0;
case WM_SYSDEADCHAR:
GFX2_Log(GFX2_DEBUG, "WM_SYSDEADCHAR : '%c' (0x%02x) lParam=%08lx\n", wParam, wParam, lParam);
return 0;
case WM_DEADCHAR:
GFX2_Log(GFX2_DEBUG, "WM_DEADCHAR : '%c' (0x%02x) lParam=%08lx\n", wParam, wParam, lParam);
return 0;
case WM_DROPFILES:
{
int file_count;
@ -353,6 +376,11 @@ static LRESULT CALLBACK Win32_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
case WM_NCMOUSELEAVE: // the cursor leaves the nonclient area of the window
break;
#endif /* WINVER >= 0x0500 */
#if(_WIN32_WINNT >= 0x0600)
case WM_DWMNCRENDERINGCHANGED:
GFX2_Log(GFX2_DEBUG, "WM_DWMNCRENDERINGCHANGED : enabled=%d\n", (int)wParam);
break;
#endif /* WINVER >= 0x0600 */
default:
GFX2_Log(GFX2_INFO, "Win32_WindowProc() unknown Message : 0x%04x wParam=%08x lParam=%08lx\n", uMsg, wParam, lParam);
}