highgui: fix win32 backend behavior
authorAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sun, 4 Jul 2021 14:33:18 +0000 (17:33 +0300)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Sun, 4 Jul 2021 14:37:45 +0000 (17:37 +0300)
modules/highgui/src/window.cpp
modules/highgui/src/window_w32.cpp

index d1ccd1dbc3a93eb21790be2ab001b1028cb2922d..d9481de6da24c680112561a99eb5d51728da995d 100644 (file)
@@ -990,7 +990,7 @@ void cv::imshow( const String& winname, InputArray _img )
         auto backend = getCurrentUIBackend();
         if (backend)
         {
-            auto window = backend->createWindow(winname, WINDOW_NORMAL);
+            auto window = backend->createWindow(winname, WINDOW_AUTOSIZE);
             if (!window)
             {
                 CV_LOG_ERROR(NULL, "OpenCV/UI: Can't create window: '" << winname << "'");
index d9a9d732227a08506c726b86b865c1ac2ec8fad4..716af1094c29edcbf9b690654c92fc3a86e117d0 100644 (file)
@@ -2123,7 +2123,7 @@ static void showSaveDialog(CvWindow& window)
     SIZE sz;
     int channels;
     void* data;
-    if (icvGetBitmapData(window, sz, channels, data))
+    if (!icvGetBitmapData(window, sz, channels, data))
         return; // nothing to save
 
     char szFileName[MAX_PATH] = "";
@@ -2206,6 +2206,7 @@ static bool handleMessage(MSG& message, int& keyCode)
         switch (message.message)
         {
             case WM_DESTROY:
+                // fallthru
             case WM_CHAR:
                 DispatchMessage(&message);
                 keyCode = (int)message.wParam;
@@ -2221,6 +2222,20 @@ static bool handleMessage(MSG& message, int& keyCode)
                 break;
 
             case WM_KEYDOWN:
+                // Intercept Ctrl+C for copy to clipboard
+                if ('C' == message.wParam && (::GetKeyState(VK_CONTROL) >> 15))
+                {
+                    ::SendMessage(message.hwnd, WM_COPY, 0, 0);
+                    return false;
+                }
+
+                // Intercept Ctrl+S for "save as" dialog
+                if ('S' == message.wParam && (::GetKeyState(VK_CONTROL) >> 15))
+                {
+                    showSaveDialog(window);
+                    return false;
+                }
+
                 TranslateMessage(&message);
                 if ((message.wParam >= VK_F1 && message.wParam <= VK_F24)      ||
                     message.wParam == VK_HOME   || message.wParam == VK_END    ||
@@ -2235,13 +2250,7 @@ static bool handleMessage(MSG& message, int& keyCode)
                     return true;
                 }
 
-                // Intercept Ctrl+C for copy to clipboard
-                if ('C' == message.wParam && (::GetKeyState(VK_CONTROL) >> 15))
-                    ::SendMessage(message.hwnd, WM_COPY, 0, 0);
-
-                // Intercept Ctrl+S for "save as" dialog
-                if ('S' == message.wParam && (::GetKeyState(VK_CONTROL) >> 15))
-                    showSaveDialog(window);
+                // fallthru
 
             default:
                 DispatchMessage(&message);