mirror of
https://github.com/reactos/reactos.git
synced 2025-05-10 12:23:25 +00:00
[MSPAINT] Improve CMiniatureWindow (#5337)
- Save the position and size of the miniature window. - Improve drawing of the miniature window. - Sync with the canvas. CORE-18867
This commit is contained in:
parent
113656563a
commit
bfd42c67a1
9 changed files with 86 additions and 34 deletions
|
@ -17,6 +17,8 @@ void ImageModel::NotifyImageChanged()
|
||||||
{
|
{
|
||||||
if (canvasWindow.IsWindow())
|
if (canvasWindow.IsWindow())
|
||||||
canvasWindow.Invalidate(FALSE);
|
canvasWindow.Invalidate(FALSE);
|
||||||
|
if (miniature.IsWindow())
|
||||||
|
miniature.Invalidate(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageModel::ImageModel()
|
ImageModel::ImageModel()
|
||||||
|
@ -264,7 +266,7 @@ void ImageModel::DeleteSelection()
|
||||||
NotifyImageChanged();
|
NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImageModel::Bound(POINT& pt)
|
void ImageModel::Bound(POINT& pt) const
|
||||||
{
|
{
|
||||||
pt.x = max(0, min(pt.x, GetWidth()));
|
pt.x = max(0, min(pt.x, GetWidth()));
|
||||||
pt.y = max(0, min(pt.y, GetHeight()));
|
pt.y = max(0, min(pt.y, GetHeight()));
|
||||||
|
|
|
@ -36,7 +36,8 @@ public:
|
||||||
void FlipVertically();
|
void FlipVertically();
|
||||||
void RotateNTimes90Degrees(int iN);
|
void RotateNTimes90Degrees(int iN);
|
||||||
void DeleteSelection();
|
void DeleteSelection();
|
||||||
void Bound(POINT& pt);
|
void Bound(POINT& pt) const;
|
||||||
|
void NotifyImageChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
HDC hDrawingDC; // The device context for this class
|
HDC hDrawingDC; // The device context for this class
|
||||||
|
@ -44,6 +45,4 @@ protected:
|
||||||
int undoSteps; // The undo-able count
|
int undoSteps; // The undo-able count
|
||||||
int redoSteps; // The redo-able count
|
int redoSteps; // The redo-able count
|
||||||
HBITMAP hBms[HISTORYSIZE]; // A rotation buffer of HBITMAPs
|
HBITMAP hBms[HISTORYSIZE]; // A rotation buffer of HBITMAPs
|
||||||
|
|
||||||
void NotifyImageChanged();
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
* PURPOSE: Window procedure of the main window and all children apart from
|
* PURPOSE: Window procedure of the main window and all children apart from
|
||||||
* hPalWin, hToolSettings and hSelection
|
* hPalWin, hToolSettings and hSelection
|
||||||
* PROGRAMMERS: Benedikt Freisen
|
* PROGRAMMERS: Benedikt Freisen
|
||||||
|
* Katayama Hirofumi MZ
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
@ -32,6 +33,30 @@ HWND CMiniatureWindow::DoCreate(HWND hwndParent)
|
||||||
return Create(hwndParent, rc, strTitle, style, WS_EX_PALETTEWINDOW);
|
return Create(hwndParent, rc, strTitle, style, WS_EX_PALETTEWINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT CMiniatureWindow::OnMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
if (IsWindowVisible() && !IsIconic() && !IsZoomed())
|
||||||
|
{
|
||||||
|
CRect rc;
|
||||||
|
GetWindowRect(&rc);
|
||||||
|
registrySettings.ThumbXPos = rc.left;
|
||||||
|
registrySettings.ThumbYPos = rc.top;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CMiniatureWindow::OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
if (IsWindowVisible() && !IsIconic() && !IsZoomed())
|
||||||
|
{
|
||||||
|
CRect rc;
|
||||||
|
GetWindowRect(&rc);
|
||||||
|
registrySettings.ThumbWidth = rc.Width();
|
||||||
|
registrySettings.ThumbHeight = rc.Height();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CMiniatureWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
LRESULT CMiniatureWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
{
|
{
|
||||||
ShowWindow(SW_HIDE);
|
ShowWindow(SW_HIDE);
|
||||||
|
@ -39,16 +64,45 @@ LRESULT CMiniatureWindow::OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL&
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LRESULT CMiniatureWindow::OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
{
|
||||||
|
return TRUE; /* Avoid flickering */
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CMiniatureWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
LRESULT CMiniatureWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
{
|
{
|
||||||
RECT rc;
|
RECT rc;
|
||||||
GetClientRect(&rc);
|
GetClientRect(&rc);
|
||||||
|
|
||||||
|
// Start painting
|
||||||
PAINTSTRUCT ps;
|
PAINTSTRUCT ps;
|
||||||
HDC hDC = BeginPaint(&ps);
|
HDC hDC = BeginPaint(&ps);
|
||||||
StretchBlt(hDC, 0, 0, rc.right, rc.bottom,
|
if (!hDC)
|
||||||
imageModel.GetDC(), 0, 0, imageModel.GetWidth(), imageModel.GetHeight(),
|
return 0;
|
||||||
|
|
||||||
|
// Use a memory bitmap to reduce flickering
|
||||||
|
HDC hdcMem = ::CreateCompatibleDC(hDC);
|
||||||
|
HGDIOBJ hbmOld = ::SelectObject(hdcMem, ::CreateCompatibleBitmap(hDC, rc.right, rc.bottom));
|
||||||
|
|
||||||
|
// FIXME: Consider aspect ratio
|
||||||
|
|
||||||
|
// Fill the background
|
||||||
|
::FillRect(hdcMem, &rc, (HBRUSH)(COLOR_BTNFACE + 1));
|
||||||
|
|
||||||
|
// Draw the image (hdcMem <-- imageModel)
|
||||||
|
int cxImage = imageModel.GetWidth();
|
||||||
|
int cyImage = imageModel.GetHeight();
|
||||||
|
::StretchBlt(hdcMem, 0, 0, rc.right, rc.bottom,
|
||||||
|
imageModel.GetDC(), 0, 0, cxImage, cyImage,
|
||||||
SRCCOPY);
|
SRCCOPY);
|
||||||
|
|
||||||
|
// Move the image (hDC <-- hdcMem)
|
||||||
|
::BitBlt(hDC, 0, 0, rc.right, rc.bottom, hdcMem, 0, 0, SRCCOPY);
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
::DeleteObject(::SelectObject(hdcMem, hbmOld));
|
||||||
|
::DeleteDC(hdcMem);
|
||||||
|
|
||||||
EndPaint(&ps);
|
EndPaint(&ps);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,14 +16,20 @@ public:
|
||||||
COLOR_BTNFACE)
|
COLOR_BTNFACE)
|
||||||
|
|
||||||
BEGIN_MSG_MAP(CMiniatureWindow)
|
BEGIN_MSG_MAP(CMiniatureWindow)
|
||||||
|
MESSAGE_HANDLER(WM_MOVE, OnMove)
|
||||||
|
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
||||||
MESSAGE_HANDLER(WM_CLOSE, OnClose)
|
MESSAGE_HANDLER(WM_CLOSE, OnClose)
|
||||||
|
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
|
||||||
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
||||||
END_MSG_MAP()
|
END_MSG_MAP()
|
||||||
|
|
||||||
HWND DoCreate(HWND hwndParent);
|
HWND DoCreate(HWND hwndParent);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
LRESULT OnMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
|
LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
|
LRESULT OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
||||||
};
|
};
|
||||||
|
|
|
@ -78,11 +78,13 @@ void ToolBase::reset()
|
||||||
void ToolBase::OnCancelDraw()
|
void ToolBase::OnCancelDraw()
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolBase::OnFinishDraw()
|
void ToolBase::OnFinishDraw()
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolBase::beginEvent()
|
void ToolBase::beginEvent()
|
||||||
|
@ -151,15 +153,12 @@ struct FreeSelTool : ToolBase
|
||||||
selectionModel.ResetPtStack();
|
selectionModel.ResetPtStack();
|
||||||
selectionModel.m_bShow = FALSE;
|
selectionModel.m_bShow = FALSE;
|
||||||
}
|
}
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnFinishDraw() override
|
void OnFinishDraw() override
|
||||||
{
|
{
|
||||||
if (m_bLeftButton)
|
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
|
|
||||||
m_bLeftButton = FALSE;
|
m_bLeftButton = FALSE;
|
||||||
ToolBase::OnFinishDraw();
|
ToolBase::OnFinishDraw();
|
||||||
}
|
}
|
||||||
|
@ -214,15 +213,12 @@ struct RectSelTool : ToolBase
|
||||||
if (start.x == x && start.y == y)
|
if (start.x == x && start.y == y)
|
||||||
imageModel.Undo(TRUE);
|
imageModel.Undo(TRUE);
|
||||||
selectionModel.m_bShow = !selectionModel.m_rc.IsRectEmpty();
|
selectionModel.m_bShow = !selectionModel.m_rc.IsRectEmpty();
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnFinishDraw() override
|
void OnFinishDraw() override
|
||||||
{
|
{
|
||||||
if (m_bLeftButton)
|
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
|
|
||||||
m_bLeftButton = FALSE;
|
m_bLeftButton = FALSE;
|
||||||
ToolBase::OnFinishDraw();
|
ToolBase::OnFinishDraw();
|
||||||
}
|
}
|
||||||
|
@ -253,11 +249,13 @@ struct GenericDrawTool : ToolBase
|
||||||
void OnMouseMove(BOOL bLeftButton, LONG x, LONG y) override
|
void OnMouseMove(BOOL bLeftButton, LONG x, LONG y) override
|
||||||
{
|
{
|
||||||
draw(bLeftButton, x, y);
|
draw(bLeftButton, x, y);
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnButtonUp(BOOL bLeftButton, LONG x, LONG y) override
|
void OnButtonUp(BOOL bLeftButton, LONG x, LONG y) override
|
||||||
{
|
{
|
||||||
draw(bLeftButton, x, y);
|
draw(bLeftButton, x, y);
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCancelDraw() override
|
void OnCancelDraw() override
|
||||||
|
@ -574,6 +572,7 @@ struct BezierTool : ToolBase
|
||||||
pointSP++;
|
pointSP++;
|
||||||
if (pointSP == 4)
|
if (pointSP == 4)
|
||||||
pointSP = 0;
|
pointSP = 0;
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCancelDraw() override
|
void OnCancelDraw() override
|
||||||
|
@ -649,6 +648,7 @@ struct ShapeTool : ToolBase
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
draw(bLeftButton, x, y, bDoubleClick);
|
draw(bLeftButton, x, y, bDoubleClick);
|
||||||
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,7 @@ BOOL SelectionModel::TakeOff()
|
||||||
DrawBackgroundRect(hDCImage, paletteModel.GetBgColor());
|
DrawBackgroundRect(hDCImage, paletteModel.GetBgColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ void SelectionModel::FlipHorizontally()
|
||||||
}
|
}
|
||||||
::DeleteDC(hdcMem);
|
::DeleteDC(hdcMem);
|
||||||
|
|
||||||
NotifyRefreshNeeded();
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionModel::FlipVertically()
|
void SelectionModel::FlipVertically()
|
||||||
|
@ -251,7 +251,7 @@ void SelectionModel::FlipVertically()
|
||||||
}
|
}
|
||||||
::DeleteDC(hdcMem);
|
::DeleteDC(hdcMem);
|
||||||
|
|
||||||
NotifyRefreshNeeded();
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionModel::RotateNTimes90Degrees(int iN)
|
void SelectionModel::RotateNTimes90Degrees(int iN)
|
||||||
|
@ -303,7 +303,7 @@ void SelectionModel::RotateNTimes90Degrees(int iN)
|
||||||
}
|
}
|
||||||
|
|
||||||
::DeleteDC(hdcMem);
|
::DeleteDC(hdcMem);
|
||||||
NotifyRefreshNeeded();
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY)
|
void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY)
|
||||||
|
@ -346,7 +346,7 @@ void SelectionModel::StretchSkew(int nStretchPercentX, int nStretchPercentY, int
|
||||||
::DeleteDC(hDC);
|
::DeleteDC(hDC);
|
||||||
|
|
||||||
m_bShow = TRUE;
|
m_bShow = TRUE;
|
||||||
NotifyRefreshNeeded();
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
HBITMAP SelectionModel::GetBitmap()
|
HBITMAP SelectionModel::GetBitmap()
|
||||||
|
@ -417,11 +417,6 @@ void SelectionModel::Dragging(CANVAS_HITTEST hit, POINT pt)
|
||||||
m_ptHit = pt;
|
m_ptHit = pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectionModel::NotifyRefreshNeeded()
|
|
||||||
{
|
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SelectionModel::ClearMask()
|
void SelectionModel::ClearMask()
|
||||||
{
|
{
|
||||||
if (m_hbmMask)
|
if (m_hbmMask)
|
||||||
|
@ -450,5 +445,5 @@ void SelectionModel::CancelSelection()
|
||||||
imageModel.Undo(TRUE);
|
imageModel.Undo(TRUE);
|
||||||
|
|
||||||
m_bShow = FALSE;
|
m_bShow = FALSE;
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ public:
|
||||||
void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY);
|
void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY);
|
||||||
|
|
||||||
void CancelSelection();
|
void CancelSelection();
|
||||||
void NotifyRefreshNeeded();
|
|
||||||
void Dragging(CANVAS_HITTEST hit, POINT pt);
|
void Dragging(CANVAS_HITTEST hit, POINT pt);
|
||||||
void ClearMask();
|
void ClearMask();
|
||||||
void ClearColor();
|
void ClearColor();
|
||||||
|
|
|
@ -141,8 +141,7 @@ void ToolsModel::SetBackgroundTransparent(BOOL bTransparent)
|
||||||
{
|
{
|
||||||
m_transpBg = bTransparent;
|
m_transpBg = bTransparent;
|
||||||
NotifyToolSettingsChanged();
|
NotifyToolSettingsChanged();
|
||||||
if (canvasWindow.IsWindow())
|
imageModel.NotifyImageChanged();
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ToolsModel::GetZoom() const
|
int ToolsModel::GetZoom() const
|
||||||
|
|
|
@ -207,7 +207,7 @@ void CMainWindow::InsertSelectionFromHBITMAP(HBITMAP bitmap, HWND window)
|
||||||
imageModel.PushImageForUndo();
|
imageModel.PushImageForUndo();
|
||||||
selectionModel.InsertFromHBITMAP(bitmap, 0, 0);
|
selectionModel.InsertFromHBITMAP(bitmap, 0, 0);
|
||||||
selectionModel.m_bShow = TRUE;
|
selectionModel.m_bShow = TRUE;
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
LRESULT CMainWindow::OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
LRESULT CMainWindow::OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||||||
|
@ -510,7 +510,7 @@ LRESULT CMainWindow::OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
||||||
{
|
{
|
||||||
selectionModel.Landing();
|
selectionModel.Landing();
|
||||||
selectionModel.m_bShow = FALSE;
|
selectionModel.m_bShow = FALSE;
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -656,7 +656,6 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
imageModel.Undo();
|
imageModel.Undo();
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
break;
|
break;
|
||||||
case IDM_EDITREDO:
|
case IDM_EDITREDO:
|
||||||
if (toolsModel.GetActiveTool() == TOOL_TEXT && ::IsWindowVisible(textEditWindow))
|
if (toolsModel.GetActiveTool() == TOOL_TEXT && ::IsWindowVisible(textEditWindow))
|
||||||
|
@ -667,7 +666,6 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
imageModel.Redo();
|
imageModel.Redo();
|
||||||
canvasWindow.Invalidate(FALSE);
|
|
||||||
break;
|
break;
|
||||||
case IDM_EDITCOPY:
|
case IDM_EDITCOPY:
|
||||||
if (OpenClipboard())
|
if (OpenClipboard())
|
||||||
|
@ -763,7 +761,7 @@ LRESULT CMainWindow::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bH
|
||||||
case IDM_IMAGEDELETEIMAGE:
|
case IDM_IMAGEDELETEIMAGE:
|
||||||
imageModel.PushImageForUndo();
|
imageModel.PushImageForUndo();
|
||||||
Rect(imageModel.GetDC(), 0, 0, imageModel.GetWidth(), imageModel.GetHeight(), paletteModel.GetBgColor(), paletteModel.GetBgColor(), 0, TRUE);
|
Rect(imageModel.GetDC(), 0, 0, imageModel.GetWidth(), imageModel.GetHeight(), paletteModel.GetBgColor(), paletteModel.GetBgColor(), 0, TRUE);
|
||||||
canvasWindow.Invalidate(FALSE);
|
imageModel.NotifyImageChanged();
|
||||||
break;
|
break;
|
||||||
case IDM_IMAGEROTATEMIRROR:
|
case IDM_IMAGEROTATEMIRROR:
|
||||||
switch (mirrorRotateDialog.DoModal(mainWindow.m_hWnd))
|
switch (mirrorRotateDialog.DoModal(mainWindow.m_hWnd))
|
||||||
|
|
Loading…
Reference in a new issue