📄 cepaint.cpp
字号:
SelectObject(pdis->hDC,GetStockObject(WHITE_PEN));
DeleteObject(hbrush);
DeleteObject(hpen);
break;
case IDC_BN_COLOR_SEL1:
case IDC_BN_COLOR_SEL2:
case IDC_BN_COLOR_SEL3:
case IDC_BN_COLOR_SEL4:
case IDC_BN_COLOR_SEL5:
case IDC_BN_COLOR_SEL6:
case IDC_BN_COLOR_SEL7:
case IDC_BN_COLOR_SEL8:
case IDC_BN_COLOR_SEL9:
case IDC_BN_COLOR_SEL10:
case IDC_BN_COLOR_SEL11:
case IDC_BN_COLOR_SEL12:
case IDC_BN_COLOR_SEL13:
case IDC_BN_COLOR_SEL14:
case IDC_BN_COLOR_SEL15:
case IDC_BN_COLOR_SEL16:
hbrush = CreateSolidBrush(paint_color[pdis->CtlID - IDC_BN_COLOR_SEL1]);
hpen = CreatePen(PS_SOLID,2,RGB(127,127,127));
SelectObject(pdis->hDC,hbrush);
SelectObject(pdis->hDC,hpen);
Rectangle(pdis->hDC,pdis->rcItem.left,pdis->rcItem.top,pdis->rcItem.right,pdis->rcItem.bottom);
SelectObject(pdis->hDC,GetStockObject(WHITE_BRUSH));
SelectObject(pdis->hDC,GetStockObject(WHITE_PEN));
DeleteObject(hbrush);
DeleteObject(hpen);
break;
case IDC_BN_PT_STYLE1:
case IDC_BN_PT_STYLE2:
case IDC_BN_PT_STYLE3:
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 = pdis->hDC ;
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnDrawStyle(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],pdis->CtlID - IDC_BN_PT_STYLE1);
}
break;
case IDC_SC_BOARD:
break;
}
return 0;
}
INT OnCommand(UINT CTRL_ID, UINT MSG_ID)
{
RECT rt;
switch (CTRL_ID)
{
case IDM_HELP_ABOUT:
DialogBox(m_pt_app_info.m_hInst, (LPCTSTR)IDD_ABOUTBOX, m_pt_app_info.m_main_win_hwnd, (DLGPROC)About);
break;
case IDCANCEL:
EndDialog(m_pt_app_info.m_main_win_hwnd,0);
return FALSE;
//PostQuitMessage(0);
//AfxEndThread(0);
//break;
case IDM_SAVE:
// SaveBmpFromDC(m_pt_app_info.m_pt_backup_hdc);
// SaveBmpToFile("test.bmp");
//GetOpenFileName();
break;
case IDC_BN_PT_PLYRGN :
case IDC_BN_PT_RECTRGN :
case IDC_BN_PT_ERASER :
case IDC_BN_PT_FILL :
case IDC_BN_PT_GETCOLOR :
case IDC_BN_PT_ZOOM :
case IDC_BN_PT_POINT :
case IDC_BN_PT_BRUSH :
case IDC_BN_PT_FROG :
case IDC_BN_PT_TEXT :
case IDC_BN_PT_LINE :
case IDC_BN_PT_BIZZER :
case IDC_BN_PT_RECT :
case IDC_BN_PT_POLY :
case IDC_BN_PT_CIRCLE :
case IDC_BN_PT_CIRRECT :
//dbg_out(L"bn command\n");
if(m_pt_app_info.m_PtCtrl_Table[CTRL_ID - IDC_BN_PT_PLYRGN] == NULL)
break;
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnPaintEnd(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
m_pt_app_info.m_PtCtrl_Idx_Prev = m_pt_app_info.m_PtCtrl_Idx;
m_pt_app_info.m_PtCtrl_Idx = CTRL_ID - IDC_BN_PT_PLYRGN;
m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]->PtCtrl_OnPaintStart(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx]);
//InvalidateRect(m_pt_app_info.m_main_win_hwnd,&rt,FALSE);
GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&rt);
//GetWindowRect(m_pt_app_info.m_main_win_hwnd,&rt);
//m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);
//InvalidateRect(m_pt_app_info.m_main_win_hwnd,NULL,FALSE);
break;
case IDC_BN_PT_STYLE1:
case IDC_BN_PT_STYLE2:
case IDC_BN_PT_STYLE3:
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_OnStyleChange(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],CTRL_ID - IDC_BN_PT_STYLE1);
//InvalidateRect(m_pt_app_info.m_main_win_hwnd,NULL,FALSE);
GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&rt);
RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);
break;
case IDC_BN_COLOR_SEL1:
case IDC_BN_COLOR_SEL2:
case IDC_BN_COLOR_SEL3:
case IDC_BN_COLOR_SEL4:
case IDC_BN_COLOR_SEL5:
case IDC_BN_COLOR_SEL6:
case IDC_BN_COLOR_SEL7:
case IDC_BN_COLOR_SEL8:
case IDC_BN_COLOR_SEL9:
case IDC_BN_COLOR_SEL10:
case IDC_BN_COLOR_SEL11:
case IDC_BN_COLOR_SEL12:
case IDC_BN_COLOR_SEL13:
case IDC_BN_COLOR_SEL14:
case IDC_BN_COLOR_SEL15:
case IDC_BN_COLOR_SEL16:
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_OnColorChange(m_pt_app_info.m_PtCtrl_Table[m_pt_app_info.m_PtCtrl_Idx],paint_color[CTRL_ID - IDC_BN_COLOR_SEL1],MSG_ID);
GetWindowRect(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_COLOR),&rt);
RedrawWindow(m_pt_app_info.m_main_win_hwnd,&rt,NULL,RDW_INVALIDATE);
//InvalidateRect(m_pt_app_info.m_main_win_hwnd,&rt,FALSE);
break;
default:
return FALSE; //return DefWindowProc(hWnd, message, wParam, lParam);
}
return TRUE;
}
INT SetWindowPlace()
{
TCHAR ch[512];
INT scr_x = GetSystemMetrics(SM_CXSCREEN);
INT scr_y = GetSystemMetrics(SM_CYSCREEN) - 25;
INT loop = 0;
float radio_x = (float)scr_x / (float)gPlaceInfo_main_win.wid;
float radio_y = (float)scr_y / (float)gPlaceInfo_main_win.hei;
gPlaceInfo_main_win.wid = scr_x;
gPlaceInfo_main_win.hei = scr_y;
ZoomPlace(&gPlaceInfo_board,radio_x,radio_y);
swprintf(ch,L"place board, x = %d, y = %d\n",gPlaceInfo_board.cx,gPlaceInfo_board.cy);
//dbg_out(ch);
for(loop = 0 ; loop < PT_CTRL_COUNT; loop++)
{
ZoomPlace(&gPlaceInfo_ptctrl[loop],radio_x,radio_y);
// swprintf(ch,L"place %d , x = %d, y = %d\n",loop , gPlaceInfo_ptctrl[loop].cx,gPlaceInfo_ptctrl[loop].cy);
// dbg_out(ch);
}
for(loop = 0 ; loop < 3; loop++)
{
ZoomPlace(&gPlaceInfo_ptsytle[loop],radio_x,radio_y);
}
for(loop = 0 ; loop < PT_COLOR_COUNT; loop++)
{
ZoomPlace(&gPlaceInfo_ptcolor[loop],radio_x,radio_y);
}
ZoomPlace(&gPlaceInfo_ptcolor_cur,radio_x,radio_y);
ZoomPlace(&gPlaceInfo_scrbar_x,radio_x,radio_y);
ZoomPlace(&gPlaceInfo_scrbar_y,radio_x,radio_y);
for(loop = 0 ; loop < 3; loop++)
{
ZoomPlace(&gPlaceInfo_groupbox[loop],radio_x,radio_y);
}
//////////////////////////////////////////////////////////////////////////
SetPlace(m_pt_app_info.m_main_win_hwnd,&gPlaceInfo_main_win);
SetPlace(m_pt_app_info.m_pt_board_hwnd,&gPlaceInfo_board);
for(loop = 0 ; loop < PT_CTRL_COUNT; loop++)
SetPlace(m_pt_app_info.m_pt_ctrl_bn_hwnd[loop],&gPlaceInfo_ptctrl[loop]);
for(loop = 0 ; loop < 3; loop++)
SetPlace(m_pt_app_info.m_pt_style_bn_hwnd[loop],&gPlaceInfo_ptsytle[loop]);
for(loop = 0 ; loop < PT_COLOR_COUNT; loop++)
SetPlace(m_pt_app_info.m_color_sel_bn_hwnd[loop],&gPlaceInfo_ptcolor[loop]);
SetPlace(m_pt_app_info.m_color_cur_bn_hwnd,&gPlaceInfo_ptcolor_cur);
SetPlace(m_pt_app_info.m_pt_sc_bar_x_hwnd,&gPlaceInfo_scrbar_x);
swprintf(ch,L"place sc_bar_x, x = %d, y = %d\n",gPlaceInfo_scrbar_x.cx,gPlaceInfo_scrbar_x.cy);
//dbg_out(ch);
SetPlace(m_pt_app_info.m_pt_sc_bar_y_hwnd,&gPlaceInfo_scrbar_y);
SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_CTRL),&gPlaceInfo_groupbox[0]);
SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_STYLE),&gPlaceInfo_groupbox[1]);
SetPlace(GetDlgItem(m_pt_app_info.m_main_win_hwnd,IDC_SC_COLOR),&gPlaceInfo_groupbox[2]);
return 0;
}
INT AdjustScrollBar()
{
if((m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth << m_pt_app_info.m_pt_zoom_size) > m_pt_app_info.m_pt_draw_rect.right)
{
SetScrollRange(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,(m_pt_app_info.m_bmp_file_info.bmiHeader.biWidth << m_pt_app_info.m_pt_zoom_size) / (m_pt_app_info.m_pt_draw_rect.right>>1), FALSE);
SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,TRUE);
SetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE) & ~WS_DISABLED);
}
else
{
SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,0,TRUE);
SetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_x_hwnd,GWL_STYLE)|WS_DISABLED);
}
if((m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight << m_pt_app_info.m_pt_zoom_size)> m_pt_app_info.m_pt_draw_rect.bottom)
{
SetScrollRange(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,(m_pt_app_info.m_bmp_file_info.bmiHeader.biHeight << m_pt_app_info.m_pt_zoom_size)/(m_pt_app_info.m_pt_draw_rect.bottom >>1), FALSE);
SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,TRUE);
SetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE) & ~WS_DISABLED);
}
else
{
SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,0,FALSE);
SetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE,GetWindowLong(m_pt_app_info.m_pt_sc_bar_y_hwnd,GWL_STYLE)|WS_DISABLED);
}
return 0;
}
INT OnSrcollBoard(INT scroll_flag, WPARAM para)
{
UINT sc_type = LOWORD(para);
UINT sc_value = HIWORD(para);
INT sc_range = 0;
INT sc_pos;
INT sc_min,sc_max;
float radix;
SCROLLINFO sc_info;
sc_info.cbSize = sizeof(SCROLLINFO);
switch(sc_type)
{
case SB_RIGHT:
case SB_LINERIGHT:
case SB_PAGERIGHT:
if(scroll_flag == 0)
{
sc_info.fMask = SIF_RANGE;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
sc_range = sc_info.nMax - sc_info.nMin;
sc_info.fMask = SIF_POS;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
sc_pos = sc_info.nPos;
sc_pos ++;
sc_value = m_pt_app_info.m_pt_draw_rect.right >> m_pt_app_info.m_pt_zoom_size;
m_pt_app_info.m_pt_bakup_pos.x += sc_value >> 1;
if((m_pt_app_info.m_pt_bakup_pos.x + sc_value ) > m_pt_app_info.m_pt_backup_rect.right)
{
m_pt_app_info.m_pt_bakup_pos.x = m_pt_app_info.m_pt_backup_rect.right - sc_value;
sc_pos = sc_range;
}
SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,sc_pos,TRUE);
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
}
else
{
sc_info.fMask = SIF_RANGE;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
sc_range = sc_info.nMax - sc_info.nMin;
sc_info.fMask = SIF_POS;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
sc_pos = sc_info.nPos;
sc_pos ++;
sc_value = m_pt_app_info.m_pt_draw_rect.bottom >> m_pt_app_info.m_pt_zoom_size;
m_pt_app_info.m_pt_bakup_pos.y += sc_value >> 1;
if((m_pt_app_info.m_pt_bakup_pos.y + sc_value) > m_pt_app_info.m_pt_backup_rect.bottom)
{
m_pt_app_info.m_pt_bakup_pos.y = m_pt_app_info.m_pt_backup_rect.bottom - sc_value;
sc_pos = sc_range;
}
SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,sc_pos,TRUE);
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
}
InvalidateRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect,FALSE);
break;
case SB_LEFT:
case SB_LINELEFT:
case SB_PAGELEFT:
if(scroll_flag == 0)
{
sc_info.fMask = SIF_RANGE;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
sc_range = sc_info.nMax - sc_info.nMin;
sc_info.fMask = SIF_POS;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,&sc_info);
sc_pos = sc_info.nPos;
sc_pos --;
sc_value = m_pt_app_info.m_pt_draw_rect.right >> m_pt_app_info.m_pt_zoom_size;
m_pt_app_info.m_pt_bakup_pos.x -= sc_value >> 1;
if(m_pt_app_info.m_pt_bakup_pos.x < 0)
{
m_pt_app_info.m_pt_bakup_pos.x = 0;
sc_pos = 0;
}
SetScrollPos(m_pt_app_info.m_pt_sc_bar_x_hwnd,SB_CTL,sc_pos,TRUE);
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
}
else
{
sc_info.fMask = SIF_RANGE;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
sc_range = sc_info.nMax - sc_info.nMin;
sc_info.fMask = SIF_POS;
GetScrollInfo(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,&sc_info);
sc_pos = sc_info.nPos;
sc_pos --;
sc_value = m_pt_app_info.m_pt_draw_rect.bottom >> m_pt_app_info.m_pt_zoom_size;
m_pt_app_info.m_pt_bakup_pos.y -= sc_value >> 1;
if(m_pt_app_info.m_pt_bakup_pos.y < 0)
{
m_pt_app_info.m_pt_bakup_pos.y = 0;
sc_pos = 0;
}
SetScrollPos(m_pt_app_info.m_pt_sc_bar_y_hwnd,SB_CTL,sc_pos,TRUE);
m_pt_app_info.m_pt_board_flag |= PT_BOARD_FLAG_RELOAD;
}
InvalidateRect(m_pt_app_info.m_pt_board_hwnd,&m_pt_app_info.m_pt_board_rect,FALSE);
break;
}
return 0;
}
LRESULT CALLBACK PtColor_Sel_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
INT ctrl_id;
DRAWITEMSTRUCT draw_st;
switch(message)
{
case WM_LBUTTONDOWN:
//TRACE("WM_RBUTTONDOWN \n");
SendMessage(m_pt_app_info.m_main_win_hwnd,WM_COMMAND,GetDlgCtrlID(hWnd),0);
break;
case WM_RBUTTONDOWN:
//TRACE("WM_RBUTTONDOWN \n");
SendMessage(m_pt_app_info.m_main_win_hwnd,WM_COMMAND, (0x00000001 << 16) | GetDlgCtrlID(hWnd),0);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
ctrl_id = GetDlgCtrlID(hWnd);
draw_st.CtlID = ctrl_id;
draw_st.rcItem = ps.rcPaint;
draw_st.hDC = hdc;
OnDrawItem(&draw_st);
EndPaint(hWnd,&ps);
break;
}
//return DefDlgProc(hWnd,message,wParam,lParam);
return DefWindowProc(hWnd,message,wParam,lParam);
// if(m_pt_app_info.m_color_sel_bn_hwnd[0] == hWnd)
// return g_sel_color_proc_ptr(hWnd,message,wParam,lParam);
//return FALSE;
}
LRESULT CALLBACK PtColor_Cur_Proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd,message,wParam,lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -