📄 ptboard.cpp
字号:
#include "StdAfx.h"
#include <afx.h>
#include "PtBoard.h"
#include "CEPaint.h"
#include "PtBmpFun.h"
PtBoard_Proc_Ptr gPtBoard_Proc;
BOOLEAN g_mouse_flag = FALSE;
HDC g_board_buf_hdc = NULL;
HBITMAP g_board_buf_hbmp = NULL;
INT InitPtBoard()
{
TRACE(TEXT("InitPtBoard\n"));
gPtBoard_Proc = (PtBoard_Proc_Ptr)SetWindowLong(m_pt_app_info.m_pt_board_hwnd,GWL_WNDPROC,(LONG)PtBoard_Proc);
GetClientRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect);
m_pt_app_info.m_pt_draw_rect = m_pt_app_info.m_pt_board_rect;
PT_SET_SMALL(m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth);
PT_SET_SMALL(m_pt_app_info.m_pt_draw_rect.bottom,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight);
m_pt_app_info.m_pt_backup_hdc = NULL;
m_pt_app_info.m_pt_backup_hbmp = NULL;
m_pt_app_info.m_pt_board_flag = 0;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RESET;
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_INIT_BAKUP_DC;
if(m_pt_app_info.m_file_name[0])
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_LOADFILE;
m_pt_app_info.m_pt_zoom_size = 0;
m_pt_app_info.m_pt_bakup_pos.x = 0;
m_pt_app_info.m_pt_bakup_pos.y = 0;
m_pt_app_info.m_pt_backup_rect.left = 0;
m_pt_app_info.m_pt_backup_rect.top = 0;
m_pt_app_info.m_pt_backup_rect.right = m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth;
m_pt_app_info.m_pt_backup_rect.bottom = m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight;
return 0;
}
LRESULT CALLBACK PtBoard_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
//INT result = 0;
HRGN board_rgn;
INT mx,my;
switch(message)
{
case WM_SETFOCUS:
TRACE(TEXT("PtBoard WM_SETFOCUS\n"));
break;
case WM_KILLFOCUS:
TRACE(TEXT("PtBoard WM_KILLFOCUS\n"));
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
break;
case WM_LBUTTONDOWN:
TRACE(TEXT("PtBoard WM_LBUTTONDOWN\n"));
if(!g_mouse_flag)
{
TRACE(TEXT("PtBoard captrue start\n"));
SetCapture(m_pt_app_info.m_pt_board_hwnd);
g_mouse_flag = TRUE;
}
mx = LOWORD(lParam);
my = HIWORD(lParam);
mx >>= m_pt_app_info.m_pt_zoom_size;
mx += m_pt_app_info.m_pt_bakup_pos.x;
my >>= m_pt_app_info.m_pt_zoom_size;
my += m_pt_app_info.m_pt_bakup_pos.y;
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseDown(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);
//SetFocus(hWnd);
break;
case WM_MOUSEMOVE:
if(LOWORD(lParam) > m_pt_app_info.m_pt_draw_rect.right || HIWORD(lParam) > m_pt_app_info.m_pt_draw_rect.bottom)
{
if(g_mouse_flag)
{
TRACE(TEXT("PtBoard captrue out\n"));
ReleaseCapture();
g_mouse_flag = FALSE;
}
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_mouse_state = 0;
}
else
{
mx = LOWORD(lParam);
my = HIWORD(lParam);
mx >>= m_pt_app_info.m_pt_zoom_size;
mx += m_pt_app_info.m_pt_bakup_pos.x;
my >>= m_pt_app_info.m_pt_zoom_size;
my += m_pt_app_info.m_pt_bakup_pos.y;
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseMove(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);
}
break;
case WM_LBUTTONUP:
if(g_mouse_flag)
{
TRACE(TEXT("PtBoard captrue end\n"));
ReleaseCapture();
g_mouse_flag = FALSE;
}
mx = LOWORD(lParam);
my = HIWORD(lParam);
mx >>= m_pt_app_info.m_pt_zoom_size;
mx += m_pt_app_info.m_pt_bakup_pos.x;
my >>= m_pt_app_info.m_pt_zoom_size;
my += m_pt_app_info.m_pt_bakup_pos.y;
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseRelease(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],mx,my);
break;
case WM_RBUTTONDOWN:
mx = LOWORD(lParam);
my = HIWORD(lParam);
mx >>= m_pt_app_info.m_pt_zoom_size;
mx += m_pt_app_info.m_pt_bakup_pos.x;
my >>= m_pt_app_info.m_pt_zoom_size;
my += m_pt_app_info.m_pt_bakup_pos.y;
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
{
if(
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_ctrl_id == PtCtrlType_GetColor ||
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_ctrl_id == PtCtrlType_Fill
)
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnMouseDown(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],- mx, - my);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TRACE(L"PtBoard paint rect = %ld ,%ld, %ld, %ld\n",ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_INIT_BAKUP_DC)
{
m_pt_app_info.m_pt_backup_hdc = CreateCompatibleDC(hdc);
//m_pt_app_info.m_pt_backup_hbmp = CreateCompatibleBitmap(hdc,PT_PIC_MAX_SIZE_X,PT_PIC_MAX_SIZE_Y);
m_pt_app_info.m_pt_backup_hbmp = CreateCompatibleBitmap(hdc,m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth,m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight);
SelectObject(m_pt_app_info.m_pt_backup_hdc,m_pt_app_info.m_pt_backup_hbmp);
g_board_buf_hdc = CreateCompatibleDC(hdc);
g_board_buf_hbmp = CreateCompatibleBitmap(hdc,m_pt_app_info.m_pt_board_rect.right,m_pt_app_info.m_pt_board_rect.bottom);
SelectObject(g_board_buf_hdc,g_board_buf_hbmp);
m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_INIT_BAKUP_DC;
}
// board_rgn = CreateRectRgn(0,0,ps.rcPaint.right,ps.rcPaint.bottom);
// SelectClipRgn(hdc, board_rgn);
// DeleteObject(board_rgn);
if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_RELOAD || !CheckFocus())
{
TRACE(TEXT("PtBoard paint reload\n"));
//FillRect(hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));
FillRect(g_board_buf_hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));
INT i = StretchBlt(g_board_buf_hdc,
0,0,
m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_pt_draw_rect.bottom,
m_pt_app_info.m_pt_backup_hdc,
m_pt_app_info.m_pt_bakup_pos.x,m_pt_app_info.m_pt_bakup_pos.y,
m_pt_app_info.m_pt_draw_rect.right>>m_pt_app_info.m_pt_zoom_size,m_pt_app_info.m_pt_draw_rect.bottom>>m_pt_app_info.m_pt_zoom_size,
SRCCOPY);
i = BitBlt(hdc,
0,0,
m_pt_app_info.m_pt_board_rect.right,m_pt_app_info.m_pt_board_rect.bottom,
g_board_buf_hdc,
0,0,
SRCCOPY);
m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_RELOAD;
}
if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_RESET )
{
TRACE(TEXT("PtBoard paint reset\n"));
HBRUSH hbrush = CreateSolidBrush(m_pt_app_info.m_color_bk_cur);
FillRect(hdc,&m_pt_app_info.m_pt_board_rect,(HBRUSH)GetStockObject(GRAY_BRUSH));
//FillRect(hdc,&ps.rcPaint,hbrush);
FillRect(hdc,&m_pt_app_info.m_pt_draw_rect,hbrush);
FillRect(m_pt_app_info.m_pt_backup_hdc,&m_pt_app_info.m_pt_backup_rect,hbrush);
DeleteObject(hbrush);
m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_RESET;
}
if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_LOADFILE)
{
TRACE(TEXT("PtBoard paint loadfile\n"));
LoadBmpToDC(m_pt_app_info.m_pt_backup_hdc);
INT i = StretchBlt(hdc,
0,0,
m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_pt_draw_rect.bottom,
m_pt_app_info.m_pt_backup_hdc,
m_pt_app_info.m_pt_bakup_pos.x,m_pt_app_info.m_pt_bakup_pos.y,
m_pt_app_info.m_pt_draw_rect.right>>m_pt_app_info.m_pt_zoom_size,m_pt_app_info.m_pt_draw_rect.bottom>>m_pt_app_info.m_pt_zoom_size,
SRCCOPY);
m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_LOADFILE;
}
if(m_pt_app_info.m_pt_board_flag & PT_BOARD_FLAG_PTCTRL)
{
TRACE(TEXT("PtBoard paint pt ctrl\n"));
board_rgn = CreateRectRgn(0,0,m_pt_app_info.m_pt_draw_rect.right,m_pt_app_info.m_pt_draw_rect.bottom);
SelectClipRgn(hdc, board_rgn);
DeleteObject(board_rgn);
board_rgn = CreateRectRgn(0,0,m_pt_app_info.m_pt_backup_rect.right,m_pt_app_info.m_pt_backup_rect.bottom);
SelectClipRgn(m_pt_app_info.m_pt_backup_hdc, board_rgn);
DeleteObject(board_rgn);
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev] != NULL)
{
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->m_last_draw_flag)
{
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->m_pdc = hdc;
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]->PtCtrl_OnDrawBoard(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx_Prev]);
}
}
if(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx] != NULL)
{
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->m_pdc = hdc;
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnDrawBoard(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
}
m_pt_app_info.m_pt_board_flag &= ~PT_BOARD_FLAG_PTCTRL;
}
EndPaint(hWnd, &ps);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);;
//return gPtBoard_Proc(hWnd,message,wParam,lParam);
}
return TRUE;
//return DefWindowProc(hWnd,message,wParam,lParam);
}
INT CheckFocus()
{
if(m_pt_app_info.m_main_win_hwnd == GetForegroundWindow())
{
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -