📄 agg_platform_support.cpp
字号:
if(app->m_ctrls.on_mouse_button_up(app->m_specific->m_cur_x,
app->m_specific->m_cur_y))
{
app->on_ctrl_change();
app->force_redraw();
}
app->on_mouse_button_up(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_input_flags);
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_RBUTTONDOWN:
::SetCapture(app->m_specific->m_hwnd);
app->m_specific->m_cur_x = int16(LOWORD(lParam));
if(app->flip_y())
{
app->m_specific->m_cur_y = app->rbuf_window().height() - int16(HIWORD(lParam));
}
else
{
app->m_specific->m_cur_y = int16(HIWORD(lParam));
}
app->m_specific->m_input_flags = mouse_right | get_key_flags(wParam);
app->on_mouse_button_down(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_input_flags);
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_RBUTTONUP:
::ReleaseCapture();
app->m_specific->m_cur_x = int16(LOWORD(lParam));
if(app->flip_y())
{
app->m_specific->m_cur_y = app->rbuf_window().height() - int16(HIWORD(lParam));
}
else
{
app->m_specific->m_cur_y = int16(HIWORD(lParam));
}
app->m_specific->m_input_flags = mouse_right | get_key_flags(wParam);
app->on_mouse_button_up(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_input_flags);
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_MOUSEMOVE:
app->m_specific->m_cur_x = int16(LOWORD(lParam));
if(app->flip_y())
{
app->m_specific->m_cur_y = app->rbuf_window().height() - int16(HIWORD(lParam));
}
else
{
app->m_specific->m_cur_y = int16(HIWORD(lParam));
}
app->m_specific->m_input_flags = get_key_flags(wParam);
if(app->m_ctrls.on_mouse_move(
app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
(app->m_specific->m_input_flags & mouse_left) != 0))
{
app->on_ctrl_change();
app->force_redraw();
}
else
{
if(!app->m_ctrls.in_rect(app->m_specific->m_cur_x,
app->m_specific->m_cur_y))
{
app->on_mouse_move(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_input_flags);
}
}
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
app->m_specific->m_last_translated_key = 0;
switch(wParam)
{
case VK_CONTROL:
app->m_specific->m_input_flags |= kbd_ctrl;
break;
case VK_SHIFT:
app->m_specific->m_input_flags |= kbd_shift;
break;
default:
app->m_specific->translate(wParam);
break;
}
if(app->m_specific->m_last_translated_key)
{
bool left = false;
bool up = false;
bool right = false;
bool down = false;
switch(app->m_specific->m_last_translated_key)
{
case key_left:
left = true;
break;
case key_up:
up = true;
break;
case key_right:
right = true;
break;
case key_down:
down = true;
break;
case key_f2:
app->copy_window_to_img(agg::platform_support::max_images - 1);
app->save_img(agg::platform_support::max_images - 1, "screenshot");
break;
}
if(app->window_flags() & window_process_all_keys)
{
app->on_key(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_last_translated_key,
app->m_specific->m_input_flags);
}
else
{
if(app->m_ctrls.on_arrow_keys(left, right, down, up))
{
app->on_ctrl_change();
app->force_redraw();
}
else
{
app->on_key(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
app->m_specific->m_last_translated_key,
app->m_specific->m_input_flags);
}
}
}
/*
if(!app->wait_mode())
{
app->on_idle();
}
*/
break;
//--------------------------------------------------------------------
case WM_SYSKEYUP:
case WM_KEYUP:
app->m_specific->m_last_translated_key = 0;
switch(wParam)
{
case VK_CONTROL:
app->m_specific->m_input_flags &= ~kbd_ctrl;
break;
case VK_SHIFT:
app->m_specific->m_input_flags &= ~kbd_shift;
break;
}
break;
//--------------------------------------------------------------------
case WM_CHAR:
case WM_SYSCHAR:
if(app->m_specific->m_last_translated_key == 0)
{
app->on_key(app->m_specific->m_cur_x,
app->m_specific->m_cur_y,
wParam,
app->m_specific->m_input_flags);
}
break;
//--------------------------------------------------------------------
case WM_PAINT:
paintDC = ::BeginPaint(hWnd, &ps);
app->m_specific->m_current_dc = paintDC;
if(app->m_specific->m_redraw_flag)
{
app->on_draw();
app->m_specific->m_redraw_flag = false;
}
app->m_specific->display_pmap(paintDC, &app->rbuf_window());
app->on_post_draw(paintDC);
app->m_specific->m_current_dc = 0;
::EndPaint(hWnd, &ps);
break;
//--------------------------------------------------------------------
case WM_COMMAND:
break;
//--------------------------------------------------------------------
case WM_DESTROY:
::PostQuitMessage(0);
break;
//--------------------------------------------------------------------
default:
ret = ::DefWindowProc(hWnd, msg, wParam, lParam);
break;
}
app->m_specific->m_current_dc = 0;
::ReleaseDC(app->m_specific->m_hwnd, dc);
return ret;
}
//------------------------------------------------------------------------
void platform_support::message(const char* msg)
{
//yzx ::MessageBox(m_specific->m_hwnd, msg, L"AGG Message", MB_OK);
::MessageBox(m_specific->m_hwnd,L"bspline", L"AGG Message", MB_OK);
}
//------------------------------------------------------------------------
bool platform_support::init(unsigned width, unsigned height, unsigned flags)
{
if(m_specific->m_sys_format == pix_format_undefined)
{
return false;
}
m_window_flags = flags;
int wflags = CS_VREDRAW | CS_HREDRAW;//CS_OWNDC
WNDCLASS wc;
wc.lpszClassName = L"AGGAppClass";
wc.lpfnWndProc = window_proc;
wc.style = wflags;
wc.hInstance = g_windows_instance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(0, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = (LPTSTR)NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
::RegisterClass(&wc);
DWORD dwError = GetLastError();
wflags = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX;
if(m_window_flags & window_resize)
{
wflags |= WS_THICKFRAME | WS_MAXIMIZEBOX;
}
m_specific->m_hwnd = ::CreateWindow(L"AGGAppClass",
L"bspline_test",
wflags,
100,
100,
width,
height,
0,
0,
g_windows_instance,
0);
if(m_specific->m_hwnd == 0)
{
return false;
}
RECT rct;
::GetClientRect(m_specific->m_hwnd, &rct);
::MoveWindow(m_specific->m_hwnd, // handle to window
100, // horizontal position
100, // vertical position
width + (width - (rct.right - rct.left)),
height + (height - (rct.bottom - rct.top)),
FALSE);
::SetWindowLong(m_specific->m_hwnd, GWL_USERDATA, (LONG)this);
m_specific->create_pmap(width, height, &m_rbuf_window);
m_initial_width = width;
m_initial_height = height;
on_init();
m_specific->m_redraw_flag = true;
::ShowWindow(m_specific->m_hwnd, g_windows_cmd_show);
return true;
}
//------------------------------------------------------------------------
int platform_support::run()
{
MSG msg;
for(;;)
{
if(m_wait_mode)
{
if(!::GetMessage(&msg, 0, 0, 0))
{
break;
}
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
else
{
if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
if(msg.message == WM_QUIT)
{
break;
}
::DispatchMessage(&msg);
}
else
{
on_idle();
}
}
}
return (int)msg.wParam;
}
//------------------------------------------------------------------------
const char* platform_support::img_ext() const { return ".bmp"; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -